OmniAICreator/Qiita-1.07M huggingface dataset:
AWS Clean Rooms ML のPreviewバージョンを早速レビュー

## 概要

https://aws.amazon.com/jp/about-aws/whats-new/2023/11/aws-clean-rooms-ml-preview/?nc1=h_ls


タイトルのままですが、とりあえず軽く触ってどんなものなのか少しだけ勉強したのでまとめておきます。

余裕のある人は、

https://aws.amazon.com/clean-rooms/faqs/

こちらをじっくりと読んでみてください。
おすすめなのは、この記事をまず読んでから、上をしっかりと読むことです💪


## 機能

主に２つあります。

- DB (SQL）をコラボレーターの間で使える（詳細は下）
- ML（どんなモデルが使えるかまだ未確認）を、コラボレーターの間で使える（詳細は下）

## コラボレーターの設定とデータのアップロード

コラボレーターは、AWSアカウントのIDを打ち込み、名前を設定するだけで簡単に行えました。

![Screenshot 2023-11-30 at 19.59.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/682ca859-1e36-b0cc-fbf1-38b2ad8078eb.png)



ここでは、コラボレーターを１人追加しています。


## DB(SQL)について
コラボレーターの間で、

- どのようなデータ構造か（カラムとか、ジョインカラムとか設定）
- 誰がクエリを打てるか
- どんなクエリを打てるか
- 結果は誰が見えるか
- クエリにかかったお金は誰が払うか
- データの暗号化を詳細設定（暗号化を高度にすると、使用できるクエリに制限がかかる）

![Screenshot 2023-11-30 at 19.59.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/58e86241-a3ee-b080-a44d-305816e7a5e9.png)


などが設定できます。


## データの暗号化について

今までで触ったことはないのですが、C3Rと呼ばれるクライアント側のツールをダウンロードして、
CLIで自分用の鍵を生成し、データを暗号化してアップロードできるようです。
今度試そうと思います。

その際に、いくつかデータベースに格納するデータについて暗号の設定ができます。

- 全てのカラムに対して暗号化を強制するか（暗号化したカラムについては、原則Whereは使えない）
- 決定的暗号を使うか（使うと、頻度攻撃などが可能になりますが、NoにするとそのカラムはJoinカラムには使えなくなります。）


![Screenshot 2023-11-30 at 19.44.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/273e2f0e-beb6-0f17-fcac-9ec51ed7ca03.png)


## ダッシュボード


## SQL

さて、コラボレーションを作成するとダッシュボードに遷移します。
テーブルデータの管理は以下のようなダッシュボードで行います。

だれがどのデータに対してどんなクエリを打てるか、そして結果は誰が見えるか、
それに対して誰がお金を払うか
などを設定し、コラボレーションをスタートします。

#### セキュアなクエリや、クエリの実行、閲覧などの細かな設定が可能

また、クエリについては差分プライバシーを使い、個人を特定することがないように細かな設定ができるようです。
また、SUMやAVGをクエリできるカラムについて制限したり、その統計を計算する際に最小の数のマッチなどを設定できます。
こうすることで、非常に小さな数のレコードに対して統計値が計算されることを防ぐことができます。


#### AWS Glueでのデータのカタログ化が必須

https://aws.amazon.com/jp/glue/

AWS Glueというサービスをまだ私は使ったことがないのですが、
自分のアップロードしたデータに対してカタログIDを付与し、コラボレート可能にするようです。

![Screenshot 2023-11-30 at 19.45.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/ebe615cc-fdb7-ea8a-3d2a-3a76d90c0cbd.png)


## ML

MLについては仕様が面白いです。

#### 擬似データの自動作成
まずユーザは自身のデータをアップロードすると、
クリーンルーム内で自分のデータに似た擬似データのようなものが生成されるようです。

#### モデルの自動学習
また、自身のデータに対していろんなAIモデルを生成することができます。

#### 擬似データによる類似データの検索
擬似データは自動生成され、クリーンルームの中で似たようなデータを持っているコラボレーターとマッチングされます。（類似性の高いデータが検索される）
また、この検索については、暗号化されたデータ同士の類似度を計算する、PSI（Private set intersection) をサポートしているようです。


#### コラボレーター同士のモデルの共有、活用
データにはモデルが紐ついており、類似性の高いデータが持つモデルについて、
ユーザはコラボレータのモデルをベースに推論ができます。
ユーザは類似度の高いデータから生成されたモデルに対して、それらを活用できます。
モデルは常にアップデートされ、自分に有用なモデルが取り揃えられたモデルマートのような感じでしょうか、
コラボレーターはそれらのモデルを、自分や相手のデータを見せ合うことなく利用することができるようです。

![Screenshot 2023-11-30 at 19.45.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/ab332315-77ed-b836-f45c-3fa09bc0c339.png)





##  まとめ

今回はPreviewとなったAWS Clean Rooms ML　を少しだけ記事にしてみました。
解説というほどのことはできなかったので、またAWS Glueを使い実際にデータをアップロードし、
モデルの作成などにチャレンジしてみようかなと思います。

皆さんも時間があったら触ってみてください。

今回はこの辺で。



@kenmaro
Cognito による認証で使用されているトークンの話

# 前書き
研修の中で Cognito について調べました。その内容をアウトプットしたいと思います。

# 本文
## Cognito とは
Amazon Cognitoは、アプリケーションやウェブサイトにおけるユーザー認証をサポートするためのAWSのサービスの1つです。ユーザごとの ID 管理や AWS リソースへのアクセスコントロールができます。

Cognito を構成する要素は大きく2つに分けることができます。

- Cognito ユーザプール
    ユーザの作成・管理・認証を行うユーザディレクトリ。認証された JWT （ JSON Web Token ）をアプリケーション・ Web サーバ・ API に直接発行します。

- Cognito ID プール
    AWS リソースへのアクセスを許可します。アプリケーション用の AWS 認証情報である STS トークンを発行します。

ユーザプールが**認証**、ID プールが**認可**の役割を担っています。
今回はユーザプール認証で使用するトークンについてまとめます。

## 認証で使用されているトークン
トークンは認証されたユーザに関するクレーム（情報）を持っているものです。
BASE64 という変換方法でエンコードされた文字列としてトークンを発行します。

:::note info
BASE64 について
BASE64 とは 64 進数を意味する言葉で、変換方法の一種です。バイナリ全体を bit の配列として捉え、 6 bit ずつ区切り文字列に置き換える処理をします。文字テーブルは 64 文字種 ＋ パディング用の ”＝” の 65 文字種です。
受信側と送信側が BASE64 を用いた変換をすることで、メールを通して画像や音声などの送受信が可能になりました。
現在では、JSON などで特殊文字を含まないように画像データを base64 でエンコードしたり、Web ページの表示の際にリクエスト数を減らすために base64 でエンコードした画像を html にそのまま埋め込むなどの用途で用いられています。

また URL に使用できる BASE64 エンコードである BASE64 URL エンコードもあります。
BASE64 エンコード 後、「 + 」 を「 - 」に「 / 」 を「 _ 」に置換します。また、「 = 」によるパディングは行いません。
URL として使う URI の仕様で予約されている特別な文字で「 + 」や「 / 」などが使用されており、別の意味を持ってしまうため置換を行っています。そのためURL セーフ（ URL にとって安全である）な変換方法になります。
:::

Amazon Cognito のユーザプールでは、ユーザーがアプリケーションにサインインする際に生成されるさまざまなタイプのトークンがあります。その中で最も重要なトークンは、アクセストークン、ID トークン、そしてリフレッシュトークンの3つです。

**ID トークン（ID Token）**
ユーザーを識別し、認証されたユーザーの属性情報を提供するトークンです。このトークンには、ユーザーの一意の識別子や属性（例: ユーザーのメールアドレスやグループへの所属情報など）が含まれています。アプリケーションは ID トークンを使用して、ユーザーの個別のサービスを提供するための情報を取得します。

**アクセストークン（Access Token）**
ユーザーがアプリケーションやAPIに対して認可されたリソースにアクセスする際に使用されます。アクセストークンは、 AWS のサービスやアプリケーションのバックエンドでの認証や権限の付与に利用され、特定の操作やリソースへのアクセスを制御します。

**リフレッシュトークン（Refresh Token）**
ID トークン・アクセストークンの有効期限が切れた場合、ユーザーは新しい ID トークン・アクセストークンを取得するためにリフレッシュトークンを使用します。リフレッシュトークンを利用することで、ユーザーはサインインセッションを継続し、再認証を行わずに新しいID トークン・アクセストークンを取得することができます。

このように、Amazon Cognitoのユーザプールで使用される3つのトークンは、認証やアクセス制御において重要な役割を果たしています。

:::note info
JWT について
JWT は JSON データを URL セーフでコンパクトな形式にしたものです。スペースに制約がある環境（ HTTP ヘッダやクエリパラメータ）で使用することを想定しています。BASE64 URL エンコードで変換されており、よく使われるデータ項目の名称を省略形にすることで送信するデータ量を軽減しています。
:::

# まとめ
Cognito による認証で使用されているトークンについてまとめました。
Amazon Cognito のユーザプールでは、これらのトークンがユーザー認証と権限管理において重要な役割を果たしています。これらのトークンを正しく管理することで、セキュリティを強化し、アプリケーションの安全性を確保することができます。
rubyで大量データをキャッシュした話

# はじめに
実装中、ループのたびに同じデータをデータベースから取得している処理がありました。このデータ取得の処理をキャッシュ化したかった。

# クラス変数によるキャッシュ化
まず、クラス変数を使用してキャッシュを実装しました。クラス変数はクラスとそのサブクラスのすべてのインスタンス間で共有されるため、アプリケーション全体で一貫したデータを保持するのに適しています。
以下のような形
```ruby
class DataCache
  @@cache = {}

  def self.store(key, value)
    @@cache[key] = value
  end

  def self.retrieve(key)
    @@cache[key]
  end
end
```
ただし、この実装ではサブクラスへの影響も考慮する必要があります。
DataCacheクラスのみで使用できるようにしたい。

# クラスインスタンス変数によるキャッシュ化
次に、クラスインスタンス変数を使用したキャッシュ化を試みました。クラスインスタンス変数はクラス自体に固有で、クラスのすべてのインスタンスで共有されますが、サブクラスで共有されることはありません。
```ruby
class DataCache
  @cache = {}

  def self.store(key, value)
    @cache[key] = value
  end

  def self.retrieve(key)
    @cache[key]
  end
end
```

この方法では、クラスインスタンス変数がクラスの各インスタンスで共有されないため、複数のインスタンスが作成されると再びデータベースからデータを取得することになります。

# 最終的な実装

最終的には、クラスインスタンス変数をクラスのシングルトンメソッド（クラスメソッド）としてアクセス可能にする方法を採用しました。これにより、クラスレベルでキャッシュが保持され、DataCacheクラスのすべてのインスタンスで共有されます。

```ruby
class DataCache
  @cache = {}

  class << self
    attr_accessor :cache
  end

  def self.store(key, value)
    @cache[key] = value
  end

  def self.retrieve(key)
    @cache[key]
  end
end
```

# まとめ
この実装により、DataCacheクラスのインスタンス間で共有されるキャッシュが作成され、パフォーマンスが大幅に向上しました。また、クラスインスタンス変数はサブクラスに影響を与えないため、DataCacheクラス限定での使用が可能です。

# 参考文献
- https://magazine.rubyist.net/articles/0046/0046-SingletonClassForBeginners.html
- https://docs.ruby-lang.org/ja/latest/doc/spec=2fdef.html
【3日目】OSS連携してみたい！ROS2(C++)でHelloWorld

この記事は筆者オンリーの[Advent Calendar 2023](https://qiita.com/advent-calendar/2023/aichallenge_racing_for_mas)3日目の記事です。  

OSS連携を試みるため、ROS2の簡単なモジュールを数回に渡って作っていきたいと思います。
実は簡単なモジュール作成は前回大会でもやっているため、本大会でもできるかの確認です。

# ROS2でモジュール作成
[こちらの記事](https://qiita.com/h_bog/items/368543a4b10b356db0e5)を参考にまずはAutowareでHelloWorld的なことができるようにカスタマイズしてみようと思います。

# Autowareのカスタマイズ
## パッケージの作成
Autowareをカスタマイズする方法ですが、[公式ページ](https://github.com/AutomotiveAIChallenge/aichallenge2023-racing/blob/main/documentation/docfx_project/customize/index.md)にちょっとだけ記載されております。

まずはROSチュートリアルの[Writing a simple publisher and subscriber](https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Cpp-Publisher-And-Subscriber.html)を見ながら、簡単なパブリッシャーとサブスクライバーを作ります。

[公式サイト](https://github.com/AutomotiveAIChallenge/aichallenge2023-racing/blob/main/documentation/docfx_project/customize/index.md#how-to-customize-and-use-autoware-packages)の通り、ROS2のパッケージを作成します。

```
$ cd ~/aichallenge2023-racing/docker/aichallenge/aichallenge_ws/src/aichallenge_submit/
$ ros2 pkg create --build-type ament_cmake cpp_pubsub
```

[ROSチュートリアル](https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Writing-A-Simple-Cpp-Publisher-And-Subscriber.html)に従って、package.xmlとCMakeLists.txtを変更します。

## パッケージのビルド
次に、Dockerを起動してコードをビルドします。
```
$ cd /aichallenge/
$ bash clean_build.sh 
```
以下のようにcpp_pubsubのビルドができれば成功です。
![Screenshot from 2023-11-30 21-05-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3154772/a0daaeec-e0d2-ab75-80a9-cfd439e8de98.png)
## パッケージの実行
参考記事同様、launchファイルから実行します。本大会ではAutoware-Microを使用しており、autoware_micro_awsim.launch.xmlを変更します。

```autoware_micro_awsim.launch.xml
<!-- lane_driving -->
〜割愛〜
<group>
  <node pkg="cpp_pubsub" exec="talker"/>
  <node pkg="cpp_pubsub" exec="listener"/>
</group> <!-- Simple Pub Sub -->
</group> <!-- lane_driving -->
```
実行してみます。
```
$ bash run_autoware.sh
```
実行されているのが確認できました。

![Screenshot from 2023-11-30 21-24-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3154772/fbff6838-b0d6-bff6-01c3-7b17cfd25a0d.png)

#今後の予定
1.Autowareのメッセージをサブスクライブできるようにする。
2.Autowareのメッセージをパブリッシュし、既存のAutowareがサブスクライブするようにする。
3.OSS連携もできるように変更する。
という流れで行きたいと思います。
StepFunctionsとGlueでAWSをパソコン化する

StepFunctionsとGlue（python shell）とで、AWSをパソコン化します。
パソコン化とは、VisualStudioでデバッグするかのような扱いやすさ、という意味です。

Glue python shellは中身的にはlinuxが起動して、pythonが起動するだけ、といえます。かといって、pythonで何かAWSリソースを扱おうとすると、起動したものの終了を待つ処理が必要になってしまいます。
そ・こ・で・！StepFunctionsの【実行完了を待つ】というシンプルな機能をオンにする（チェックボックスを入れるだけ）で、これができます。

大まかには、Glueで単機能のものを作っておき、それをStepFunctionsからGlueをパラメータ渡しで利用します。

実行すると、ステート遷移・進行状況がイラストでわかりやすく、実行したステートの入力・出力をその場で見れ、またステート内のGlueのログについてもリンクをクリックしていくことで容易にCloudWatchの対象ログに辿り着けます。


Glueは例えば、プロセス実行にて、AWS S3 SYNK 元バケット 先バケット /recursive とするものを作っておきます。このとき、パラメータで元バケット、元プレフィクス、先バケット、先プレフィクスを受け取って利用するようにしておきます。
Glueでの外部ライブラリについても、ある程度はパラメータに既定の値で取り込むことが可能というAWSの配慮があります！(AWS Glue ETL で使用するモジュールを追加でインストール https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-programming-python-libraries.html)
Glueジョブは、Connectorにnetworkをセットすることで、どのVPC・サブネットでGlueジョブが実行されるかを設定できます！なので、権限で分けている環境でも、かなり自由に実行できます！
S3はGlueは特別なVPCエンドポイントのエンドポイントからアクセスできるので、権限分けてるといろいろ気になるかもですが、VPC横断して使えるという利点があります。

ETLならSparkモードにすればいいだけですし、ジョブブックマークは便利すぎるし（読み取ったjsonをGlueが裏で覚えてくれる機能。次は【読み取ったことのないjsonだけ読む】）

GlueでVPC横断を含め、いろいろな機能を作り、それをStepFunctionsで俯瞰的に動作順序や例外処理というオーケストレーションする。

しかも見やすい、ログを追いやすい（デバッグしやすい）

なかなかおすすめです。
GradleプロジェクトにGitHub Packagesで公開したJarを組み込みたい

# Overview
GitHub Packagesに自作jarをアップロードしたのですが、それをGradleで作った別のプロジェクトに組み込むための手順がヒットしなかったので、今回記事としてアップしました。  

イメージとしては以下の通りです。  
- zoeque.hogeというgroupIdを持つ、fugaというartifactをGitHub Packagesにアップロードした
- piyoというプロジェクトでこのfugaを使いたい！  

```plantuml
header
zoeque/hogeのfugaを依存関係に含めたい
end header
package "GitHub Packages"{
package fuga {
    component Module
}
}
package piyo {
    component Application
}
Module -> Application
```

# 組み込み先の設定  
piyoのbuild.gradleを修正します。具体的には以下のように設定します。  
```gradle
repositories {
	mavenCentral()
	maven {
		url = uri("https://maven.pkg.github.com/zoeque/fuga")
		credentials {
			username = project.hasProperty("GITHUB_USERNAME") ? GITHUB_USERNAME : ''
			password = project.hasProperty("GITHUB_TOKEN") ? GITHUB_TOKEN : ''
		}
	}
}

dependencies {
	implementation 'zoeque.hoge:fuga:1.0.0'
}
```  
変更ポイントとしては、
- uriの末尾は`/zoeque/hoge`となっていますが、適切な`/名前/プロジェクト名`に変更する
- implementationには適切なgroupIdとartifactId、バージョンを記載してください

の2点です。

次にプロジェクトルートに配置したgradle.propertiesにユーザ名とトークンを設定します。  
**トークンを含むので、push時には注意してください。**  

```properties
GITHUB_USERNAME = zoeque
GITHUB_TOKEN = [TOKEN]
```
- ユーザネームは自分の名前を設定してください
- [TOKEN]部分にはトークンを記載してください

トークンの発行は以下を参考にしました。  
https://qiita.com/SatoKaito/items/385ca41508945ca9b5c3  

あとはGradle buildをすれば解消するはずです。
6カ月で300人の書類選考と面接を経験。入社後活躍しているメンバーの特徴から、選考時に見るべきポイントをまとめてみた。

# はじめに
みなさま、こんにちは。
先日、弊社からの[プレスリリース](https://explay.co.jp/dx/)の通り、ソフトウェア検証、ソーシャルメディア運用支援、デジタルリスクマネジメントサービスの提供を開始予定です。
サービス開始にむけて、わたしは採用担当をおこなっておりました。特に苦労した点がアルバイト採用です。履歴書や職務経歴書に記載される情報量が少ない中で選考を行う必要があるからです。今回、6カ月で300人以上の書類選考、面接を経験してわかった、入社後活躍しているメンバーの特徴から、選考時に見るべきポイントをまとめて、業界全体の良い人材の確保に役立てたらよいなーと思い記事を書きます。
弊社の選考フローは、書類選考と面接1回でおこなっているのでそれぞれのポイントを紹介します。
なお、弊社はアルバイト入社からのキャリアパスとして、社員化も視野に入れているため、自発性、積極性を重要視しております。


# 入社後活躍しているメンバーの書類の特徴
**・履歴書の項目がすべてうまっていて、誤字脱字がない（職務経歴書があれば尚よし）**
書類選考時は、履歴書に記載できる内容には限りがあるため、曖昧な記載や情報不足だと判断が難しくなります。一方で、丁寧に記載している方は必要な情報をまとめることができており、採用後も報連相などできるなど活躍しているメンバーになっている傾向です。

**・ゲームのやり込み度の記載が多い**
同じく、ゲームのやり込み度が分かるように記載している方も活躍しているメンバーが多く、採用後も業務理解度が早く、生産性が高いメンバーが多いです。


# 入社後活躍しているメンバーの面接時の特徴
**・過去の業務経験を簡潔に説明できる**
面接では応募者が過去何をやってきたのか、自分で考えて行っていたのか、他のメンバーとコミュニケーションがうまくできそうかなど、書類では見抜けない部分を確認します。
事実　→　その事実に対しての考え　のように確認するんですが、その際に端的に自身の役割、どのような業務をおこなっていたか話せる方は、コミュニケーションスキルが高く採用後も活躍しております。

**・事前準備ができている**
また、応募した職種の業務を事前に調べている方も活躍しております。これは業務へ向かう姿勢が前向きであったり、自身で調べるという癖がついているので成長速度が早いです。

**・ゲームが好き**
今ご活躍されている方の共通点として、みなさん「ゲームが好き」です。
好きなゲームは何ですかと聞いたときに笑顔でお話する人、話が膨らむ人は採用した方がいいと思います。


# さらに優秀な人材を見極めるための工夫
弊社は人事1名、面接官2名の3人体制で行っておりました。これは悩んだときに複数の意見から決定することで納得感を得るためです。
また、定性評価だけだと再現性が少ない、ばらつきが発生するので、事前に確認項目と項目に対しての評価基準を決めて、定量評価も出しておりました。一定基準の数値に達している方は採用寄りで検討、達していない方は他に特別なスキルがないかのフィルターをかけて選考していました。


# まとめ
アルバイトの面接は情報量が少ない中で選考しないといけないし、短期離職のリスクも大きいです。
その中で、企業側はなるべく多くの優秀な人材を確保したいと思っています。もしこの記事をみて当てはまる人材がいたら即確保しましょう。
猫でもできる！Next.jsを一瞬でVercelへデプロイする方法

## はじめに
React、Next.jsに触れてみたいと思ったのでNext.js + TypeScriptの環境構築をしてみました。
Vercelはフロントエンド向けのホスティングサービスで，GitHubなどと連携すると簡単にデプロイできます！

ちなみに環境はwindows10です。

Next公式ドキュメント：https://nextjs.org/docs
## Next.jsプロジェクトを用意
### Node.jsのインストール
ここからダウンロードして展開してインストール。
https://nodejs.org/en/download

![image-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625290/07ee187b-18c0-145f-7695-b6a0bf14116a.png)

今回はWindowsで環境構築するため Windows Installer を選択
### Nextプロジェクトを新たに作成
- ```node --version```でNodeが動くことを確認
- 適当な場所にディレクトリを作成して移動
- ```npx create-next-app --typescript```を実行して新規プロジェクトを作成
  - 指示に従って必要なパッケージをインストール
  - ※ --typescriptは，--ts オプションでも可  

パッケージはそれぞれインストールするか選べます。
```
Need to install the following packages:
create-next-app@14.0.3
Ok to proceed? (y) y
√ What is your project named? ... my-next-app
√ Would you like to use ESLint? ... No / Yes
√ Would you like to use Tailwind CSS? ... No / Yes
√ Would you like to use `src/` directory? ... No / Yes
√ Would you like to use App Router? (recommended) ... No / Yes
√ Would you like to customize the default import alias (@/*)? ... No / Yes
Creating a new Next.js app in D:\devwork\next-app.
```
## ローカルで動作確認
エラーが無ければNextの環境構築ができているはずなので動作確認を行います。
- カレントディレクトリを作成したプロジェクトへ変更。
- ```npm run dev```を実行。
- ブラウザで http://localhost:3000/ にアクセス。

![スクリーンショット 2023-12-01 10.54.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625290/c7062366-3a99-f353-915c-6019af92ef5e.png)

Nextの初期ページが表示されればOKです。

## GitHubへプッシュ
リモートに適当なリポジトリを作成してNextプロジェクトをプッシュします。

## Vercelへデプロイ
- URL:https://vercel.com/new にアクセス
  - Add github account を選択してアカウントを追加
  - リポジトリを選択してインストール
![スクリーンショット 2023-12-01 10.58.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625290/706eb33d-9a28-19db-ca2b-70d36e49b191.png)
<br;>

  - Import Git Repository に追加されたリポジトリのImportボタンを押す
![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625290/3915af79-3cad-e54d-89bd-666feca540f0.png)
<br;>

  - 適当なプロジェクト名を入力、Framework Preset は Next.jsを選択してDeploy
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625290/51ac7ad6-b560-d5e0-1d15-50516c02a7cf.png)

<br;>

## デプロイ成功！

なんと猫の毛繕いタイムより早くデプロイすることが出来ました！

![image-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625290/8dc7d039-08d4-3894-0a9a-1e8d64931757.png)

<br;>

生成されたドメインにアクセスするとNext.jsの初期ページが表示されます。
![image-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625290/4ac43950-30d2-7488-9a7b-b837c08e5cd6.png)

後は追跡中のブランチに変更を加えればVercelにも反映されます！

## Vercelの料金体系
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625290/7c41865e-e875-7793-0492-8fd92952a756.png)
無料のHobby枠でもServerless FunctionsやDB(KV or Postgres)が使える上にCDNも利用できます。  
すごい！！0円で遊び放題！！太っ腹！！





- 公式チュートリアルやりたい
https://nextjs.org/learn-pages-router/foundations/about-nextjs
[re:Invent2023 ざっくre:Cap]AWS storage: The backbone for your data-driven business

# はじめに
みなさんこんばんは！hiropyです。
今回はre:inventで参加したセッションを、英語できないマンなりにざっくり振り返っていこうと思います！

本記事では「AWS storage: The backbone for your data-driven business」について記載していきます。

翻訳ミス、意図の取り違えがあるかもしれませんが、「こんなことしてたんだ」くらいでご参考にしていただけると幸いです。




# セッション概要
- セッション名：STG227-INT | AWS storage: The backbone for your data-driven business
- セッションタイプ：Inovation talk
- レベル：200

 セッションの概要は以下の通りです。

> AWSは、アプリケーション、アナリティクス、AI/MLのワークロードを強化する、信頼性、拡張性、安全性の高いストレージサービスを提供しています。このイノベーショントークでは、AWS Distinguished EngineerのAndy Warfieldが、AWSが提供する最新のストレージイノベーションと、洞察とイノベーションを加速する弾力的で俊敏なデータ基盤の構築方法に関する内部見解を紹介します。AWSのハイパフォーマンス・ストレージを活用し、データアクセスの高速化、データレイクの簡素化、AI/MLイニシアチブの強化を実現することで、企業がどのように競争優位性を高めているかをご覧ください。アンディは、AWSストレージがデータ主導型ビジネスのバックボーンとして、セキュリティ、ガバナンス、アナリティクス、アプリケーション開発をどのようにサポートするかについて、重要なポイントを提供します。


各ストレージの歴史とアップデート、活用できるユースケースについてのお話でした！

# セッション内容
## EBSについて
EBSは今年15周年。
EBSは基本的にNitro上で動いている。
Nitroは安全で信頼性の高いデータ保護を行っている。
 EBSは15年もの間で、400,000 ものオペレーションができるようになった（I/Oどっちか忘れました）
EBSとEC2インスタンス間では、データをパイプライン的に処理することで、読み書き速度の向上を実現した。（データ依存性のあるものは別で抜き出し、それ以外の部分と並列して処理する）

## S3について
S3は17年前から最古のストレージサービスとして機能してきた。
昔から主にデータレイクやアプリケーションの基盤として利用されてきたが、ここ数年でアプリケーションでの活用がより顕著になってきた。
利用者からは、より低レイテンシで高速なユーザ体験が求められている。

###  S3 Express Onezone
本日発表されたシングルAZのアーキテクチャ
同じAZに通信対象のアプリケーションを配置することで、リクエストのレイテンシが下がる。
従来と比較してリソースの利用効率がいい。

レイテンシが通常よりも約 10 倍低く、レイテンシは 1 桁ミリ秒で、数百万のリクエストを実行できる。

新しいバケット タイプのディレクトリ バケットである。 s3 と通信するプロトコルのメタデータ ディスカッション。非常に低いレイテンシを必要とする非常に高い TPS ワークロード向けに設計されている。

特に効果が出るのが機械学習。
同一AZで低レイテンシを実現することで、GPU の利用率が高まり、処理全体の時間が約 50 ～ 60% 早く短縮される。 ジョブ全体の実行時間を短縮することができる。


## Fsx
エンタープライズに対するマイグレーションでは、レジリエンス（回復力）も求められる。
この中で、FSxはマイグレーションの役に立つ。

FSx Netapp ontapがアップデートされ、スケールアウトが可能になった。
https://aws.amazon.com/jp/blogs/aws/new-scale-out-file-systems-for-amazon-fsx-for-netapp-ontap/
書き込み速度は最大6倍、読み込み速度は最大4倍になった。IOPSについては最大7倍。


## amazon s3 access grants
https://aws.amazon.com/jp/s3/features/access-grants/
自身のディレクトリだけにアクセスさせることが可能。
データアクセスを管理するサービスで、パーミッションをスケールすることも可能。


## FSx for Lustre
https://aws.amazon.com/jp/fsx/lustre/
Amazon FSx for Lustre は、人気のある Lustre ファイルシステムのスケーラビリティとパフォーマンスを備えたフルマネージド共有ストレージ。

キャパシティの設定なしでもスケールすることができる。

## Mountpoint for s3 and S3 Express one zone
https://aws.amazon.com/jp/about-aws/whats-new/2023/11/mountpoint-amazon-s3-express-one-zone-storage-class/
Amazon S3 のマウントポイントを使用して、ファイル システム操作を使用して新しいAmazon S3 Express One Zone ストレージ クラスに保存されているオブジェクトにアクセスできるようになった。


# 最後に
いかがでしたでしょうか？
今回内容が多く、キャッチアップできてない点が多いのですが、少しでも参考になれば幸いです。
オフショア開発で可能性を活用: 企業向けのヒントとメリット 

デジタル技術が力強く発展する時代において、オフショア開発は多くの企業にとって不可欠な戦略となっています。しかし、効果的なオフショア開発戦略を実施するためには、この分野における機会、課題、そして正しいアプローチを明確に理解する必要があります。本記事では、オフショア開発が企業にもたらす重要なヒントやメリットなど、オフショア開発の分野についてご紹介します。  

1. オフショア開発への理解 

[オフショア開発](https://newwave-solutions.co.jp/what-is-offshore/)とは、事業や生産活動を国境を越えた国々に拡大することを指します。これは、潜在的な市場で利用可能な利益や資源を最適化するために、他の国で資源や労働力を使用したり、プロジェクトや事業活動を引き受けたりすることを含みます。 

現在、ITアウトソーシングサービスを提供する企業は世界中に数多くありますが、ベトナムもその一つです。この観点から、ベトナムのオフショア開発企業について分析し、より深く知っていただくための記事をご用意しました。 

>>> [今すぐ見る](https://newwave-solutions.co.jp/IT-companies-in-Vietnam) 

2. オフショア開発成功の秘密  

市場調査：その国のビジネス文化、市場の状況、経済発展の方向性など、対象市場に関する情報をマスターします。 

  

現地との関係構築：パートナー、地域社会、政府機関との強いつながりを構築し、開発プロセスへの理解と支援を深めます。 

  

戦略的形成：対象市場に適した具体的な目標、計画、戦略を決定し、開発機会の最適化とリスクの最小化を支援します。 

地域ブランドの構築：ブランド戦略と対象市場への働きかけを適宜調整し、企業が現地の顧客に理解され、高く評価されるようにします。 

企業文化の管理：対象地域のビジネス文化や価値観に合わせて企業文化を調整し、洗練させます。 

>>> [ベトナムがオフショア開発先としておすすめの理由](https://newwave-solutions.co.jp/why-offshore-in-vietnam/)

3. オフショア開発のメリット 

市場の拡大：新市場からの開発機会を活用し、売上を伸ばし、新規顧客を獲得します。 

  

リスクの分散：単一市場への依存によるリスクを最小限に抑え、事業の安定と多角化の条件を整えます。 

  

競争力の強化：海外市場で成功したプロセスや戦略を学び、適用することで競争力を強化します。 

  

生産とパフォーマンスの向上：国境を越えた市場からの資源と質の高い労働力を活用し、生産と業績を向上させます。 

  

コストの最適化：現地市場のコスト優位性を活用し、運用と生産のコストの最適化に役立ちます。 

>>> [オフショア開発とニアショア開発](https://newwave-solutions.co.jp/offshore-and-nearshore/)![what-is-offshore-1-e1697542466301.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3031688/1657eee3-9dbf-6a77-9d97-8bfb8efe4b87.png)


  

4. まとめ 

オフショア開発は、現在のビジネス環境において、持続可能性を実現し、新たな機会を活用するための重要な戦略です。これらの重要なヒントと大きなメリットに従うことで、企業は成功した未来を形成し、地域的・世界的な成長に貢献することができます。 

  

また、12年以上の経験を活かし、高品質システム開発 、DX開発（DX推進支援）、ウェブサイト開発、アプリ開発などの海外開発サービスもリーズナブルな金額と高い品質で提供しています。お客様のご要望をお伺いし、最適なプラットフォーム構築と開発プロセスを提案します。300以上のプロジェクトで培った豊富な知識と経験により、Newwave Solutionsはお客様のソフトウェア設計・構築・開発に関するあらゆるご要望に自信を持って応えします。ウェブサイト構築やシステム開発に関するご質問やご要望がございましたら、お問い合わせください。
Milk-v duo上のテキストファイルをWinSCPで作成・修正する

## はじめに
秋葉原ロボット部の有志で、milk-v duoを購入し、個々人が様々な実験を行って、勉強会内で報告しています。

Milk-v duoは9ドルのrisc-vコンピュータとして知られています。
ハードウェアは以下の通りです。

1. CPUはCVITEKのCV1800B (C906@1Ghz + C906@700MHz)
2. 最高1 GHzで動作するデュアルRV64コア
3. 64 MBのラム
4. オプションのアドオンボードを接続すると10/100Mbpsの速度でイーサーネットに接続可能

Milk-v duo上でPythonやtinyccのプログラミングができるようになりましたが、Milk-v duo上でつかえるエディタはviで少々使い勝手が悪いです。

Windowsマシン上のファイル転送プログラムWinSCPを使うと、常用しているWindowsマシン上のエディタが利用できるようになります。

## WinSCPの設定
WinSCPをダウンロードしてインストールします。
https://winscp.net/eng/download.php
起動して、milk-v duoのIPアドレス、ID、非推奨ですがパスワードを設定します。

次に、「オプション」、「環境設定」を選択し、エディタをクリックします。
「追加」ボタンを押して、「エディタの追加」ウィンドウを表示します。
「外部エディタ」のラジオボタンをクリックすると、「参照」がクリックできるようになります。
「参照」をクリックして、ご自身の使いたいエディタの「.exe」ファイルを選び、「OK」ボタンを押します。
「エディタの設定」の一番上に、ご自身の選んだエディタが表示されるようにします。
エディタをクリックすると、「上へ」のボタンが表示されるので、一番上に表示されるようにします。
「エディタの設定」が終わったら、「OK」ボタンを押します。

## WinSCP経由でのテキストファイルの修正
WinSCPを使ってmilk-v duoにアクセスすると、右側のウィンドウにmilk-v duoのウィンドウが表示されます。
編集したいファイルの存在するディレクトリに移動して、ファイルをダブルクリックします。
先ほど設定したエディタでファイルが表示されます。
ファイルを修正したら、保存ボタンを押してファイルを閉じると、milk-v duo上にファイルが上書きされます。

新しいファイルを作成したいときは、「新規」から「ファイル」を選びます。

## おわりに
最小限の機能しか持たないmilk-v duoでファイルを編集しようとすると、ターミナルソフト経由で内蔵されているviというエディタを使う必要があります。
このviエディタの使いかたになるれるよりは、WinSCPでmilk-v duoに接続した状態で、ファイルの作成や修正を行う方が快適です。
[re:Invent2023 ざっくre:Cap]Deploy generative AI applications on enterprise data with Amazon Q 

# はじめに
みなさんこんばんは！hiropyです。
今回はre:inventで参加したセッションを、英語できないマンなりにざっくり振り返っていこうと思います！

本記事では「Deploy generative AI applications on enterprise data with Amazon Q 」について記載していきます。

翻訳ミス、意図の取り違えがあるかもしれませんが、「こんなことしてたんだ」くらいでご参考にしていただけると幸いです。




# セッション概要
- セッション名：AIM368-NEW-R | [NEW LAUNCH] Deploy generative AI applications on enterprise data with Amazon Q [REPEAT]
- セッションタイプ：Chalk talk
- レベル：300

セッション概要は以下の通りです。

> このチョーク・トークでは、Amazon Qが社内のチームの生産性を向上させる方法をご紹介します。企業のコンテンツ上でAIを活用したジェネレーティブなアプリケーションを実行する方法と、安全なコネクターを通じてデータを取り込む方法を学びます。また、Amazon Qの管理コントロールが、どのようにAmazon Qアプリケーションのコンテキストとブロックされたトピックを定義するのに役立つのか、さらに、接続されたエンタープライズ・データからのみ優先的に応答されるように設定する方法を発見してください。

Amazon Qのビジネス的な活用方法について、デモを交えながら説明するセッションでした。

# セッション内容
セッションの内容の説明
- Amazon Qはどんな場面で助けになるのか
- デモによる説明
- 主要機能をペルソナに当てはめながら説明

##  どんな場面で活躍するのか
ビジネスに関わるあらゆるロール、
- マーケティングのマネージャーが製品を発案するとき
- 製薬系
- その他色々

色々なユースケースがあるが、Amazon Qを活用することで人の仕事を25% ほど削減できる。

## Amazon Qについて
Amazon Qは新しいタイプの生成系AI
Amazon Qがサポートするサービスは以下の通り。
- Business
- Builder
- QuickSight
- Amazon Connect
- supply chain


Builderのサポートは17年分のデータに基づいている
本セッションでは、ビジネスの側面を深掘りする。

## ビジネスをどうサポートするか
- エンタープライズのデータをRAGを使って回答を制御する


セキュリティの観点
- エンタープライズ向けの規則に則っている
- レスポンスのガードレールを制御できる
- 有害なコンテンツから守るガードレールが使用できる
- 禁止用語のブロックもできる
- 機密性が高すぎる質問はブロックできる


コンテンツ周り
- 40以上のサードパーティとのコネクタがある
- SSOを使用してアプリケーションをビルドできる
- 自然言語からコンテンツを作成できる
- 膨大なドキュメントから、内容のサマリを作成してくれる
- ドキュメントの分析を詳細にやってくれる
- Jira 等と連携することにより、ネクストアクションを定義するためのチケットを作成することもできる
- リクエストで画像・動画を入れることもできるので、録画の中から質問されたところを検索、抽出することも可能

アクセス権限の制御
- 基本的にはIAMで制御
- 他のIdPでも制御することが可能


## Slackとの統合
Slackと統合することも可能で、AWS に関する質問に素早く答えるチャットbotを作成することもできる。
参考リポジトリはこちら。
https://github.com/aws-samples/amazon-q-slack-gateway

## 当日でた質問（聞き取れたもののみ）
- 日本語には対応しますか？
    - 現在は対応していないが、最重要だと考えている。今後対応する予定。
- BedrockとAmazon Qの使い分けは？
    - Amazon Qはアプリケーション層に注目したもの。Bedrockはニーズに合わせてカスタマイズが可能。


# 最後に
いかがでしたでしょうか？
皆様のご参考になれば幸いです。
RSA 

<!--
2023/11/19
-->
[picoCTF][Cryptography][miniRSA]

## Writeup
* eが小さいと、Low Public Exponent Attackが使えるらしい。
ということで、３乗根を求める。
~~~python:dec.py
from Crypto.Util.number import *

c = 2205316413931134031074603746928247799030155221252519872650073010782049179856976080512716237308882294226369300412719995904064931819531456392957957122459640736424089744772221933500860936331459280832211445548332429338572369823704784625368933

def cube_root(c):
    start = 0
    end = c
    while start <= end:
        mid = (start + end) // 2
        if mid * mid * mid == c:
            return mid
        elif mid * mid * mid < c:
            start = mid + 1
        else:
            end = mid - 1

    return -1  # 3乗根が整数でない場合

print(long_to_bytes(cube_root(c)).decode())
~~~
![screenshot 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160736/2b1173ec-e760-7c4d-b0bd-39ce52846e0b.png)

* 参考サイトに値を入力するだけでも行けた。
* Nは何だったんだろう。
以上です。

## 参考サイト

https://www.dcode.fr/rsa-cipher

https://www.slideshare.net/sonickun/rsa-n-ssmjp
ChatGPTについて

みなさま、お疲れ様です。

ChatGPTが公開されてから約半年が経過しましたが
みなさまはご利用されておりますでしょうか？
私はかなり利用しております。
最近は人と話すよりChatGPTとお話ししている方が多い気がしています。

今回は私がよく使うパターンを３つ紹介します。

## 用語理解
最近、新要素に触れる機会もあり新用語が多々増えました。
ふと、メンバーから出た用語が何だっけなっと言うこともあると思います。
そんな時にChatGPTに質問すると分かりやすく解説してくれます。
![スクリーンショット 0005-11-30 18.52.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500270/0133c398-bfc8-309b-4d27-0bc11d75a72b.png)
上記のように、「SAP Materials Management」を解説してと伝えると
ChatGPTが解説を行ってくれます。

## メソッドの使い方
例えば、「toUpperCase（）」の使い方がわからない時に ChatGPTに問い合わせると
![スクリーンショット 0005-11-30 18.56.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500270/272cae6a-c51d-7298-ec9d-f1d5f5e390af.png)
このように簡単な例まで紹介してくれます。
便利ですね

## ソースの解説
半年後に同じソースを見た時に何だこれって言うことはよくあると思います。
そんな時に ChatGPTに問い合わせるといい感じで教えてくれます。
※コメントや設計書を見ればある程度は思い出せるとは思いますが。。。
例：ajaxの解説
```
$('#btnsend').on('click', function(){
  $('#result').text('通信中...');
  // Ajax通信を開始
  $.ajax({
    url: 'helloAjax.php',
    type: 'GET',
    dataType: 'json',
    data: $('form').serializeArray(),
    timeout: 5000,
  })
  .done(function(data) {
      resolve();
  })
  .fail(function(error) {
      console.log(error);
  });
})
```
これを ChatGPTにお願いすると以下の様な感じで帰ってきます。
![スクリーンショット 0005-11-30 19.09.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500270/9d9ea083-54d7-3897-e419-83b0ce40425a.png)
解説がつきましたね。
しかも、ちゃんとポイントの説明までしてくれます。
![スクリーンショット 0005-11-30 19.09.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2500270/e45b157d-f05e-ae29-4f19-dc8709f2f53f.png)

## 最後に
今、私は ChatGPT3.5を使っていますがそこそこ使えます。
ただ、3.5だと2022年1月までのデータまでしか教えてくれません。
最新の技術を知ろうとすると4に上げるしかない様です。
SAPの調査は基本英語で調べないといけないのですがある程度の当ては ChatGPTに聞くのもありかもしれませんね。

ちょっとたまに間違っていることもあるのでその時は指摘してあげると修正してくれます。

## 参考記事
GPT-4とは？Chat（チャット）GPT-3.5との違いや使い方を解説
https://www.profuture.co.jp/mk/column/57269

チャットGPT
https://chat.openai.com/auth/login
PagerDutyのOnCall当番をAPIで取得してみる

PagerDutyは障害検知などの用途で利用されるプロダクトですが、拡張を作成したりできるように複数のAPIが用意されています。
また、そのAPIのラッパーが様々な言語で用意されています。
今回はRubyラッパーである https://github.com/technicalpickles/pager_duty-connection を利用し、現在のオンコール当番を列挙する簡単なプログラムを作成してみます。

## APIトークンの作成

PagerDutyにログイン後、自身のプロフィールページに行き、`user Setting`タブをクリックすると、`API Access
`の項目に`Create API User Token`のボタンがあるのでそこをクリックします。

クリックすると下記のようなモーダルが出るので、Descriptionを埋めてCreate Tokenで作成します。
![スクリーンショット 2023-11-30 18.57.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359721/e1dc9db8-fdee-17c9-fa6e-bc81628ae403.png)
作成後表示されるトークンはその時しか表示されないため、どこかに保存しておきましょう。

## プログラムの作成
まずはGemの準備をします。`pager_duty-connection`の他に、APIトークンを扱うため`dotenv`も利用します。

```ruby:Gemfile
gem 'pager_duty-connection', github: 'technicalpickles/pager_duty-connection'
gem 'dotenv'
```

次に、`.env`に先ほど発行したトークンを`PAGERDUTY_TOKEN`に入れてください。

最後にメインプログラムを作成していきます。
今回はoncallに関するAPIを利用するので、下記の`List all of the on-calls`APIを使います。

https://developer.pagerduty.com/api-reference/3a6b910f11050-list-all-of-the-on-calls


```ruby:main.rb
require 'dotenv'
require "pager_duty/connection"

Dotenv.load

pagerduty = PagerDuty::Connection.new(ENV['PAGERDUTY_TOKEN'], url: 'https://api.pagerduty.com/')

response = pagerduty.get('oncalls')

response.oncalls.each do |oncall|
  p oncall.user.summary
end
```

responseはhashie objectでoncallsという配列にオンコールに関する情報が入っているため、そこから各要素の`.user.summary`と辿ることでユーザー名を取得することができます。
また、`.escalation_policy`や`.escalation_level`を利用して、下記のように書くことで簡単な絞り込みをすることもできます。

```diff_ruby:main.rb
response.oncalls.each do |oncall|
-  p oncall.user.summary
+  p oncall.user.summary if oncall.escalation_policy.id == ENV['ONCALL_ID'] && oncall.escalation_level == 1
end
```

## まとめ
今回はAPIを使って簡単にPagerDutyのオンコール当番を抽出してみました。
オンコール以外にも様々なAPIががあるので、気になった方は公式ドキュメントを確認してみてください。

## REF

https://github.com/Umekawa/pagerduty_connection_test (今回実装したプログラム)
使ったことない技術を詰め合わせてアプリを開発した話


:::note info
この記事はZOZO Advent Calendar 2023 シリーズ9の1日目の記事です。
:::

## はじめに
毎日目まぐるしく新たな技術やサービスが生み出されていますが、ここ最近で気になる技術やサービスありますでしょうか？
自分は結構ありますが、実際に触ってみる・試してみるなどのアクションは起こせずにいました。

しかし先日、参加させていただいた開発合宿が個人ハッカソン形式だったため、これはいい機会だと思い気になっていた技術詰め込んでアプリを開発しました。
そこで使用した技術について軽く紹介と感想を話せればと思います！

※アプリの完成度、使用技術の理解度は低いのでその点はご了承いただければと思います🙇‍♂️🙇‍♂️

## 作ったアプリについて
作ったアプリは簡単に言うと、献立を考えてくれると同時に買うものリストを生成してくれるものになっています。

以下が大まかな画面のフローです
![スクリーンショット 2023-11-29 23.11.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1602210/2269b7f4-25fd-ba90-51ad-8d578710d30a.png)

認証を通ると一番左のような画面が現れます。
"generate menu"ボタンを押すと「料理名」 「材料」 「作り方」をOpenAIが生成してくれます。
「材料」の右側に"LIST"ボタンがありそれをクリックすると別タブで買い物リストが表示されます。
TODOリスト形式になっていてクリックすると横線で消されていきます。
認証情報に紐づいてDBにLISTの状態は保存されているのでタブは消しても問題ありませんし別のデバイスで開いても大丈夫です。

以上のような非常にシンプルなアプリになっています。
(OpenAIAPIのトークンの関係で現在デプロイはしておりません🙇‍♂️)
ソースコードは公開してるのでよければご覧ください！

https://github.com/kensiiwasaki/auto-menu

## 使用技術
### 選定方針
選定方針は大きく二つです
- 挑戦 (使ったことない・興味があった)
- 無料でも使える

しかし当てはまることの方が多かったので、候補が二つ以上出た時は雰囲気で選んでます

### フロントエンド・バックエンド
- [Remix](https://remix.run/)

`Remix`は`React`のSSRフレームワークで、`Next.js`同様ファイルシステムルーティングを採用しています。
`Next.js`のApp Routerと迷いましたが、`Next.js`自体は普段から触っている、App Routerもチュートリアルで少し触ったことがあった、機能多すぎるので別の機会にまとめて触りたいという考えから今回は`Remix`を採用しました。

### データベース
- [PlanetScale](https://planetscale.com/)

`PlanetScale`はサーバレスなMySQLプラットフォームです。
DBのブランチ機能があったり、productionにデプロイ後３０分以内であればスキーマ変更をrevertできるなど、普段のGitHubを利用したアプリケーション開発と同じような体験が得られるのが個人的にいいなと思った特徴です。
`Neon`も候補に上がりましたが`Neon`は日本リージョンがなく今後利用する可能性があるとしたら`PlanetScale`かなと思ったのと個人的にMySQLの方が少し馴染みがあったので`PlanetScale`を採用しました。

### ORM
- [Prisma](https://www.prisma.io/)

`Prisma`はNode.jsとTypeScript向けのORMです。
データベーススキーマをコードで管理でき、データベースクエリを生成するために自動的にSQLを生成するためほとんどSQLを書く必要がなくなるのが特徴です。
実は`Prisma`のみ今回のスタックの中で触ったことがあり、本来は[Drizzle](https://orm.drizzle.team/)を採用したかったのですが、時間的な都合で断念してしまいました。。。
近いうちに触って`Prisma`と比較してみたいと思います！

### 認証
- [Clerk](https://clerk.com/)

`Clerk`はClerk社が提供している認証サービスでGUI操作で認証機構を爆速で立ち上げることができます。
`Firebase`や`Supabase`の認証はすでに使ったことがあったので`Auth0`か`Clerk`が候補に上がりました。
`Clerk`は`Remix`用の[クイックスタートガイド](https://clerk.com/docs/quickstarts/remix#use-clerk-with-remix)を用意してくれていたこと、認証画面のカスタマイズ性が高そうだったことが決めてで今回は採用に至りました。
しかし、無料枠だとMAUの制限が5,000人(`Supabase`だと50,000人)と少なめなのでスケールを考えているならあとあと少し痛くなりそうだなと感じました。

### API
- [OpenAI API](https://openai.com/product)

言わずもがな、OpenAIが提供してくれているAPIです。
なんだかんだ触ったことがなかったので、今回これを触ることをいちばんの目的としていました。
今回は献立の生成を行ってくれています。

余談ですが、無料枠で使えると思っていたのですが以下の記事と同様のエラーが出てしまったので500円分のクレジットを購入しました

https://yesmanblg.com/chatgpterror/#toc4

### UIコンポーネント
- [Mantine](https://mantine.dev/)

`Mantine`は`React`のコンポーネントライブラリで、`TypeScript` `素のCSS`をベースに作られています。
かなりの数のコンポーネントが実装されているのはもちろん、多くのカスタムフックも用意してくれています。
個人的にいちばんいいなと思ったポイントはドキュメントが超見やすくて使いやすい点です。
上記のことやカスタマイズ性の高さなどなどかなり完成度の高いコンポーネントライブラリだと思い今回の採用に至りました！


## 感想
今回は気になっていたけどなかなか触れずにいた技術を詰め合わせて、アプリを開発してみました！
共通して感じたのは**体験の良さ**です。
ドキュメントが親切・丁寧でほぼほぼ詰まることなく導入・実装ができ、流行り始めてるからにはそれなりの理由があるんだなとめちゃくちゃ感じました笑

個人開発には`Firbase`などがよく利用されているイメージですが今回のような構成も選択肢としてはありなのではないでしょうか！？！？

自分も引き続き触ってみて、良さや他技術との比較などの発信もできたらと考えております！


## おわりに
内容やソースコードに間違い等ありましたらご指摘いただけますと学びになり大変幸いです。
何卒よろしくお願いいたします。

ここまで読んでいただきましてありがとうございました！
【FileMaker】グローバル変数を見失わないために

FileMakerのスクリプトを作成する際、グローバル変数をそれぞれのスクリプトの中で値をセットすると、思った以上にミスしたりバグが潜んだりします。
例えば、

1. グローバル変数名を間違える（１文字間違えるとか！）
2. どこでグローバル変数が変更されているか分からない！
3. 同じ目的のグローバル変数が新たに現れる

のように、いたちごっこのようにバグ潰しに労力が掛かってしまいます。

これを防ぐために、私はグローバル変数に値を保存するスクリプトと取得するスクリプトをセットで作っています。
割と同じようにグローバル変数の取り扱いをしているFileMaker屋さん、多いかも、と思います。
以下を読んで「あ、私と同じだ！」と思ったら「♡」のいいねボタンをポチッとよろしくお願いします！
「知らんかった！」「真似してみよう！」と思う方も、ぜひいいねボタンをポチッとよろしくお願いします！

では、ここからが本題です。

# setter/getterのスクリプト名

例えば、マスタデータから選択した番号などを別のレイアウトや処理で使うためにグローバル変数を用意したとします。
そして、setG＜グローバル変数名＞とgetG＜グローバル変数名＞というスクリプトを作成します。

![スクリーンショット 2023-12-01 10.09.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/e63d60b2-618c-3be1-035e-2feab2dc54ed.png)

setの末尾にあるカッコは、スクリプト引数です。
getの最初にあるカッコは、スクリプトの結果です。

# setter/getterの中身

## setter

setterの中身は、基本的な処理はさらっと1行です。
この例で言うと、1行目の処理がメインです。

![スクリーンショット 2023-12-01 10.09.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/b3247a82-854e-10f5-cf11-9b80768523bd.png)

ただし、setterでは、不適切なセットが行われないよう、１行だけではなく、if文などのチェックを実装することもあります。
というか、しておいた方がいいです。

チェックを入れた例です。

![スクリーンショット 2023-12-01 10.13.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/80308925-ec4a-21c2-4f55-cbbef859158b.png)

もちろん、setterを呼ぶスクリプトの中で、setterの前にチェックを入れてもいいのですが、同じグローバル変数にセットする値の範囲が同じ場合は、何度も同じif文を複数のスクリプトに書くのは面倒だし、そうした処理の分散（重複）にもつながるので、setterでまとめてやった方が効率がいいケースになります。
スクリプトから返す結果のエラーコードは、現場によってさまざまだと思いますので、ここでは仮に、

0:正常終了
9:異常終了

としておきます。
エラーコードを間違えないように、エラーコードをカスタム関数化しておくのもおすすめです。

## getter

getterの中身も、さらっと1行です。
![スクリーンショット 2023-11-30 18.25.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/016474ef-2945-0b84-118f-a43ea2a4ddf3.png)
こちらは、何かしらのチェックを施す必要は特にないかな、と思っています。
setterでセットされた値をそのまま返す、、、ということになります。

# 使ってみる

では、このsetterとgetterを使うと、どんな感じの実装になるでしょうか？

## setterを使ったスクリプト

![スクリーンショット 2023-12-01 10.16.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/639a0a3f-546e-f986-24b0-9fe0108d9510.png)

## getterを使ったスクリプト

![スクリーンショット 2023-11-30 18.57.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60538/684c02ea-67b8-cd63-cf04-4ef580ecf9b4.png)

setterでは、返ってきたスクリプトの結果で、エラーがないかどうかを必ずチェックします。
適宜エラー処理をしますが、運用に沿って実装してみてください。

ご利用は計画的に。。。
3日でGCP(Google Cloud) CDLに合格した話

## はじめに
タイトル通り3日でGCP(Google Cloud)の初級資格であるCloud Digital Leader(CDL)を受験し合格したので対策方法と受けてみてどうだったかについて記載したいと思います。

## 受験のきっかけ
GCPのパートナー企業向けキャンペーンの案内が来て、試験を無料で受けられるバウチャーチケットがもらえるとあったため。
また、対象の資格は以下の3つでした。
 * Cloud Digital Leader (Japanese)   
 * Associate Cloud Engineer (Japanese)  
 * Professional Cloud Architect (Japanese)  
 
いきなりACEは個人的にハードルが高かったのでGCPの特徴等を知るところから始めようと思い、初級のCDLを受験してみることにしました。

## GCP CDLとは
GCPの認定資格の初級にあたる資格です。
AWSでいうとCloud Practitioner、AzureでいうとAzure Fundamentals：AZ-900にあたります。
詳細は以下公式の試験要綱を見ていただくと良いと思います。

https://cloud.google.com/learn/certification/cloud-digital-leader?hl=ja

## 勉強開始前の状態
クラウド系の資格は以下3つ取得済み。ただし実務ではAWSのみ使用しておりGCPは全く触れたことが無い状態。
* AWS Solutions Architect Associate(SAA)
* AWS SysOps Administrator Associate(SOA)
* Azure AI Fundamentals：AI-900

また、厳密には試験前3日間ではなく、3か月ほど前に認定試験直前ワークショップにも参加していたのですが、時間の都合で半分（1時間）しか参加できていなかったので約3日間です。
とりあえず同じような資格を持っているもしくは学習している方はそのくらいで取得できそうという指標程度に思っていただけるとよいと思います。

## 対策に使用した参考書等
・Google Cloud CDL ワークショップで配布された資料
Google Cloud 資格試験無料クーポン先着プレゼントの特典の中に認定試験直前ワークショップに参加できるというものがあり、参加した際に配布された資料です。
サービスの図やポイントが整理されており、問題集で詰まったところを見直すのに使用しました。

・公式の模擬試験

https://docs.google.com/forms/d/e/1FAIpQLSdyQtCFqpNSlv8xJwc8goExJOzSAKxiWW2BoVhO1QWRUEUuKA/viewform?hl=ja

・UdemyのGCP：Google Cloud Digital Leader模擬試験問題集（6回分320問）

https://www.udemy.com/share/1085W23@1a__46noxDctvstKwCSEYhKY5_YSpw0B8dltzWwnXyfTJP9pM5wHyI08uxjb478H5A==/

## 受けてみた感想
試験時間90分のうち、20分で全部解き、25分間見直しを行い、合格できそうなくらいだったので45分残して終了しました。
問題の内容については詳しく言えないのですが、とにかく問題文がめちゃくちゃ読みづらかったです（問い自体は難しくないはずなのに文章読みづらすぎてキツかった。。。）
公式の模擬試験の問題文みたいなイメージを持っていたのですが、本試験の問題文の方が読みづらいものがあったので要注意です。
てっきり終了後にすぐ合否が分かると思っていたのですが終わっても合否は分からなかったです（テストセンター受験だとすぐ出ないのかも？）。

### AWS、Azureの試験受験の際と異なっていた点
※あくまでも私個人の感想なので、受験する環境によっては異なるかもしれません。

#### メモできない
AWSやAzureのときはテストセンターで用意された消せるメモボードと水性ペンが渡され、試験の画面の方でもメモできるようになっていたのでアナログとデジタル両方でメモできるようになっていたのですが、GCPは両方無かったです。（もしかしたらデジタルのメモはあったかもしれないですが試験画面の分かるところには無かったです。）

#### 見直しのチェックはできる
見直しにチェックした問題だけとかはできなかった（できたかもしれないけど分からなかった）です。
なので見直しにチェックした問題が複数あったのですがちょっと確認しづらかったです。
結局全部見直してました。

#### 合格した点数と試験の各項目の何割できているかなどのフィードバックは無い
AWSやAzureの場合、合格ラインに対して何点取得できていて、どの項目が何割できているなどのフィードバックが得られていたのですがGCPの場合は合格しているかどうかしか分からなかったです。

## 受験後合格が分かるまで
合格が分かったのは受験後10時間後くらいで、
Accredible（AWSでいうとCredlyのようなデジタルの認定証を管理しているサービス）から「Google Cloud の Cloud Digital Leader 認定資格の修了、おめでとうございます」という内容のメールが届いたのでwebassessorにアクセスしたら合格と表示されていることが確認できました。
その後二日後にGoogle Cloud Certificationから認定しますという内容のメールが届きました。
受験後に試験結果が受験者情報に反映されるまで7日～10日かかると記載されていたのでもっと日数かかるかと思っていたのですが意外と早かったです。

合格証明書
![スクリーンショット 2023-11-29 172508.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423172/0e55d10f-3100-ce89-c519-7a3f5427c4d0.jpeg)

## 最後に
AWSやAzureの資格受験の際とのギャップに戸惑ったりはしたのですが、興味があったGCPについて学習する機会を得られて良かったです。
来年は中級のACEにも挑戦してみたいなと思います（その時はちゃんと学習時間とりたい）。
【JavaScript】ドット記法ではプロパティ名に変数を使えない

## はじめに

Reactで引っかかった箇所を深掘りしたら、JavaScriptの基礎知識のなさであることに気がつきました。調べて試したことをまとめます。

## 結論

お急ぎの方のために結論から書きます。
タイトル通り、ドット記法ではプロパティ名に変数を指定すると`undefined`になります。
ブラケット記法にすれば正しくプロパティの値を参照できます。

```javascript
const person = {
  firstname:'Taro',
  lastname:'Yamada'
};

const hoge = "firstname";
console.log(person.hoge); // undefined
console.log(person[hoge]); // "Taro"
```

## 問題

ここからは、今回直面した問題について書いておきます。Reactのコードになります。

[Reactチュートリアル](https://ja.react.dev/learn/conditional-rendering#challenges)のチャレンジ問題をやっていました。
`props`として受け取った変数`name`を使い、ドット記法でオブジェクトのプロパティにアクセスしようとして、`undefined`になってしまいました。

```react:App.js
const drinks = {
    tea:{
      plant:'leaf', 
      caffeine:'15–70 mg/cup',
      age:'4,000+ years'
    },
    // 省略
}

function Drink({ name }) {
  const info = drinks.name;
  console.log(info); // [[undefined]]
  return (
      // 省略
  );
}

export default function DrinkList() {
  return (
    <div>
      <Drink name="tea" />
      <Drink name="coffee" />
    </div>
  );
}
```

## 解決方法

ブラケット記法だと正しく受け取れることがわかりました。

```react
const info = drinks[name];
```

## 参考資料

- [JavaScript Primer](
https://jsprimer.net/basic/object/#property-access)
仕事に追われる不安をなくすには

こんにちは。ねもけんです！

Advent Calendar 2023に参加しないか、とのお声がかかったので記事を書いてみます！
といっても新卒エンジニアですので、胸を張って発信できる知識がないです。。

ので今回は、自分の周りに「仕事に追われていて毎日つらい。。」って声を聞いたので、
そういった人へ向けて（おこがましいですが）自分の考え方を伝えられればと思っています。

# この記事を読んでほしい人 #
新卒一年目などで、今仕事に追われていて、常に焦ってる、不安で頭が働かん。。って人です。

主に
* 渡されたタスクが自分のレベルと合ってない。。
* 何をどうしていいかわからない。。
* なんか漠然と常に不安。。

みたいな人を想定しています。
<br>
「うまく説明できないけど仕事つらい」って人が対象だと思ってます。

# 新卒が仕事に追われているのはなぜ？ #

新卒が仕事に追われているというのは
**自分の処理能力 < 自分へ課せられるタスク**
という状態です。

が、新卒へ向けてマネージャーが処理能力を超えるタスクを振ることはありえない（はず）
と思ってます。

ということは、仕事に追われていると言っている人たちの状態は、上司の方々から見たら
**自分の処理能力 ≧ 自分へ課せられるタスク**
となっていると思われます。
（自分のバイアスがかかっています。怒らないでください。）

おそらく仕事に追われている、というのは事実ではなく解釈であり、

**自分の処理能力を過小評価している**
**自分へ課せられるタスクについて過大評価している**

のいずれかの可能性が浮上します。

前述の通り、渡されるタスクのレベルが高いことはあまり考えられないので、
今回は後者に目を向け、
**自分へ課せられるタスクを過大評価している**人が、
不安を取り除くにはどうすればいいか、考えてみました。

# なぜタスクを過大評価してしまうのか #

例として不具合修正をマネージャーから頼まれたとします。

不具合修正の難しさを評価するとして、どう考えますか？

**カレーを作る難しさを考える**
その前に、考えやすい例でカレーを作る難易度の評価をしてみましょう。
おそらく、皆さん一度はカレーを作ったことがあるので、作り方はだいたい想像付くと思います。
また、各工程（具材を切る、炒める、水を入れるなどなど）も包丁や火を扱えれば（笑）
難しいことはなにも無いはずです。

つまりカレーを作る、というタスクを評価するにあたって、
**各工程の詳細**を考える際に、特別必要な前提知識などないため、
容易に評価ができると思います。

<br>

**不具合修正に話を戻します**

カレーの例をもとに考えると、不具合修正の大まかな流れとして、
1.不具合の再現
2.不具合の発生条件の特定
3.不具合の発生箇所（コード上）の特定
4.不具合の修正
5.影響範囲の確認
などが挙げられると思います。
<br>

作業工程の全体像を元に、**各工程の詳細**について評価できれば不具合修正全体の評価ができます。

しかしここで、
* **製品についての理解**が足りず、不具合の発生条件が何がなんだかわからない
* 不具合の発生条件を特定できても、**IT知識の不足**のゆえに何をどうすれば治るのかわからない

などと、**各工程の詳細**を評価するのに**必要な前提知識が多すぎ**ること、
つまり**知識不足**がタスクの評価を困難にさせていると思います。

それに加えて、一つの知識不足が解消されても、
また新たな知識不足が足かせになる．．．
と、ループが続いていきます。

つまり、**タスクをいきなり正確に評価するのはまっさらな新人社員には無理です！笑**
**諦めましょう！**

おいおいそんな無責任な、そんなの余計に不安になるだけじゃん。。。

# 今やるべきことに集中せよ #
状況を整理すると、
漠然とした不安の原因は知識不足ですが、その知識不足が全て解消されるまで
不安が完全に解消されることはない、ということになります。

えーじゃあどうすればいいの。。。
#### どうせ考えてもわからないんだから、今やるべき知識不足の解消に集中しましょう！ ####

誤解のないように、前提として期日感を持って仕事をしなくてはいけません。
ただし、それらを正確に評価するには、前述のとおり、ある程度の知識が必要になります。

そのため、自分の頭で考えても期日感が正確につかめないのは当たり前です。
期日感に囚われすぎて、不安に苛まれてしまうのならば、
**意識を強制的に、今やるべきこと（＝知識不足の解消）に向けましょう！**

<br>

僕は私生活から、不安に押しつぶされて物事に集中できなくなることがとても多かったです。

そんな中、自分なりにマインドフルネスについて勉強し、
今に注意を向けることの重要性を学びました。
（[これ](https://kompas.hosp.keio.ac.jp/sp/contents/medical_info/science/202004_02.html)とか不安に関する研究データが載ってますね。）

不安は未来の不確実なことを考えると襲ってきますが、
僕らは思考の対象を選択することができます。
意識的に今に注意を向けることで、漠然とした不安を解消できるのです。
<br>

仕事に追われる不安を感じている人がマインドフルネス的な考え方を取り入れることで、
**work fun!** を体現できる人が増えればいいなあと思っています！

# まとめ #
* 新卒はタスクを過大評価している
* 過大評価の原因は知識不足だが、すぐに解消されることはなく正確な評価は難しい
* **評価するのは諦めて、今やるべき知識不足の解消に集中しよう！**

あなたを不安にさせているのはあなたの考え方なんだよって話でした。
しみ出しはみ出し

2023年の下期、スタンバイに新しいバリューができた。
その中でも、個人的に大切にしたいと思うバリューとして、
真っ先に浮かんだのが、「しみ出しはみ出し」だった。

>「しみ出しはみ出し」
自分の意識と行動を、当事者として事業と組織全体に向ける。
職務や部門を超えて自分ごと化することで、事業と組織の成長を牽引する。

字面だけ読むといかにもベンチャーらしい
人にとっては「うっ」と身構える人もいるかも、といったバリュー。
自分の行動を振り返っても、積極的に体現してきたわけではないので、
「これが重要だろ！」と声高々に言える側の人間でもないが、
あえて自分の考えを文字に起こしてみる。

# 大切にしたいと思った理由

3年間スタンバイで働いてきて、有難いことに多くの役割と成長機会をいただいた。
挑戦もさせていただき、失敗も多く、その度にフィードバックも得られた。
その中でいまいち煮え切らない感覚があった。

「果たしてスタンバイにとって、自分は必要なんだろうか」

決して評価が悪いわけではない。
一定、信頼されて、任せられてきた実感もある。
でも振り返ると、日々の業務の中で自分が必要とされている感覚を持つことが、あまりない。

なぜなのか。
それを辿った際に１つ見えたものが、まさに「しみ出しはみ出し」に繋がった。


「自分のやりたいことに誰かがのってくる」
「誰かがやりたいことに自分がのっていく」
この連帯感を感じることが少ない。

自分のミッションを自分で考えて実行してやり遂げる。だけでなく、
誰かのミッションに共感して一緒に実現まで進めることが、あまりなかった。

当然自分自身の問題も多い。環境にも問題があるだろう。
リモートワーク体制真っ只中だったことも災いする。
* 誰が何をやっているのかがわからない
* 進捗がわからない
* 協力の意思を伝えるタイミングがない
* 自分の業務で忙しい
等、色々な要因がある。


会社を問わずどんな組織でも、どこかのタイミングで組織課題として挙がることがあると思う。ただこれを仕組みや制度で実現するのは難しい。
一方的な啓蒙活動では浸透しないような気がする。
だからこそ、相互にギブ＆テイクをしながら、こういう機会を増やしたい。

>自分がやりたいことに、みんなが力を貸してくれる。
>自分も誰かがやりたいことに力を貸したい。

感謝と貢献の種が飛び交う組織ができると、
より活動的な組織/クリエイティブな事業が作れるのではないか。
まずは自分からと思い、このアドベントカレンダーの企画に参加した。


# この記事で伝えたいこと
ここからは自分がやるから、みんなもどう？という話。
※前置きとして、バリュー作成者の意図と異なっていたら申し訳ございません。

しみ出しはみ出しが体現できるシーンは、なにも大掛かりなプロジェクトに限らない。
全社PJTに参加しないと！とか、そんなに人はいきなり変われない。
なので、まずは日頃のコミュニケーションから変えていきたい。

例えば、自分がリクエストを受けた際の返信で、
これまでよりも一歩踏み込む機会を増やしたい。

「Yes/No」ではなく、「Yes/No, but〜」
どういう方法であれば、相談をくれた人により多く貢献できるのかを一緒に考えたい。

相互に頼りやすく、信頼できる組織。
それにより優れたアイディアが生まれ、事業の成長を加速する。
これこそが今のスタンバイのフェーズで働く、面白さなんじゃないかと思う。
Brainでlinux(その0)-用意する物

# 準備する物
1) 実機(SH2、A9200)をメルカリで入手
2) OTGケーブル、公式HPで紹介されているものの他に次でも動作確認済み(https://www.amazon.co.jp/microUSB-MicroUSB-Micro-マイクロUSB-スマートフォン/dp/B08PRS98RG/ref=mp_s_a_1_1?crid=2AOBES0BT32X2&keywords=Rosebe+充電+しながら+USB+機器+データ+通信+可能+microUSB+接続+OTG+ハブ+ケーブル+USB+3ポート+MicroUSB+1ポート+4+in1+Micro+USB+アダプター+マイクロUSB+分配器+OTG+ハブ+スマートフォン+タブレット&qid=1700054231&sprefix=rosebe+充電+しながら+usb+機器+データ+通信+可能+microusb+接続+otg+ハブ+ケーブル+usb+3ポート+microusb+1ポート+4+in1+micro+usb+アダプター+マイクロusb+分配器+otg+ハブ+スマートフォン+タブレット%2Caps%2C203&sr=8-1)
3) キーボード(無いと不便)
4) マウス(有ると便利)
5) usb-lan変換アダプター(必須)
6) 8〜32GBのmicroSDカード(必須)
win11にアプデしたらブルスク（DRIVER_POWER_STATE_FAILURE）が発生したのを解決した備忘録

同じ現象が起きた誰かのために、備忘録として残したいと思います。

## 発生した事象
windows10から11にアップデートして、しばらく使用していると、ブルスクが発生するようになった。
エラーコード：DRIVER_POWER_STATE_FAILURE
電源管理に関するエラーらしい

## 解決した手順
https://qiita.com/honma-h/items/62633cd9b87ef49fe837

1\. 上記記事を参考に、"storahci.sysが原因"と分かった（大変助かりました・・・！！）
![b78a8013-63cc-4af8-a18c-79d39251921c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549684/57dd76a4-9536-41b9-709b-8343f5b19068.png)

2\. 提案された解決方法を元に色々試したが解決しなかった（レジストリのデータ変更など）

3\. Xで海外の人が、「電源管理のHDDスリープ時間をOFFにすればいい」とポストしていたのを発見

4\. 実行、とりあえず解決した
![スクリーンショット 2023-11-30 183148.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549684/06d07673-8835-e043-03a3-4dd8f328223f.png)

![スクリーンショット 2023-11-30 183028.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549684/c75568b0-24ef-26f9-ddb8-3316a8c0db80.png)

## まとめ
・解決した事例を、Xでポストしてくれる人はまじで助かる・・助かりました。
・今回直接的に関係は無かったですが、windowsをアプデするときは、新規インストールする形で導入したほうが良いなと思った。（自作PC）
元素種Oを含むPOSCARファイルのパスのみ抽出（ログ）

## 目的
多原子イオンを含まない酸化物において，酸素のみではどういう構造になっているのかを確かめる．


## 目標
元素種O（酸素）を含むPOSCARファイルのパスのみを抽出する．


## 参考
過去ログ<sup>[1]</sup>を参考に行った．
[1] 元素種C，Oを含むPOSCARファイルのパスのみ抽出（ログ）- Qiita


## スクリプトの説明
* get_O_existed_poscar_path_list.py<sup>[1]</sup>
    * 入力：poscar_existed_file_path_list.npy 
    * 出力：O_existed_poscar_file_path_list.npy，O_existed_poscar_folder_path_list.npy




[1] https://github.com/k-morii-toridai/scripts_get_O_existed_poscar_path_list.git


## スクリプト実行の流れ
シェルスクリプトを実行する．：
* get_O_existed_poscar_path_list.sh


このシェルスクリプトは，以下の順にスクリプトを実行している．
1. get_poscar_existed_path_list.py<sup>[1]</sup>
2. get_O_existed_poscar_path_list.py<sup>[1]</sup>


## 詳細ログ

```terminal
pwd
```
/mnt/ssd_elecom_black_c2c_480G/scripts


```terminal
sudo git clone https://github.com/k-morii-toridai/scripts_get_O_existed_poscar_path_list.git
```
Cloning into 'scripts_get_O_existed_poscar_path_list'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 1), reused 6 (delta 1), pack-reused 0
Receiving objects: 100% (6/6), done.
Resolving deltas: 100% (1/1), done.


```terminal
cd scripts_get_O_existed_poscar_path_list/
ls -CF
```
get_O_existed_poscar_path_list.py*  get_O_existed_poscar_path_list.sh*  get_poscar_existed_path_list.py*


```terminal
time sudo ./get_O_existed_poscar_path_list.sh
```
Now getting poscar folder sub path list!!!
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████| 507142/507142 [07:57<00:00, 1063.08it/s]
len(poscar_existed_file_path_list): 308325
Both poscar_existed_file_path_list and poscar_existed_folder_path_list were saved as .npy
len(poscar_abs_path_list_loaded): 308325
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████| 308325/308325 [12:30<00:00, 410.58it/s]
len(O_existed_poscar_file_path_list): 222650
O_existed-poscar file, and folder path list were saved as .npy!!!

real    21m45.402s
user    0m0.250s
sys     0m0.673s


これより，POSCARファイル308325件の内，元素種Oを含むものは，222650件であることが分かった．


```terminal
ls -CF
```
O_existed_poscar_file_path_list.npy*    get_O_existed_poscar_path_list.py*  get_poscar_existed_path_list.py*    poscar_existed_folder_path_list.npy*
O_existed_poscar_folder_path_list.npy*  get_O_existed_poscar_path_list.sh*  poscar_existed_file_path_list.npy*
Pythonで「Pythonにおけるインデントを使ったブロックの定義」の動作を確認してみた

# 概要

Pythonで「Pythonにおけるインデントを使ったブロックの定義」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/python/if/index2.html

# 実装

以下のファイルを作成しました。
```sample.py
if True:
    print("ブロック内の処理1-1")
    print("ブロック内の処理1-2")
    if True:
        print("ブロック内の処理2-1")
        print("ブロック内の処理2-2")
        if True:
            print("ブロック内の処理3-1")
            print("ブロック内の処理3-2")
```

以下のコマンドを実行しました。
```
$ python3 sample.py 
ブロック内の処理1-1
ブロック内の処理1-2
ブロック内の処理2-1
ブロック内の処理2-2
ブロック内の処理3-1
ブロック内の処理3-2
```

# まとめ

何かの役に立てばと。
ネットワークスペシャリスト落ちてました

# 今更
今年の4月に受験したネットワークスペシャリストは不合格でした。
来年度の申し込みがあと2ヶ月ほどに迫っているのでリベンジのためにここらで今年の反省と来年への対策を記しておこうと思います。

## 反省
私は今年初めてネットワークスペシャリストを受けました。
事前情報として、セキュリティ周りは頻出であることと無線はやっておいた方が良いという情報を得ていました。
ということで、セキュリティ周りを中心に勉強を進め、そのほかは業務でも扱う範囲がそれなりにあったので力を入れてやるというよりはまんべんなく問題をこなすという進め方をしていました。
ですが、これが今思えば甘かった。
業務で扱う範囲がそれなりにあったとはいえ細かいポイントでは全く触ったことないもの、さらに言えば触ってはいるものの業務においては全く意識が向いていないものがあるということを自覚できていませんでした。

- 業務で全く触ったことないもの → マルチキャスト、HTTP/2
- 触っているとは言いつつ全く意識が向いていないもの → スパニングツリー、メール

## 来年に向けて
今年の取りこぼしはまず抑えに行く。

```:キーワード
- マルチキャスト
    - IGMP
    - Denseモード、Sparseモード
    - PIM-DM、PIM-SM
- HTTP/2
    - HPACK
    - ストリーム
    - サーバープッシュ
- スパニングツリー
    - BPDUフレーム
    - CST,PVST+
- メール
    - MIME
```

逆に冗長化や仮想化、L3周りは試験でも落ち着いて解くことできたのでこのあたりの強みは来年度も継続できるようにできればリベンジできるか、、、？

### 来年度ネスペ受ける皆様、ともに頑張りましょう