OmniAICreator/Qiita-1.07M huggingface dataset:
「CISSP的考え方」とはなんなのか？

# CISSP的考え方とは？

CISSP試験において、知識があっても「CISSP的考え方」がないと解答が導き出せないと言われていますが、CISSP的考え方とはどのようなものなのでしょうか？

合格体験記等から試験前に見返すために自分用にまとめました。

## Kelly Handerhanさん

- **Your Role is a Risk Advisor -- Do NOT fix Problems**
    - CISSPは、問題を修復する（Firewall設定を見直すなど）役割ではない。
    - CISSPの役割は、情報収集し、上級管理職に報告し、アドバイスを与えること
- **Who is responsible for security?**
    - CISSPは選択と決定を行わない。上級管理職が行うこと。
    - いきなり変更などの行動をしない。変更管理プロセスに違反している。
- **How much security is enough?**
- **All decisions start with risk management, whitch starts with Evaluating your assets.**
    - 資産の評価から始める。
    - 資産価値を超える対策は行わない。
- **Think "End Game"**
    - 最終的なゴールを考える。
- **"Security Transcends Technology"**
    - テクノロジーが変わってもセキュリティ原則は変わらない
    - 新しい技術を学ぶより原則を学ぶ
- **Physical safety is always the first choice**
    - 人の安全が最優先。
- **Hey, Techmical people --- Stay out of the weeds!!!**
    - 技術的な解決よりも、管理とプロセスを考えること
    - ビジネスニーズを優先すること
- **Incorporate security into the design, as opposed to adding it on later**
    - 早い段階からセキュリティを考える
    - シフトレフト

https://www.youtube.com/watch?v=v2Y6Zog8h2A




## 晴耕雨読さんのまとめ

:::note info
Q. いつからセキュリティ対策を考えるのか？(When)
:::
A. システムの用件定義などの早い段階から検討する。一番良いのはライフサイクルの中にセキュリティを組み込むこと

:::note info
Q. どこをセキュリティ対策すべきか？(Where)
:::
A. 定量的評価では価値の高い資産から順に、定性的評価では発生可能性と影響を考慮して、優先順位を付けて守る。全てを守る必要はない

:::note info
Q. どの立場からセキュリティを考えるのか？(Who)
:::
A. 経営者の視点からセキュリティ対策を考える。技術の安全な利活用の方法とビジネスへの貢献を考える

:::note info
Q. 何を最優先に守るべきか？(What)
:::
A. 健康と人命が最優先。人を守れない組織に、資産を守ることはできない

:::note info
Q. なぜセキュリティ対策をするのか？(Why)
:::
A. 最低限の安全確保をして最大限にITを利活用するため。対策費用が予想被害額よりも高くてはいけない

:::note info
Q. どのようにセキュリティ対策をするのか？(How)
:::
A. 範囲を決めてガイドラインや国際的なスタンダードなどのベストプラクティスを実施する。次に、少しずつ手順を組織に合うように調整していく

:::note info
Q. どのくらいセキュリティ対策が必要なのか？(How much)
:::
A. 攻撃を完全に防げる対策は存在しない。しかし、攻撃者を諦めさせる対策や侵入を遅らせる遅延策の組み合わせでも十分効果がある

#### 引用元
https://tex2e.github.io/blog/security/cissp-notes


## knmtsさんのまとめ

:::note info
セキュリティはあくまでもビジネスの補助役である
:::

では CISSP 的な考え方は何だ？となるわけですが「セキュリティはあくまでもビジネスの補助役である」という考え方に尽きると思います。
「ビジネスを車に例えると、収益を産むのがアクセルで、セキュリティはブレーキにあたる。理想的にはアクセルを踏み続けたいが、障害物を回避する際などにはブレーキも適切に使わないと事故になってしまう。だからと言って、ブレーキをずっと踏んでいると車はちっとも進まない。ブレーキは必要な時に必要な最小限だけ使用するのが良いのであって、セキュリティについてもそのように考えるべき。」です。抽象的な問題を考える際の出発点として、この考え方を念頭に置いておけば、概ね妥当な回答ができるのではないでしょうか。

#### 引用元
https://knmts.com/as-a-engineer-221/


## PEDPINのまとめ

:::note info
１．企業目標を達成するためのセキュリティ
:::
企業で実現したい目的に見合った規模・範囲でのセキュリティを担保する

:::note info
２．安全な状態などない
:::
すべてのリスクを排除する完璧な状態がないということを理解する

:::note info
３．すべてはお金で説明
:::
明確な基準がないと評価できない

:::note info
４．組織の一員としての判断
:::
勝手に業務スコープを広げない。取締役ではなくあくまでもセキュリティ専門家としての職務を全うしないとならない。他の職務の権限を含むような判断を勝手にしてはいけない。また、真っ当な説明責任が果たせるように合理的で筋が通っていないといけない。

#### 引用元
https://piedpin.com/top/2021/04/18/cissp-thought/


## shmatsuyさんのまとめ

:::note info
私の解釈では CISSP 的な考え方は人命は最優先な上でヒト・モノ・カネのバランスがとれていること、生産性を損なわないための最適解。という感じ。
:::

#### 引用元
https://zenn.dev/shmatsuy/articles/6af639d0850a92


## Ozte9さんのまとめ

:::note info
CISSPはプロフェッショナルとして動くべきことを意識する。(ISC)² 倫理規約を読んでおく。
:::

:::note info
2択になったら、「どちらがより多くの人／システムに対応することができるか」を考えて、範囲が広いほうを選ぶ。一般性が高いほうを選ぶ。
:::

:::note info
目線は経営者(ビジネス)目線にする。リスクと対策コストを比較して、対策コストのほうが高いのならばリスク受容する。
人命に関わる場合はどんな事態であっても人命優先。
:::

#### 引用元
https://0zte9.hatenablog.com/entry/2018/12/29/184812
基本情報技術者試験　アプリケーション層

# 基本情報技術者試験　ネットワーク層　
基本情報技術者試験　ネットワーク層の主要なプロトコルについてまとめました。
yOUTUBEで動画もあります。読むのが苦手な方などはご覧ください。
https://youtu.be/H1CTzFoO_X4


##  プロトコル
コンピュータ同士が通信するときに使用する手順や約束事のこと

## アプリケーション層
アプリケーションの機能を提供するもの
なので以下に出てくるプロトコル（約束事）はそれぞれのアプリを通信するときに使うプロトコル（約束事）のことです。
HTTP: HTML文を送受信するもの。　(HTMLとはwebページをつくるときに使う）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656436/1b012090-622c-3063-bc90-705b4d432379.png)

FTP:ファイルを転送する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656436/049a8ef2-f61d-d34c-6ceb-26df70838702.png)

NTP:タイムサーバーの時刻を基に複数のコンピュータの時刻を同期させる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656436/e90c82c7-2dcb-2915-ea72-3bc1a11e84b5.png)

SMTP:メールを送信するときやメールサーバー間でメールを送受信する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656436/9cd239de-12e9-d546-2894-8b4dd8eaeb17.png)

POP3:メールサーバーのメールボックスからメールを取り出す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656436/8a32b5dc-4ef1-c32a-07b5-f8e7cc62dcd2.png)

SMTPとPOP3の違いはメールをサーバーに送るのがSMTPであり、POP3はメールを取り出すだけ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656436/4080e478-2d84-8120-fbe3-85edfcf2b0b7.png)
Code ウェブサイト用フローティングコンタクトボタンのスタイルとHTMLコード

このコードは、ウェブサイト上に固定された連絡方法を表示するためのものです。具体的には、Zalo、Facebook、およびホットラインへの直接リンクを含むフローティングコンタクトボタンが設定されています。

スタイル定義部分では、.float-contact クラスがフローティング要素の位置とスタイルを定義しています。この要素は画面の左下に固定され、z-indexの値が非常に高く設定されているため、他の要素の上に表示されます。

.chat-zalo, .chat-face, そして .float-contact .hotline クラスは、それぞれのボタンの背景色、角の丸み、パディング、文字色などを設定しています。特に、各サービスに応じて異なる背景色が指定されています（例えば、Zaloは緑色、ホットラインは赤色）。

また、メディアクエリを使用して、画面幅が549ピクセル以下の場合には、フローティングボタンの位置とパディングを調整し、フォントサイズを小さくしています。

最後に、HTML部分では、実際にユーザーがクリックできる3つのボタン（Zalo、Facebook、ホットライン）が定義されており、それぞれに対応するリンクが設定されています。これにより、ユーザーは直接対応するサービスにアクセスすることができます。
```
<style>
.float-contact {
    position: fixed;
    bottom: 20px;
    left: 20px;
    z-index: 99999;
}

.chat-zalo, .chat-face, .float-contact .hotline {
    background: #125c9e;
    border-radius: 20px;
    padding: 0 18px;
    color: white;
    display: block;
    margin-bottom: 6px;
}

.chat-zalo {
    background: #8eb22b;
}

.float-contact .hotline {
    background: #d11a59!important;
}

.chat-zalo a, .chat-face a, .hotline a {
    font-size: 15px;
    color: white;
    font-weight: 400;
    text-transform: none;
    line-height: 0;
}

@media (max-width: 549px) {
    .float-contact {
        bottom: 10px;
        left: 10px;
    }

    .chat-zalo, .chat-face, .float-contact .hotline {
        padding: 0 12px;
    }

    .chat-zalo a, .chat-face a, .hotline a {
        font-size: 12px;
    }
}
</style>

<div class="float-contact">
    <button class="chat-zalo">
        <a href="http://zalo.me/0867592210">Chat Zalo</a>
    </button>
    <button class="chat-face">
        <a href="http://m.me/telegramwebvn">Chat Facebook</a>
    </button>
    <button class="hotline">
        <a href="tel:0867592210">Hotline: 0867592210</a>
    </button>
</div>

```
CerberusのValidatorをカスタマイズする（自作のバリエーションチェック条件を入れる）方法

# やりたいこと
PythonのCerberusライブラリは、本来ヌルチェックや桁数チェックなどいろんなチェックができるけど、プロジェクトの要望のより、どうしてもチェックできない条件が出てしまって、、、

今回の場合、データの「A項目とB項目いずれか存在していること」を確保したいので、CerberusのValidatorをカスタマイズしてみました～

# 前提
・Pythonインストール済み
・pipenvインストール済み
（今回は便宜上pipenvでやるのですが、ローカルでcerberusなど諸々ライブラリを入れてテストをやっても大丈夫です）

# ソースの中身
さっそく調べた結果をソース化しました～
今回は「name」項目と「nickName」項目のいずれに存在している（ヌルかブランクではない）ことをチェックします
まずは、カスタマイズしたValidatorクラスを紹介します～ 

```ruby:customized_validator.py
from cerberus import Validator

# Validatorクラスを継承する
class CustomizedValidator(Validator):
    def __init__(self, *args, **kwargs):
        super(CustomizedValidator, self).__init__(*args, **kwargs)

    # メソッド名は「_validate」始まりで、後ろに自由に命名できる
    def _validate_true_either_or(self, schema_value, field, value):
        """
        指定した二項目の中に、少なくとも1つの値が存在しているであること
        :param schema_value: スキーマの値
        :param field: 項目名
        :param value: 項目値
        The rule's arguments are validated against this schema: {'type': 'string'}
        """
        # まずは、データの行（全項目の値）を取得する
        item = self.root_document
        # ここからは、自作のチェックコード
        # 異常時のエラー文も自作できる
        if len(item[field]) == 0 and len(item[schema_value]) == 0:
            self._error(field, f'either {schema_value} or {field} must have value')
```
データの行（全項目の値）の取得に関して、上記のコードは「一回のバリエーションチェックに、一行のデータのみチェックする」という想定ですが、
以前書いたブログのように、一回で複数行のデータをチェックしたい場合はこのように書き換えてください～

```ruby:
item = self.root_document[self.document_path[0]][self.document_path[1]]
```
https://qiita.com/curlneko/items/6ce4c42da53298b7cd7b


そして、バリエーションチェックのコードを紹介します～
スキーマの中に、さきほど作ったチェック条件を入れました～

```ruby:cerberus_validator.py
from cerberus import Validator
from customized_validator import CustomizedValidator


SCHEMA = {
    'name': {
        'type': 'string',
        'required': True,
    },
    'nickName': {
        'type': 'string',
        'required': True,
        'true_either_or': 'name', # ここが自作チェック条件
    },
}


def validate_info(info):
    validator = CustomizedValidator(allow_unknown=True)
    if not validator.validate(info, SCHEMA):
        print(validator.errors)
        return False
    return True

# 正常時
info = {'name': 'satoh', 'nickName': 'S'}
print(validate_info(info))

# 異常時、両方とも中身がブランクである場合
info = {'name': '', 'nickName': ''}
print(validate_info(info))

```

# 終わりに
Cerberusのもともとあるチェックは便利ですが、PJの要望によってどうしても足りない場合があるかと思います
今回はその自作チェック方法の作り方を調べました。必要な方は活用してください～
Japan AWS Jr. Champion活動記録 Vol.8

## はじめに
12月は、Jr. Champions有志による自主勉強会とRe:invent Recapが開催されました。今回はその2つについて書いていきます。これからも活動に関して、定期的にアウトプットしていきます！

↓ 前回の記事はこちら ↓

https://qiita.com/am_i-12/items/3e37a8f41079e902da42

## Japan AWS Jr. Champion Partner Programとは
> [「Japan AWS Jr. Champion Partner Program」](https://aws.amazon.com/jp/blogs/psa/2023-aws-jr-champions/)とは、AWS Partner Network (APN) 参加企業に所属し、現在社会人歴 1 ～ 3 年目で AWS を積極的に学び、アクションを起こし、周囲に影響を与えている APN 若手エンジニアを選出しコミュニティを形成する、日本独自の表彰プログラムです。本プログラムでは、AWS に関して実践してきた技術的な挑戦や、コミュニティのリードなど自ら起点となって周囲に影響を与えているか、アウトプットを通じて周囲へ貢献しているか、という観点が評価の対象になります。2023 Japan AWS Jr. Champions に選出された方は、一定の技術力があり、社内の AWS コミュニティをリードでき、今後は Japan AWS Top Engineers そして Japan AWS Ambassadors になることが期待される皆様です。

2023年は[82名が選出](https://aws.amazon.com/jp/blogs/psa/2023-japan-aws-jr-champions/)されており、1年間Japan AWS Jr. Championsとして活動しています。

AWS Summit Tokyoの表彰時に撮影した集合写真
![img_7571_720.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851817/b6c165ed-6033-741d-c32c-2338b9be42fe.jpeg)

## Jr. Champions勉強会
### Jr. Champions勉強会通常回
#### 「IaCを安全に実行したい」

:::note info
**IaCとは**
Infrastructure as Code (IaC) とは、手動のプロセスや設定の代わりにコードを使用してコンピューティングインフラストラクチャをプロビジョニングおよびサポートできることをいう。
参考：[Infrastructure as Code (IaC) とは何ですか?](https://aws.amazon.com/jp/what-is/iac/)
:::

**感想**
Security Hubに頼らず、デプロイ前に脆弱な設定を確認する静的解析について紹介してくださいました。cfn_lintやcfn_nag, cloudformation guardなどが紹介されており、普段使用しているものを改めて見つめなおす良い機会となりました。普段からよくCloud Formationテンプレートを記述するので、自分のコーディング力やセキュリティ知識をブラッシュアップしつつ、脆弱性を発見する仕組み作りを考えていきたいと思いました。


### Jr.Champions勉強会TopEngineer参観回
#### 「社内サンドボックス環境のその後」

**感想**
8月のJr. Champions勉強会で発表された「Controll Tower＋αで始めるサンドボックス環境」の続編の発表が行われました。実際にサンドボックス環境の運用が始まったものの、ドキュメント化や手動メンテナンスの負担が多い等の問題が発生しており、それに対しての反省とCodePipelineやTaskCatを使った解決案が発表されていました。私も運用開始後に問題点を見つけることを何回も経験しているので、共感しながら拝見しました。事前に想定する力を伸ばしていくのはもちろんのこと、実際に問題が起きた時の対応のレパートリーを学ぶことは大事だと思うので、今回で対応事例を学べてよかったです。

## Re:invent Recap
12月のMeetUpは、11月に開催された[Re:invent](https://aws.amazon.com/jp/events/reinvent-2023/)のRecapをメインコンテンツとして開催されました。立候補された6名のJr. Championsが、自分が見たコンテンツ・興味深かったコンテンツについて発表してくださいました。

### LT内容
- S3 Express One ZoneでAthenaはどの位速くなるのか
- 注目アップデート（Amazon Detective, Amazon CodeWhisperer）と現地に行ってみて得た学び
- Amazon CodeCatalyst × Amazon Q
- re:inventでAWS JAMとGameDayに参加してみた
- ゼロETL
- s3は何が変わったの？（S3 Access Grants, S3 Express One Zone Class）

:::note info
**ゼロETLとは**
ETLは、Extract（抽出）Transform（変換）Load（格納）の頭文字を組み合わせたもの。ゼロ ETL は、ETL データパイプラインを構築する必要性を排除し、または最小限に抑える一連の統合のことをさす。
参考：[ゼロ ETL とは何ですか?](https://aws.amazon.com/jp/what-is/zero-etl/)
:::

**感想** 
様々な視点から見たRe:inventの発表を聞けて、非常に興味深かったです。3点ほどピックアップして感想を述べたいと思います。

まずは、S3に新しく加わったストレージクラスである、S3 Express One Zone Classについてです。お二人が実際に試した数値も含めて発表してくださり、どのくらい実行時間が短縮されるのかを理解できました。自社で使えるかも含めて自分でも調べてみたいと思いました。

そして、次にAWS JAMについてです。私は自社内でJAMイベント運営しているので興味深く聞かせていただきました。JAMの内容はもちろんのこと、3つのJAMをRe:invent中に参加しているスケジュールの組み方も興味深かったです。Re:inventは沢山のセッションを回るイメージだったのですが、こんな風にハンズオン多めの回り方もいいなと思いました。もし自分もRe:invent現地参加する機会があったら、JAMにも参加したいと思います！

最後に英語です。何名かが英語について言及されていましたが、技術的な発表を英語で聞くのはやはり難しいのだとわかりました。私も現地参加の機会があれば、できる限り英語に慣れてから参加したいなと思いました。




以上です。ありがとうございました。
.NETでCLIアプリを作るベストな方法

## 参考
この記事は、下記の動画の概要です。
詳しくは、動画をご覧ください。

https://youtu.be/4KHFrbJHCHc?si=CTTmyFfbimAk2V0t

また、この動画の中で紹介されているのは、下記のパッケージです。
詳しくは、このサイトをご覧ください。

https://github.com/mayuki/Cocona

## コマンド行のオプションや引数を受け取る

- メソッドを`AddCommand`メソッドを使い、アプリケーションに追加する
- コマンド行のオプションや引数は、メソッドの引数に注入される
- オプションや引数の詳細は、メソッドの仮引数に付ける属性で指定する

## コマンド行引数として（サブ）コマンドを用意する

- クラスの`public`なメソッドとして（サブ）コマンドを用意する
- そのクラスを`AddCommands<T>`メソッドを使い、アプリケーションに追加する
- （サブ）コマンドの詳細は、メソッドに付ける属性で指定する
BigQueryのパーティションの有効期限を変更する方法

### 背景
BigQueryにおいてパーティションの期限が60日に設定されており、データが意図せず消えてしまうケースがあります。
気づかずにデータ10日分ほど消えてしまった orz

### 対策
下記のクエリを実行する

```
ALTER TABLE `[PROJECT_ID].[DATASET].[TABLE]`
SET OPTIONS (
  partition_expiration_days = [EXPIRATION_DAYS]
)
```
React Router v6 で固定のパス以下を管理する

React Router v6 におけるルーティングの管理は、より直感的で柔軟にできたのでメモ用に書き残します。
今回は、/users 以下のパスを管理する方法について詳しく見ていきます

### 基本構成
React Router v6 では、ルートの管理方法が変更されました。Switch コンポーネントは廃止され、新たに Routes コンポーネントが導入されています。これにより、ルートのネスティングがより簡単に行えるようになりました。

### Routes コンポーネントの使用
Routes コンポーネントは、複数の Route コンポーネントをラップし、URL パスに基づいて適切なコンポーネントを描画します.


``` jsx
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";

function App() {
  return (
    <Router>
      <Routes>
        <Route path="/about" element={<About />} />
        {/* 他のルート */}
      </Routes>
    </Router>
  );
}
```

## Route コンポーネントの変更
v6 では、Route コンポーネントは component プロパティの代わりに element プロパティを使用します。これにより、JSX 要素を直接渡すことができます：

``` jsx
<Route path="/about" element={<About />} />
```

### users パス以下のルーティング
/users 以下のルーティングを管理するためには、専用のルートコンポーネントを作成します。
この方法により、ルーティングの構成が明確にできたように思います。

### UserRoutes コンポーネントの作成
まず、/users 以下のルートを管理するための UserRoutes コンポーネントを作成します

``` jsx
// UserRoutes.js
import { Routes, Route } from "react-router-dom";
import SignIn from "../components/user/SignIn";
import SignUp from "../components/user/SignUp";

const UserRoutes = () => {
  return (
    <Routes>
      <Route path="/sign_in" element={<SignIn />} />
      <Route path="/sign_up" element={<SignUp />} />
      {/* 他のサブルート */}
    </Routes>
  );
};

export default UserRoutes;
```

ここで重要なのは、UserRoutes 内の各 Route の path が /users からの相対パスになることです。

## App コンポーネントでの UserRoutes の使用

App コンポーネントで UserRoutes を使用し、/users/* パスにマッピングします：

``` jsx
// App.js
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import UserRoutes from './routes/UserRoutes';
// 他のインポート

function App() {
  return (
    <Router>
      <Routes>
        <Route path="/users/*" element={<UserRoutes />} />
        {/* 他のルート */}
      </Routes>
    </Router>
  );
}

export default App;
```

/users/* は、UserRoutes コンポーネントに定義されたすべてのサブルートに対応します。

# まとめ
React Router v6 では、Routes と Route の新しい使い方により、ルートの管理がより簡単かつ効率的になりました。特に、サブルートを専用のコンポーネントに分離することで、アプリケーションのルーティングの構造をより明確にできます。
【JS/ES6】疎結合と密結合


# はじめに
JSを勉強中に疎結合と密結合という言葉を知った。

# 疎結合と密結合って？
「密結合」は素間の関係性が強く、個々の要素が他の要素へ及ぼす影響が大きな状態。
「疎結合」は要素間の関係が相対的に緩く、独立性が高い状態。

# JSにおいての疎結合と密結合
JSのメソッドを作る時、グローバルで定義した変数を使うのは便利な反面、密結合が起こりやすい。
```
let word = "hoge";

const hoge = () => {
  word = "fuga";
};

hoge();
```
この場合、グローバルで定義したwordを作成した関数で直接書き換えているが、この書き方だと変数（word）と関数（hoge）をセットで使用することになる（密結合）。
また、他の関数で同じ変数を使うこともあり得るので避けたい。
```
let word = "hoge";

const hoge = (word) => {
  word = "fuga";
};

hoge(word);
```
こちらの書き方は結果は同じだが、変数で引数を渡して使用することでメソッドを独立して使用することができるのでこちらのほうがいい（密結合を防げる）
【JS/ES6】関数（メソッド）の宣言の仕方（書き方）


# はじめに
関数を宣言するときに忘れそうになるので備忘録メモ。


# 通常の宣言パターン

```
const 関数名 = function(引数){
  // ここに処理
};

const 関数名 = (引数) => {
  // ここに処理
};
```

# プロパティを持たせての宣言パターン

```
const オブジェクト名 = {
  プロパティ名1: 値1,
  プロパティ名2: () =>{
    // ここに処理
  }
}

オブジェクト名.プロパティ名2();
```

# クラス定義

```
class クラス名{
  constructor(引数){
    this.変数名 = 値;
  }

  メソッド1(){
  }

  メソッド2(){
    this.メソッド1();
  }
}

//クラスからインスタンスを生成
const インスタンス名 = new クラス名();

```

### クラスAを継承したクラスB
```
class A{
  constructor(){
  }
}

class B extends A{
  constructor(){
    super();
    //コンストラクタをオーバーライドする際は親クラスのコンストラクタを呼び出す
  }
}

```
【Laravel】多言語化のための言語ファイルをコマンドで出力する

Laravel の多言語化対応をすることになったのですが、どうやら CakePHP とは違い標準で翻訳文字列を配列なり json なりで一括出力する方法は用意されていない模様。そんなことある…？

packagist で適当に「laravel trans」とか入れて検索し、適当にというか簡単に言語ファイルを出力できそうなパッケージを検索。それっぽいパッケージを見つけたので使いながらメモ。

## kkomelin/laravel-translatable-string-exporter

### インストール

通常、本番環境で使う事はないと思うのでオプション --dev でインストール

```bash
composer require kkomelin/laravel-translatable-string-exporter --dev
```

### 言語ファイルの出力

専用の artisan コマンドが使えるようになるので、そちらを実行する

```bash
php artisan translatable:export <lang>

# example 
# 英語の言語ファイルを出力する
php artisan translatable:export en
```

<br>

実行後、Lang ディレクトリ下に en.json ファイルが出力される
```json
{
    "予約を受け付けました。": "予約を受け付けました。",
    "予約番号を必ずお控えください。": "予約番号を必ずお控えください。",
    "お客様の予約番号": "お客様の予約番号",
    "予約番号": "予約番号"
}
```


どうやらキーバリューどちらも日本語文字列が入る模様。

空文字の方が嬉しかったのですがとりあえず簡単に使えそうです。
作者様ありがとうございます。


## リンク

### packagist 
https://packagist.org/packages/kkomelin/laravel-translatable-string-exporter
### github
https://github.com/kkomelin/laravel-translatable-string-exporter
C#学習～型変換～

C#の学習記録。
型変換について頭がこんがらがりそう…。

## データ型が異なる物同士の演算

### ■暗黙の型変換
自動的にいずれかの型に揃えて演算が行われる。

<table>
  <thead>
    <tr>
      <th>変換元</th><th>変換先</th>
    </tr>
    <tr>
      <td>int</td><td>long,float,double,decimal</td>
    </tr>
    <tr>
      <td>char</td><td>ushort,int,uint,long,ulong,float,double,decimal</td>
    </tr>
  </thead>
</table>

・右辺に型が混在する場合
変換元から変換先に一時的に型変換されてから演算される。

```
int a = 10;
double x = 3.2, y;
y = x * a;  //右辺はdouble型で演算される。
```


・代入する場合
```
int a = 10;
double x = a; // 自動的に左辺の型に変換され、aが10.0になる。
```


### ■明示的な型変換
どの型に変換するのか明示的に変換する事。

（例）
右辺の小さな方に右辺の大きな型を代入する場合、
収まりきらないのでエラーが出る。
```
int a;
double x = 123.456;
a = x; //エラーが生じる。
```

なので強制的に代入したい場合、キャスト演算子を使う！
※小数点以下を切り捨てたいという場合以外はaをdoubleで宣言する事！

```
int a;
double x = 123.456;
a = (int)x; //double型のxをint型にキャスト（変換）し、a = 123 になる。
```

### ■文字列型と他の型で演算を行う場合

・文字列型に他のデータ型を代入する場合

```
データ.ToString()
```

```
int a = 10;
double x = 123.456;
string s1 = a.ToString(); //"10" に変換
string s2 = x.ToString(); //"123.456"に変換
string s3 = 789.ToString(); //"789"に変換
```


・文字列型を他のデータ型に代入する場合
任意のデータ型に変換できる。
```
データ型.Parse(文字列)
```

```
string s1 = "12345";
int a = int.Parse(s1); // aは12345
double x = double.Parse("3.14");　//xは3.14
```


### ■除算の演算によって小数点以下が失われないようにする場合
整数同士の除算を行うと小数点以下は切り捨てられる。
なので明示的な型変換を行い小数点以下を残す！

```
double a = 5 / 2;  
// 明示的な型変換を行わないとa = 2.0となる。

double x = (double)5 / 2; 
// 5がdouble型として扱われ、「5.0 / 2」は暗黙の型変換により結果は「2.5」となる。
```
PowerAutomateの基礎中の基礎

# <font color="green">**はじめに**</font>

お恥ずかしながら、、、
PowerAutomateって何？って思ってた人です。

私が神のように崇める先輩からとりあえずPowerAutomate触ってみ！
と言われたので、自分のまとめ用と、PowerAutomateどんなのか知りたいなあ。
と思ってる人に読んでいただけたらと思います！

# <font color="green">**PowerAutomateとは？**</font>

Microsoft社が近年力を入れている「Power Platform」と呼ばれるローコード開発プラットフォームの1つで、「Power Platform」の中でも「業務プロセスの自動化」に特化したアプリケーションです。人が繰り返し作業や定型業務など、できるだけリソースを割きたくない業務を自動化することができます。PowerAutomateを使いこなすことにより、ビジネスのコアプロセスによりフォーカスできるようになり、生産性が向上します。

### クラウド版Power Automateの特徴 ###
プログラミングの知識が必要なく、Excelの基本的な関数が使いもなせるレベルにあるユーザーなら、誰でもPowerAutomateを使いこなすことができます。

Microsoftアプリを中心に、下記のようなビジネスで利用する様々なクラウドサービスと連携することができます。
・Teams　・SharePoint　・OneDrive　・Outlook　・Gmail　・Slack　etc...
クラウドアプリ間で、データの受け渡しをすることができます。

### PowerAutomateとPowerAutomateDesktopの違い ###
どちらが良い悪いではなく、それぞれ全く別のサービスであると言えます。
#### PowerAutomate(Micriosoft365ライセンス) ####
・クラウドサービスの業務フローを自動化する
・スケジュールやトリガーなど任意のタイミングで実行可能
・PCの電源を切っても問題なく実行される
・ローカル上のExcelやファイル操作することができない
#### PowerAutomateDesktop(無償版) ####
・デスクトップ上の業務プロセスを自動化する
・基本的に手動での実行
・実行中はPCの電源を切ることができない
・ローカルファイルならほぼなんでも操作可能

# <font color="green">**実際にどんなことができる？**</font>
では、実際にどんなことができるのか...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3166833/6a6f08da-6a42-48d3-2bd6-a6bad6e437ab.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3166833/37d7f281-dbe4-4382-76b0-4efc8409ef3e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3166833/39ef6e49-36c3-e12f-6f90-62831438d7c5.png)

適当に3つ挙げました。
一体何個のテンプレートがあるん！？っていうくらい大量にあります。

個々人で使いたいものも違うと思うので是非眺めるだけでもしてほしいです。
既に用意されているテンプレートも多くありますし、
自分でフローを作成することもできるので、用途に合わせて
様々な業務効率の改善が図れると思います。

# <font color="green">**使い方**</font>
> https://learn.microsoft.com/ja-jp/power-automate/getting-started

具体的に使い方も書こうかと思いましたが、
え、こんな簡単にできるの？って感じたので、
一旦公式のリンクを貼っておきます。

これから実際に使ってみたものをここに追加していこうと思います。
完全にまとめ用になってしまって申し訳ないですが...

# <font color="green">**さいごに**</font>
PowerAutomateもじゅめちゃくちゃ活用してる！って方も恐らくいらっしゃると思うので、
これ便利！みたいなものを共有しあって業務効率改善しまくれれば理想です！
C# でコンソールから入力を受け取る

## intを1桁
```c#
int i = int.Parse(Console.ReadLine());
```

## 文字列1行
```c#
string str = Console.ReadLine();
```

## 文字列の配列
```c#
string[] arr_str = Console.ReadLine().Split(' ');
```

## intの配列
```c#
// using System.Linq;

int[] arr_int = Console.ReadLine().Select(i => int.Parse(i)).ToArray();
```
C#学習（変数、定数の宣言・コメント）


C#学習の備忘録。

## 基本の型
```
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("あいうえお");　//処理内容を書く
    }
}
```


## 変数の宣言
C#では最初にデータの種類の宣言を行う。

※変数名の付け方。
先頭は小文字で。複数単語を組み合わせる場合は、２語目の先頭を大文字にする。

### ■データ型を決める

データ型には形式、型名、おおよその扱える範囲が決まっている。

<table>
  <thead>
    <tr>
      <th>形式</th><th>型名</th><th>おおよその扱える範囲</th>
    </tr>
  </thead>
    <tr>
     <td>数値型(整数型)</td><td>int</td><td>-2,147,483,648～2,147,483,647</td>
    </tr>
    <tr>
     <td>数値型(実数型)</td><td>double</td><td>約±5.0x10^-324～±1.7x10^308</td>
    </tr>
    <tr>
      <td>論理値型</td><td>bool</td><td>falseとtrueのみ</td>
    </tr>
    <tr>
      <td>文字型</td><td>char</td><td>Unicode文字</td>
    </tr>
    <tr>
      <td>文字列型</td><td>string</td><td>Unicode文字列</td>
    </tr>
</table>

※var型を使うと、変数の型を推論してくれる。
再代入する際は変数の宣言は必要なし。



```
var greeting = "Hello world"
greeting = "こんにちは"
```
例）
```
（例）
var a = 10; // int a = 10;
var b = 1.23;　// double b = 1.23;
```

しかし、varで宣言した後に、異なる型の代入を行うとエラーとなる。
```
a = 10.2; // aは整数型と判断しているのでエラーになる。
```


## 定数の宣言
不変の値、入力の上限値・下限値のようにプログラムの中で変更しない値を定数にする事。
```
const int a = 1;　
a = 3; //値を再代入しようとするとエラーになる。
```

## コメントの書き方

```
//　単一行コメント

/*　複数行に
    コメント*/
```
Fedoraでマウスカーソルサイズを変更

Fedoraでマウスのカーソルサイズを変更する


#### バージョン

```bash
$ cat /etc/fedora-release 
Fedora release 39 (Thirty Nine)
```

#### ツールインストール

```bash
$ sudo dnf install dconf-editor
```

#### ツールからカーソルサイズを変更

最初は「デフォルト値を使用する」にチェックが入っていて変更できないので、ここをoffってからカスタム値に入力

パス？は /org/gnome/desktop/interface/cursor-size
　※バージョンによって違うかも

![cursor-size.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153259/26a9e8d9-8ad7-e537-28bb-887b4760d4a9.png)



---

#### ツールからログイン画面のユーザ名を非表示に

ログイン画面でユーザ名が表示されているのはセキュリティ的にいかがなものか。。


パス？は /org/gnome/login-screen
　※バージョンによって違うかも

![Screenshot from 2025-01-17 07-45-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153259/4807e984-04d4-dec7-548f-f35b58d5bde1.png)




これでダメなら。。

##### gdm の設定を書いて、dconf のプロファイルを有効に

```bash:/etc/dconf/profile/gdm
user-db:user
system-db:gdm
file-db:/usr/share/gdm/greeter-dconf-defaults
```

```bash:/etc/dconf/db/gdm.d/00-login-screen
[org/gnome/login-screen]
# Do not show the user list
disable-user-list=true
```

##### dconf の設定を反映&再起動

```
sudo dconf update
sudo systemctl restart gdm
```



これでもダメなら。。

```
sudo dnf install dbus-x11
sudo dnf install systemd-container

sudo machinectl shell gdm@ /bin/bash
dbus-launch
gsettings set org.gnome.login-screen disable-user-list true

sudo systemctl restart gdm
```


参考サイト（いろんな情報アップしてくださる方々。本当にありがとうございます）
https://takuya-1st.hatenablog.jp/entry/2022/01/09/054809
https://help.gnome.org/admin/system-admin-guide/stable/login-userlist-disable.html.en

---

##### 補足

スクリーンショットを取るのに gnome-screenshot を使用

```bash
$ sudo dnf install gnome-screenshot
```

![Screenshot from 2024-01-09 09-51-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153259/0dd37d7e-97bf-35ee-18ff-96e8e8966387.png)
AWSのマネジメントコンソールでキーペアを作成する

こんにちは。
本日は、仮想サーバーにSSHでログインする際に使うキーペアを作成する手順を記載します。

# AWSのマネジメントコンソールでキーペアを作成する手順

## 1. 以下のリンクにアクセス

東京リージョンか大阪リージョンで作成する場合、以下のリンクでVPCを作成する画面に遷移します。

* 東京リージョンでVPCを作成する
[https://ap-northeast-1.console.aws.amazon.com/ec2/home?region=ap-northeast-1#CreateKeyPair:](https://ap-northeast-1.console.aws.amazon.com/ec2/home?region=ap-northeast-1#CreateKeyPair: "キーペアを作成")<br><br>


* 大阪リージョンでVPCを作成する
[https://ap-northeast-3.console.aws.amazon.com/ec2/home?region=ap-northeast-3#CreateKeyPair:](https://ap-northeast-3.console.aws.amazon.com/ec2/home?region=ap-northeast-3#CreateKeyPair: "キーペアを作成")

## 2. 以下の値を入力/設定

以下ような値を入力します。

<table>
<tr>
  <td>項目</td>
  <td>入力の仕方</td>
  <td>入力例</td>
  <td>備考</td>
</tr>
<tr>
  <td>名前</td>
  <td>テキスト</td>
  <td>PoC-20240105</td>
  <td>－</td>
</tr>
<tr>
</tr>
<tr>
  <td rowspan=2>キーペアのタイプ</td>
  <td rowspan=2>ラジオボタン</td>
  <td><b>RSA</b></td>
  <td>※RSAがデフォルト値</td>
</tr>
<tr>
  <td>ED25519</td>
  <td>－</td>
</tr>
<tr>
  <td rowspan=2>プライベートキー<br>ファイル形式</td>
  <td rowspan=2>ラジオボタン</td>
  <td>.pem</td>
  <td>OpenSSHで使用する場合</td>
</tr>
<tr>
  <td><b>.ppk</b></td>
  <td>PuTTY で使用する場合<br>※PuTTYがデフォルト値</td>
</tr>
<tr>
  <td>タグ</td>
  <td>テキスト</td>
  <td>－</td>
  <td>任意</td>
</tr>
</table>

入力が終わりましたら、「キーペアを作成」を押します。
以下では、名前を入力し、キーペアのタイプは変更せずにデフォルト値で、
プライベートキーファイル形式はデフォルトの <b>.pem</b> から <b>.pem</b> に変更しています。

![KeyPair-20240105-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622796/51c24dcf-6a60-a38d-6391-a03969adedf5.png)

<br>

キーペアが作成されましたと表示されます。
引き続き、キーペアのダウンロードが自動的に始まります。

![KeyPair-20240105-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622796/9c6d18d4-bdc0-0b7a-03cc-a4d456f8a644.png)

<br>

ローカルPC内のフォルダに、キーペアのファイルがダウンロードされます。
このファイルは無くさないように注意してください。

![KeyPair-20240105-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622796/a2a5594a-9a2e-c9f7-cf8f-c2e9040b9044.png)

<br>

キーペアの作成は以上で終わりです。
どなたかのお役に立てれば幸いです。
wslでelixir その128

# 概要
wsl(wsl2じゃない)で、elixirやってみた。
githubに、livebook、アップしたので、notes.clubに、登録しようとメールしたら、上手く行かないと、返信が来た件。
二日掛かった。


# メール

```
I see your Livebook notebooks on github.com but I can't download them via the API.

Might you have some restrictions on the visibility of your user or repo settings?

```

# 調査１
githubのapiを叩いてコードを得ているようだ。
調べてみた。

```
url: "https://api.github.com/search/code?q=user:#{username}+extension:livemd&per_page=#{per_page}&page=#{page}&sort=indexed&order=#{order}"

```

# 調査２

livebookで、叩いてみた。

```
body: %{"incomplete_results" => false, "items" => [], "total_count" => 0},

```
全然取れない。

# 調査３

githubの設定廻りを調査。そんなプロパティ、無いよ。

# 調査4

https://github.com/search

以上を、発見。サーチエンジンは、同じものと祈る。

```
(press backspace or delete to remove)
This repository's code is being indexed right now. Try again in a few minutes.
repo:ohisama/ohi_Livebook path:*.livemd
```

5分待つと結果が出た。

apiを叩くと結果出た。

メールを送った。

# 成果物


https://notes.club/ohisama


以上。
金融サービスに選ばれるAIプラットフォーム

金融サービスの領域は、高度なデータ分析によって、より迅速かつ効果的に解決策を見出すことができるような複雑な課題に事欠きません。クレジットカードの不正検知やアンチマネーロンダリングプロセスからネクストベストオファーモデルに至るまで、あらゆる種類の銀行がデータプロジェクトにAIプラットフォームを活用するようになってきています。Dataikuでは、120を超える金融機関や大小のデータチームと協力し、業界をデータ主導の未来へと導くべくサポートしてきました。

適切なプラットフォームの選択に関しては、2つの本質的な特徴をバランスよく保持する必要があります。Dataikuのようなプラットフォームを利用することで、ユーザーがスプレッドシートの利用から脱却し、インテリジェントで強力な（多くの場合機械学習）モデルを構築し、データを可視化し、摩擦なく迅速に付加価値を生むような洞察の構築を可能にします。また、データエンジニアから事業部門のアナリストまで、企業全体の関係者が同じプロジェクトに共同で取り組むことができます。

![ai-platform-of-choice-financial-services.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/2ce1114c-fa9e-b7ac-4a78-dfdf158fdd81.png)



資産運用、FinTech、リテールバンキングのいずれにおいても、データ活用のためにできることはまだまだあります。Dataikuの力を活用し、AIや高度な分析プロジェクトを進めている金融機関の長いリストに加わるには、今しかありません！

## FSIのすべてのユースケースを一挙公開
金融サービスに関する頭痛の種をお持ちなら、Dataikuがその痛みを和らげるお手伝いをできるかもしれません。[こちらのリンク（英語）](https://pages.dataiku.com/fsi-use-case-collection)をクリックして、金融サービスにおけるAIと高度なアナリティクスのユースケース集をご覧ください。


*原文： [The AI Platform of Choice for Financial Services](https://blog.dataiku.com/ai-platform-of-choice-financial-services)*
ケモインフォマティクス（化学情報学）のオレオレ記事まとめ（2024年1月時点）

# 化学情報学にRDKitとScikit-learnで入門する
- 投稿日 2018年12月19日
- 12539 views
- https://qiita.com/maskot1977/items/2e98d76a0782a6e89bde

# Morgan Fingerprintを次元削減いい加減：それはもう頑張って試行錯誤「おーっと...えーん...こうだ！！」
- 投稿日 2019年12月19日
- 9044 views
- https://qiita.com/maskot1977/items/601698b48480a3fec66d

# RDKit 記述子が 400 に増えたさかい、他と比較してみてん。
- 投稿日 2021年12月02日
- 7312 views
- https://qiita.com/maskot1977/items/d66e7706165076b83976

# VAEとGANで分子生成入門
- 投稿日 2022年04月13日
- 6233 views
- https://qiita.com/maskot1977/items/77008b9737218fa1c21d

# LSTMで分子生成入門
- 投稿日 2022年04月14日
- 6692 views
- https://qiita.com/maskot1977/items/6e68b50287d80dbd4461

# PyG (PyTorch Geometric) で Graph Pooling Neural Network
- 投稿日 2022年08月10日
- 6649 views
- https://qiita.com/maskot1977/items/ede0e0c97ad0d0bce29d

# ChatGPT と Python で学ぶ ケモインフォマティクス入門1
- 投稿日 2023年10月02日
- 1270 views
- https://qiita.com/maskot1977/items/09333b2199017422dbfe

# ChatGPT と Python で学ぶ ケモインフォマティクス入門2
- 投稿日 2023年10月03日
- 1447 views
- https://qiita.com/maskot1977/items/3b750545db9f509badf4

# ChatGPT と Python で学ぶ ケモインフォマティクス入門3
- 投稿日 2023年10月04日
- 1248 views
- https://qiita.com/maskot1977/items/84f216bfe3cf2796da5f

# ChatGPTとPythonで学ぶ 低分子化合物SMILES生成AI：LSTMとTransformer編
- 投稿日 2023年12月01日
- 1122 views
- https://qiita.com/maskot1977/items/89c02a995303a911316a

# ChatGPTとPythonで学ぶ 低分子化合物SMILES生成AI：CVAE編
- 投稿日 2023年12月07日
- 769 views
- https://qiita.com/maskot1977/items/606ed54aa224d9e1bff6

# ChatGPTとPythonで学ぶ CVAEで分子生成AI :改良編
- 投稿日 2023年12月21日
- 511 views
- https://qiita.com/maskot1977/items/bab47452219166574421


# 参考記事

- [ChatGPTとPythonで学ぶ GAN（Generative Adversarial Networks）](https://qiita.com/maskot1977/items/3e038adedef72a0f4b90)
- [ChatGPTとPythonで学ぶ 変分オートエンコーダー (VAE)](https://qiita.com/maskot1977/items/b47576051c1362dc7ed1)
- [ChatGPTと作る 和歌生成AI : 1. LSTM 編](https://qiita.com/maskot1977/items/1c0e1656e49df7cffd40)
- [ChatGPTと作る 和歌生成AI : 2. LSTM 改良編](https://qiita.com/maskot1977/items/e1b2c8e065130e9d61c7)
- [ChatGPTと作る 和歌生成AI : 3. n-gram 失敗編](https://qiita.com/maskot1977/items/771c38853c434335e125)
- [ChatGPTと作る 和歌生成AI : 4. Transformer編](https://qiita.com/maskot1977/items/3c6eb8b02753d0f4efe1)
Oracle Analytics Cloud：負の値を赤で表示する

# はじめに
表やピボットで、負の数値が目立たず埋もれてしまうのを防ぐために、赤で表示したいことがあります。
条件付き書式を使う方法もありますが、より簡単な方法を紹介します。

# サンプルデータの入手
こちらのチュートリアルから、sample_order_lines2023.xlsxを入手しました。

https://docs.oracle.com/en/cloud/paas/analytics-cloud/tutorial-create-first-visualization/#before_you_begin

Oracle Analytics Cloud（**OAC**）にデータセットとしてアップロードしておきます。

# ワークブックの作成
作成したデータセットを使用してワークブックを作成します。
「Product Name」と「Profit」をCtrlキーを押しながら選択し、右クリックします。
「ビジュアライゼーションの選択」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/7e9f7ed1-6e0c-2def-447f-ecc7c45dea29.png)

「表」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/52189a1e-827c-95f1-5340-08fc769e731c.png)

所々、利益がマイナスになっている製品が見つかりました（多すぎる気もしますが・・・）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/6d0919c1-cfa4-9d10-1fcc-019b441311eb.png)

「表」ビジュアライゼーションの「プロパティ」を表示し、「値」タブに移動します。
「数値書式」が「自動」になっているので、クリックして「数値」に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/343252a5-3f62-8b7e-b0c3-a1344f89e94c.png)

「負の値」の「-123」をクリックして赤字をクリックして選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/fa594607-50c5-ca2f-e549-0ce7a3f54de7.png)

完成です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/8113d085-106c-f4b9-2aa8-b090d2d2fc7d.png)
【React Native】アニメーション付きTapBarを作成する。

## 初めに

今回は、React Nativeを使用して、アニメーション効果のあるタップバーを作成する方法について説明します。この例では、Animated コンポーネント、useState、useRef フックを使用して、アニメーション付きのメニューバーを作成します。このメニューバーは、タップすると拡大し、アイコンが回転する動きをします。

## 実装の概要

- useState フックを使用して、メニューの開閉状態を管理します。
- useRef と Animated.Value を使用してアニメーション状態を追跡します。
- Animated.timing を使用して、メニューの開閉アニメーションを制御します。

## コード例

```typescript
import React, { useState, useRef } from 'react';
import { View, TouchableOpacity, Animated, StyleSheet, Dimensions, Easing } from 'react-native';
import { FontAwesome5 } from '@expo/vector-icons';

const windowWidth = Dimensions.get('window').width;

const TapBar = () => {
  const [menuOpen, setMenuOpen] = useState(false);
  const animation = useRef(new Animated.Value(0)).current;

  const buttonSize = 60;

  const toggleMenu = () => {
    Animated.timing(animation, {
      toValue: menuOpen ? 0 : 1,
      duration: 400,
      easing: Easing.elastic(1),
      useNativeDriver: false,
    }).start();

    setMenuOpen(!menuOpen);
  };

  // 省略: スタイル定義とレンダリングコンポーネント
};

export default TapBar;

```

## スタイルの定義

styles オブジェクトを使用して、コンポーネントのスタイリングを行います。例えば、container スタイルでは、メニューバーの基本的なレイアウトを定義します。

```typescript
const styles = StyleSheet.create({
  container: {
    // スタイル定義
  },
  // その他のスタイル
});
```

## 完成したTapBar

![TapBar_animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630469/558fee79-06bd-d99f-d975-f93db34a0c9f.gif)

## まとめ

React Nativeでアニメーション付きのTapBarを簡単に作成してみました。時間があれば、もう少し改良していきま〜す！
九九の一覧表作成

九九の一覧表を作りました。

ルール
①各段の最後の回答以外、「 | 」で区切る
②回答はスペース埋めで2桁にする
③各段の区切りを「=」で各行の文字数に合わせる

実装したコードです。

```python3
#####################################
###     九九の一覧表作成
#####################################

#各段の変数定義
startn = 1
endn = 10
#桁数変数の定義
keta = 2
# スペース関数
def space1():
  print()

# 罫線関数
def div1():
  print("=" * (keta*(endn - startn) + 3 * (endn - startn -1)))

for i in range(startn,endn):
  for j in range(startn,endn):
    ans = i * j
    if j == 9:
      print(f"{ans:>{keta}}",end="")
    else:
      print(f"{ans:>{keta}}",end=" | ")

  if i < 9:
    space1()
    div1()

```
[Python][Julia]Project euler10 (プロジェクトオイラー10)

#### Project euler Ploblem 10 (プロジェクトオイラー10)
[Summation of Primes](https://projecteuler.net/problem=10)

備忘のために残しておく。

## 問題
#### 問題文 (意訳)
10より下の素数の和は　2 + 3 + 5 + 7 = 17。
2,000,000より下の全ての素数の和を求めよ。

#### 原文
The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
Find the sum of all the primes below two million.



## 解答
#### 答え
<b>142913828922</b>

#### 解答の方針
エラトステネスのふるいを使って素数のリストを作成し、合計する。
[[Python][Julia]Project euler7 (プロジェクトオイラー7)](https://qiita.com/fujihop/items/776d1135d52944529941)
のコードを参考に改変した。

#### Pythonのコード
```Python: Pyhton ploblem10
def prime_sum(n: int) -> int:
    """エラトステネスのふるいを使い、素数をリストアップして足す"""
    isprime = [True] * (n + 1)
    isprime[0], isprime[1] = False, False
    # ふるい
    for p in range(2, n + 1):
        # 素数以外(False)を飛ばす
        if isprime[p]:
            # p 以外の p の倍数をふるいにかける(TrueをFalseに)
            q = p + p
            while q <= n:
                isprime[q] = False
                q += p
    l = [x for x in range(n+1) if isprime[x]]
    return sum(l)

prime_sum(2000000)

```

#### Juliaのコード
```Julia: Julia Ploblem10
function prime_sum(n::Int64)::Int64
    isprime = trues(n)
    isprime[1] = false
    for p in 2:n
        if isprime[p]
            q = p + p
            while q <= n
                isprime[q] = false
                q += p
            end
        end
    end
    l = [x for x in 1:n if isprime[x]]
    return sum(l)
end

println(prime_sum(2000000))

```
Wernerモデルを使った風紋の生成

# はじめに
Wernerモデルを使った風紋生成のシミュレーションコードを公開しました。この記事では簡単に使い方と動作原理の解説をします。

Wernerモデルとは、Brad Werner (1995) が提案した風紋や砂丘をシミュレーションする方法です。鳥取砂丘で見た風紋がきれいだったので実装してみました。

https://github.com/hsmtta/sand_patterns

# 使い方
`--help` オプションを参照してください。

```bash
$ python simulate.py -h
usage: simulate.py [-h] [-w V] [-g N] [-i N]
options:
  -h, --help            show this help message and exit
  -w V, --wind_speed V  wind speed (default: 3.0)
  -g N, --grid_size N   grid size (default: 100)
  -i N, --num_iter N    number of iterations (default: 500)
```

# 使用例
デフォルトで実行すると、風速3.0で計算し、結果を動画ファイルに保存します。風はx方向（左から右）に吹いています。
```
python simulate.py
```

計算結果は以下の通りです。風紋のパターンを良く再現しているように見えます。画像をクリックするとYouTubeに飛びます。

[![Sand pattern (wind speed = 3.0) - YouTube](http://img.youtube.com/vi/aLJXOW_nKhM/0.jpg)](http://www.youtube.com/watch?v=aLJXOW_nKhM "Sand pattern (wind speed = 3.0) - YouTube")

デフォルト実行をベースラインとして、風速パラメータを振って模様の変化を見てみます。風が弱い場合にどうなるでしょうか。
```bash
python simulate.py -w 1.0
```

ベースラインと比較して、波長の短い模様が生成されました。振幅は小さくなるようです。また、模様が生成されるまでの時間も短くなっています。

[![Sand pattern (wind speed = 1.0) - YouTube](http://img.youtube.com/vi/9AY35oIRIVg/0.jpg)](http://www.youtube.com/watch?v=9AY35oIRIVg "Sand pattern (wind speed = 1.0) - YouTube")

次に、風が強い場合も実験してみます。
```bash
python simulate.py -w 6.0
```
波長は長く、振幅は大きく、模様が生成されるまでの時間は長くなりました。

[![Sand pattern (wind speed = 6.0) - YouTube](http://img.youtube.com/vi/yZzYhA_n2YM/0.jpg)](http://www.youtube.com/watch?v=yZzYhA_n2YM "Sand pattern (wind speed = 6.0) - YouTube")

# 動作概要
周期境界条件を設定したグリッドに対して差分法を適用します。次の時間ステップのグリッドを求めるために、2種類のルールを適用します。 

```python
for _ in range(num_iter):
    grid = apply_jumping_rule(grid, wind_speed)
    grid = apply_rolling_rule(grid)
```

`apply_jumping_rule()` 関数は、風によって砂が飛ばされる過程を模擬します。以下の現象を考慮しています。

* 高い場所から飛ばされた砂は遠くまで飛ぶ
* 風が強いと遠くまで飛ぶ

`apply_rolling_rule()` 関数は、砂が崩れる過程を模擬しており、拡散方程式の拡散項に相当する処理です。高さを均一にする効果があります。

詳細はコードを参照してください。

# おわりに
Wernerモデルを使った風紋生成のシミュレーションコードの使い方と動作原理の解説をしました。鳥取砂丘で見られる風紋とよく似た模様が生成できました。

2024/1/22 追記：続きの記事 [Wernerモデルを使った砂丘の生成](https://qiita.com/hsmtta/items/8b67e7e72cd90ddde7ff) を書きました。

# 参考資料
1. [鳥取砂丘｜観光スポット｜鳥取市観光サイト【公式】 - 鳥取市のおすすめ観光・旅行情報](https://www.torican.jp/spot/detail_1064.html)
1. [hsmtta/sand_patterns - GitHub](https://github.com/hsmtta/sand_patterns)
Microsoft 認定資格を更新するまで (2024.01)


"Fundamentals" ではない Microsoft の認定資格 (Associate、Expert、または Specialty) は、2024 年 1 月現在のところでも有効期間が 1 年間となっています。つい最近受かった気でいた「AZ-104」に更新時期を告げるメールが来たので、更新してみました。

## 感想

意外とハードル低い感想です。

喜び冷めやらぬ 1 年も経たないうちに更新を急かされるのはちょっとせわしない気もしますが、「無料」「無監督」で「いつでも」受験できる点では、考えようによってはお得です。まとまった時間や場所を取るのが困難でも、試験中、自分の慣れた環境で調べ放題の状況で受験して良いとあれば、単に事前準備をちゃんとするだけ、ということになります。

[AZ-104 合格まで (2023.06) #AZ-104 - Qiita](https://qiita.com/e99h2121/items/de97a5e78b083739b5a1) <-- 今回更新したのはこちら。
[AZ-305 合格まで (2023.12) #AZ-305 - Qiita](https://qiita.com/e99h2121/items/18ed097e6ecb66aafb3f)

## 参考

https://learn.microsoft.com/ja-jp/credentials/certifications/renew-your-microsoft-certification

> 更新は無料です
> 認定資格を更新するのにコストはかかりません。認定資格の有効期限が切れる前に、オンライン評価に合格してください。 基礎認定資格に有効期限はありません。

> 6 か月の更新期間
> 更新評価は、6 か月の更新可能期間内であればいつでも Microsoft Learn を通して受けることができます。 合格すると、有効期限日から 1 年、認定資格が延長されます。

> 評価は短く、無監督です
> 評価は最近の技術的更新と業界の更新に焦点を当てているため、元の試験よりも短く、教材の持ち込みが可能です。 認定資格の有効期限が切れる前に合格するのであれば、必要なだけ何回でも評価を受けることができます。


[AZ-104の有効期限について - トレーニング、認定、プログラム サポート](https://trainingsupport.microsoft.com/ja-jp/mcp/forum/all/az/a1b3a18f-540e-4314-a88c-355fef70ce89)

https://qiita.com/ussvgr/items/334de402fcbff4d28526

> 無事合格すると、資格の有効期限が1年延長されます。
この1年延長は、延長試験を受けた日からではなく、元の有効期限の終了日から1年延長となります。
ですので、早く受けたからといって期限的に損することはありません。お知らせメールが届いたら、計画的に延長試験を受けましょう。

上のようなところも嬉しいポイント。ほか参考。

https://qiita.com/hiro10149084/items/762215c0d7b994b5ba02

https://zenn.dev/tomot/articles/083323ada990b1

https://zenn.dev/tomot/articles/dc39b2a4def219

[再認定に関する情報とポリシー | AWS 認定 | AWS](https://aws.amazon.com/jp/certification/policies/recertification/) AWS は有効期限 3 年だけど、再受験しないといけない。頭の片隅に温存中。 


## 合格

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/e0d38056-31b0-d276-4b73-5f0e31fc0cae.png)


## その他

Azure 資格は以下記事がわかりやすい。

https://zenn.dev/tomot/articles/4337b3c860e63f

以上です～
CSS だけで、かつ不要な div を使わずに、擬似 Progressive blur

## この記事の概要

あるときこちらの記事を見ました。

https://note.com/usagimaruma/n/nef24b2ec0090

CSS でのストレートな実装はできないようで、なかなかパワー系の実装が紹介されていました。

https://codepen.io/tehoko/pen/bGormeX

この表現のためだけに 350 もの div を作成するのはなあ……と思い、もう少し現実的なやり方を考えてみました。

この記事ではコードの一部を載せていますが、全体はこちらのリポジトリに置いてあります。

https://github.com/xrxoxcxox/qiita-progressive-blur

## Progressive blur の実現の方向性

usagimaru さんの記事にある通りですが、現状実現されている方向性は以下のどちらかです。

1. フィルターを小刻みに並べる
1. アルファマスクによる擬似 Progressive blur

1 の `フィルターを小刻みに並べる` は冒頭の codepen のようなやり方です。
2 の `アルファマスクによる擬似 Progressive blur` は、大きめのボケがかかった要素にマスクをかけるようなやりかたです。

この 2 つを組み合わせて、擬似的な再現の中では `っぽい` 見た目にしてみました。

## 完成形

グリッド状に画像を並べ、下部に Progressive blur をかけた要素を作りました。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/166bbf06-ba1b-dab2-42f4-a338e708f370.png)

HTML は次のようになっています。
装飾のためだけの `div` などはありません。

```html:HTML
<body>
  <div>
    <img src="path/to/image" alt="" width="800" height="450">
    <img src="path/to/image" alt="" width="800" height="450">
    <img src="path/to/image" alt="" width="800" height="450">
    <!-- 以下画像が続く -->
  </div>
  <footer>Progressive blur</footer>
</body>
```

CSS は次のようになっています。[^1]

[^1]: 今回の説明に必要なものだけを抜き出しています。

```css:CSS
footer {
  position: fixed;
  bottom: 0;
}

footer::before {
  position: absolute;
  z-index: -1;
  inset: 0;
  content: "";
  backdrop-filter: blur(1rem);
  mask-image: linear-gradient(
    to bottom,
    rgb(0 0 0 / 0%) 0%,
    rgb(0 0 0 / 4.9%) 7.75%,
    rgb(0 0 0 / 10.4%) 11.25%,
    rgb(0 0 0 / 45%) 23.55%,
    rgb(0 0 0 / 55%) 26.45%,
    rgb(0 0 0 / 89.6%) 38.75%,
    rgb(0 0 0 / 95.1%) 42.25%,
    rgb(0 0 0 / 100%) 50%
  );
}

footer::after {
  position: absolute;
  z-index: -1;
  inset: 0;
  top: 25%;
  content: "";
  backdrop-filter: blur(2rem);
  mask-image: linear-gradient(
    to bottom,
    rgb(0 0 0 / 0%) 0%,
    rgb(0 0 0 / 4.9%) 15.5%,
    rgb(0 0 0 / 10.4%) 22.5%,
    rgb(0 0 0 / 45%) 47.1%,
    rgb(0 0 0 / 55%) 52.9%,
    rgb(0 0 0 / 89.6%) 77.5%,
    rgb(0 0 0 / 95.1%) 91.9%,
    rgb(0 0 0 / 100%) 100%
  );
}
```

## 解説

不要な要素は使いたくありませんでしたが、さすがに単なる `backdrop-filter` などではどうしようもなく、擬似要素を使いました。

`z-index` には `-1` を指定して、もともとの `footer` よりも後ろに表示されるようにしています。

また、それぞれに `backdrop-filter` と `mask-image` をかけています。
ボケ感の違う 2 つのフィルターを、上から下に不透明度が上がるようにマスクをかけて重ねている、という状態です。

|  | マスク | ボケ量 |
| --- | --- | --- |
| before | ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/a0db1c21-67e2-0a6a-f0a8-0aa91aa111b3.png) | ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/601374fb-b720-f6f4-7d62-9059e570f167.png) |
| after | ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/32c897da-ab30-be09-00a7-e916fb875b7e.png) | ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/b9de39ed-00be-631f-7f51-b8ca31759a6d.png) |

`mask-image` がやたら細かいのは、単に 0 -> 1 で指定すると変化が急に見えるからです。
現状の CSS では変化を滑らかにすることはできないので、手動で間を補完しています。

参考: https://css-tricks.com/easing-linear-gradients/

## 最後に

よく見れば変化している箇所が分かってしまいますし、マスクをかけている関係で若干汚いボケ方になっています。

しかし、コードの管理のしやすさやパフォーマンス的なことを考えるとまあまあ良い塩梅で実現できたのではないかと思います。
Woo Subscriptions で特定の定期購入に関連する注文を抜き出す方法

Woo Subscriptions である定期購入に関連する注文を抜き出す関数に関して使い方を備忘録として書きます。

## 使う関数は get_related_orders

まずは、使う関数の例です。


```php: functions.php
$subscription = wcs_get_subscription( $subscription_id );
$orders = $subscription->get_related_orders( 'all', 'any' );
```

これで、関連するすべての注文が詳細も含めて抜き出せます。get_related_orders に指定できる項目が2つあるので、その説明をします。

まずは一つ目の項目は抽出形式です。

* all: WC_Order のオブジェクトとして
* ids: order_id のみ

次に二つ目の項目は抽出内容です。

* any: すべての注文
* parent: 親の注文
* renewal: 再開した注文
* resubscribe: 再購入した注文
* switch: アップグレードかダウングレードの切り替えをした注文

となります。

これ、地味に使えます。
2024/1/9主にITとかセキュリティの記事

2024年はAIの進化に伴うオンライン詐欺に注意すべき理由(1/7)
https://gunosy.com/articles/ayXKf

「価値観」は人の判断必須、政府がまとめたＡＩ指針の中身(1/7)
https://newswitch.jp/p/39946

メタバースビジネスの問題点：具体的な事例と成功への道筋(1/7)
https://xrcloud.jp/blog/articles/business/16018/

音声アプリが抱えるセキュリティリスク、予防策とは(1/7)
https://news.mynavi.jp/techplus/article/20240107-2857712/

プログラミング１年目の2023年に勉強した技術・書籍の振り返り(1/6)
https://qiita.com/MasamichiKanakubo/items/f3a8a9c4ebaa0928d7ff
Laravel Sail  - vscode devcontainer で xdebugを使う

## やりたかったこと

vscodeのdevcontainerでxdebugを使いたい(chrome)

## 備考

#### 読み手の対象:
すでにdevcontainerで開発している方
vscodeでxdebugを触ったことがある方

#### 環境:

```
PHP 8.2.10 (cli) (built: Sep  2 2023 06:59:22) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.10, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.10, Copyright (c), by Zend Technologies
    with Xdebug v3.2.1, Copyright (c) 2002-2023, by Derick Rethans
```
Laravel Framework 10.23.1
Google Chrome　バージョン: 120.0.6099.129（Official Build） （x86_64）
Dev Containers　v0.327.0


## やったこと

### chromeに拡張機能を追加

- 参考
    - https://xdebug.org/docs/step_debug#browser-extensions

### `.env`の修正

開発環境の`.env`に下記を追記

```php:.env
SAIL_XDEBUG_MODE=develop,debug,coverage
```

### コンテナ再起動

### `launch.json`の生成

- 参考
    - [Laravel SailでXdebugを有効にする](https://zenn.dev/na9/articles/852ba511622e66#%E5%85%AC%E5%BC%8F%E3%82%92%E8%A3%9C%E8%B6%B3%E3%81%97%E3%81%A4%E3%81%A4%E6%9C%80%E5%88%9D%E3%81%8B%E3%82%89%E4%B8%81%E5%AF%A7%E3%81%AB%E8%A8%AD%E5%AE%9A%E6%89%8B%E9%A0%86)
    - おそらく、基本的な構成であれば`launch.json`生成してそのまま使える


```json:.vscode/launch.json
    "configurations": [
        {
            "name": "Listen for Xdebug",
            "type": "php",
            "request": "launch",
            "port": 9003,
        },
```

### vscode上でxdebugの起動

### デバッグ

1. ブレークポイントを設定
2. chromeの拡張機能を有効にする
3. 対象画面を開く
4. ブレークポイントで止まる

## まとめ

ポイントはchromeの拡張機能です。

## 参考ページ

- https://zenn.dev/na9/articles/852ba511622e66
- https://readouble.com/laravel/9.x/ja/sail.html#debugging-with-xdebug
- https://xdebug.org/docs/step_debug#browser-extensions
GoogleCloud + TagManagerでWebビーコン作ってみる

# GoogleCloud + TagManagerでWebビーコン作ってみる
広告の追跡などで利用されるWebビーコンについて改めて認識が曖昧だったので改めて調べてそれっぽい実装をしてみた

調べる前の認識としては
- HTTPにはリクエストとレスポンスがある
- HTMLに画像を埋め込むと埋め込んだURLへ画像を取りに行く（例: `example.com/hoge`）
- 画像を取りに行くということは`example.com`のサーバーへリクエストを送っている
- リクエストを送信する際に一意なIDをパラメーターとして付与などを行う
- リクエストを受け取って画像を返すサーバー側で一意なIDなどを受け取る

みたいな認識でした

「一意なIDをパラメーターとして付与」この部分はそれぞれのビーコンごとのシステムによって異なると思いますが基本的には↑の認識で良さそうです

実際には画像といっても描画剃る必要はないため1x1のgif,jpegなどを返すことがほとんどです

また利用用途としては広告追跡以外にも電子メールが開かれたかどうかを確認する目的でも利用されているようです


## GoogleCloudで画像を返す処理を作成
利用するのはこの2つです
CloudFunctions: ビーコン本体として機能させる
ApiGateway: 画像のエンドポイントとして利用する



CloudFunctionsは余計なことはせずに画像を返すだけにしておきます

```javascript
const functions = require('@google-cloud/functions-framework');

functions.http('helloHttp', (req, res) => {

  // ~~ ここで必要に応じてデータを取得する ~~

  const imageBuffer = Buffer.from('R0lGODlhAQABAIAAAP///////ywAAAAAAQABAAACAkQBADs=', 'base64');
  res.set('Content-Type', 'image/gif');
  res.send(imageBuffer);
});
```

ApiGatewayは↑で作成したCloudFunctionsのURLを入力しておきます

```yaml
swagger: '2.0'
info:
  title: webbecom
  description: Sample API on API Gateway with a Google Cloud Functions backend
  version: 1.0.0
schemes:
  - https
produces:
  - application/json
paths:
  /hello:
    get:
      summary: summary
      operationId: hello
      x-google-backend:
        address: `ここにCloudFunctionsのURLを入力する`
      responses:
        '200':
          description: A successful response
          schema:
            type: string
```


基本的にこちら↓にしたがって作成するとよいでしょう

https://cloud.google.com/api-gateway/docs/secure-traffic-gcloud?hl=ja

もし**Apiの構成を変更したい場合**は
一度作成したAPIの構成は変更できないので↓のように新しい設定を作成して置き換える手段をとりましょう
1. 新しいAPIの構成を作成
2. ApiGatewayが参照している構成を古いものから新しいものへ切り替え
3. 古いAPIの構成を作成

## GoogleTagManagerで画像を取得するタグの挿入
TagManager経由でタグを挿入していますが、ソースコードに直接埋め込んでも問題ありません

GoogleTagManager自体は[こちら](https://support.google.com/tagmanager/answer/6103696?hl=ja)などを参照してすでに導入が済んでいる状態で進めます

やることはシンプルで
カスタムHTML → imgタグの作成 → 公開 の順で進めます
実際のでき上がりはこのような感じです

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199819/d381faa7-2bee-af2f-ca39-3b8729d198cb.png width=500 />


これらを合わせて見てみると
ブラウザでは問題なくimgタグが挿入されていることをが確認でき
CloudFunctions側でも呼び出されていることが確認できました

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199819/a46ef4eb-a414-ec45-97e7-ca95898515b5.png width=500 />
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199819/c35467b4-696c-c479-595c-ea91093b2fd2.png width=500 />

## まとめ
Webビーコンの技術自体は面白くいろんな活用方法が多くある一方で、利用者の情報を取得できるのでその後の扱い方については一定の注意を払って利用していくのがよさそうですね

またこのことを考えると「スパムメールは開かずに削除」と学生の頃に習いましたが開くことによってスパムメールを送信する側に有効なメールアドレスであることを通知してしまうので具体的な理由を知ることで納得して予防できるのはよかったです


> スパムビーコンへの対策として、イメージブロックがある。これは、電子メールクライアントやWebメールにおいて、メールに添付された画像を自動的に表示させないなどの制限を掛ける対策機能である。
> wikipediaより

とはいえ今はメールクライアント側などでそのような対策があったりなかったりするようです :eyes:


## 参照

https://cloud.google.com/api-gateway/docs/secure-traffic-gcloud?hl=ja

https://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A7%E3%83%96%E3%83%93%E3%83%BC%E3%82%B3%E3%83%B3