OmniAICreator/Qiita-1.07M huggingface dataset:
AWS RDS 拡張モニタニングの詳細度を変更する方法

## はじめに
皆さんこんにちは、asmgです。今回は、RDS拡張モニタニングの詳細度（以下、詳細度と呼びます。）をAWS CLIを使って変更してみたので詳細度を変更するに至った背景と詳細度を変更する方法をまとめていきたいと思います。

## 背景
自分のチームでは、AWS RDS 監視を詳細度60秒(default)で拡張モニタニングのデータを取得し、それをDatadogに送りdashboardを使って監視を行っています。
しかし、詳細度60秒だと1分に1回しかデータを送らないのでデータが荒く状況がわかりにくいという課題を抱えていました。
そこで、詳細度を60秒からより短い秒数に変更することでデータが荒いという課題を解決しようということになりました。

## コスト計算
詳細度をより短い時間に変更するとコストがその分増えるので、コストをざっくり計算して問題がないかを確認しました。以下にざっくりとしたコスト計算の方法を示します。

ex) 詳細度60秒→10秒に変更した場合
Cloud Watchのマネコン→ロググループ→拡張モニタニングのロググループを開くと以下のようなページに飛ぶと思います。ページに飛んだら保存されているバイト数を元に計算をしていきます。
![217433454-be2d2ab5-0e53-4542-8719-9cb9aae1ccaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567360/4de5a263-105b-23bd-bf17-3e38d21fcd09.png)

### 計算のsample

<b><現状のコスト></b>

3.45GB(保存されているバイト数) * 0.76(CloudWatchの収集の単価) = $2.622 (データ収集コスト)

3.45GB(保存されているバイト数) * 0.033(CloudWatchの保存の単価)  =$0.114 (保存のコスト)

合計 $2.736(月)

<b><詳細度を60秒→10秒に変更した場合のコスト>

現状のコストの6倍になるので

3.45GB * 6倍     = 20.7GB (保存されているバイト数)

20.7GB * 0.76    = $15.732 (データ収集コスト)

20.7GB * 0.033  = $0.68 (保存のコスト)

合計 $16.415(月)

今回は$13.679の差額しかなかったので詳細度をより短い時間に変更する選択を行いました。

ref: [Amazon CloudWatch 料金表](https://aws.amazon.com/jp/cloudwatch/pricing/)

## 詳細度を変更する方法

今回は以下のDBクラスターを使って詳細度の変更方法を紹介したいと思います。
![____________________________2023-03-08_11.42.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/567360/dc5dc73f-5d15-59c7-2c69-bb8bad06f37d.png)

### (1) 現状のRDSの詳細度を確認する

```terminal:terminal
❯ aws rds describe-db-instances --db-instance-identifier database-1-instance-1 --query 'DBInstances[].MonitoringInterval'

----出力結果----
[
    60
]
```

:::note info
※`--db-instance-identifier`には`DBインスタンス名`を入れます。
:::
出力結果を確認すると該当のDBインスタンスは詳細度60になっていることがわかります。

### (2) 詳細度を変更するために必要なMonitoringRoleArnを取得する

```terminal:terminal
❯ aws rds describe-db-instances --db-instance-identifier database-1-instance-1 --query 'DBInstances[].MonitoringRoleArn'

----出力結果----
[
    "arn:aws:iam::hogehoge:role/rds-monitoring-role"
]
```

RDS IAMロールのARNを取得できたので詳細度をあげていきたいと思います。

### (3) 詳細度を変更する

```terminal:terminal
❯ aws rds modify-db-instance \
    --db-instance-identifier database-1-instance-1 \
    --monitoring-interval 10 \
    --monitoring-role-arn arn:aws:iam::hogehoge:role/rds-monitoring-role
```
上記のコマンドを実行することで詳細度を変更ことができます。
最後に詳細度が上がっているかを確認します。

以下のコマンドを実行して詳細度が上がっていれば成功しています。
```terminal:terminal
❯ aws rds describe-db-instances --db-instance-identifier database-1-instance-1 --query 'DBInstances[].MonitoringInterval'

----出力結果----
[
    10
]
```

## まとめ
本記事では、RDS拡張モニタニングの詳細度をAWS CLIを使って変更する方法を背景を含めてまとめました。RDSを監視する際にはログの頻度が重要であり、ログを取得する上でのコストを比較することが不可欠です。もし、RDS拡張モニタニングの詳細度を変更させる際には、本記事のコスト計算や変更方法が参考になると幸いです。
EloquentのModelクラスを継承したクラスは依存性注入しなくていい？

## Why
Laravelを初めて勉強し始め、Model周りのクラスをインスタンス化せず使えることがわかりました。その理由ついて勉強しました。

## 答え
Modelクラスは、Eloquent ORMと共にデータベーステーブルとマッピングされます。これにより、Modelクラスのインスタンスは、データベースクエリビルダやORM機能を使用して、データベース操作を行うことができます。

## 理由
Eloquent ORMはLaravelのService Containerを使用して、Modelクラスに関連する依存関係の注入を処理します。Service Containerは、Laravelアプリケーションで使用されるすべてのオブジェクトを管理し、オブジェクトの生成、注入、解放などを自動的に処理することができます。

## 依存性注入とは？

依存関係の注入は、Service Containerを使用して、クラスインスタンスが必要とする他のオブジェクトを外部から注入することによって実現されます。これにより、モデルクラスは、データベース接続、キャッシュ、ルーティングなど、他のオブジェクトに対する依存関係を直接処理する必要がなく、外部から注入して使用することができます。
Googleデジタルマーケティング＆Eコマース：顧客ペルソナを作る練習

# はじめに

”Googleデジタルマーケティング＆Eコマース プロフェッショナル認定証"　の受講が完了しました(2022/3/3)。私がこのコースから得られた素晴らしい体験を、テーマごとに分割して、わかりやすくご紹介しています。興味を持たれた方は、是非下記を受講してみてください。

https://jp.coursera.org/professional-certificates/google-digital-marketing-ecommerce

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/84e33f4e-81cb-98a6-4546-f2ec06fd8b8b.png" width="800">

# ペルソナの紹介

ペルソナは、望ましい顧客層における類似した人々のグループを表します。彼らは、より大きなユーザーグループのニーズを表す目標や特性を持つ架空のユーザーです。

ペルソナは、製品やサービスを購入する可能性が最も高い人たちに向けて、マーケティング資料を重点的に作成するのに役立ちます。

ほとんどのビジネスでは、複数のタイプの顧客を抱えているため、ターゲットとする顧客を正確に把握するために、複数のペルソナを作成するのが一般的です。
- 各ペルソナは、組織のターゲットグループの1つに属する個人を表しています。
- ターゲット・グループとは、同じような興味、目標、または懸念を持つ人々の集合体です。

この後のアクティビティでは、2つのペルソナを作成する練習をします。

# ペルソナに含まれるもの

| 要素  | 内容  | 
| :--- | :--- | 
| 誰 | 架空の人物の名前、年齢、居住地、世帯、学歴を含む簡単な説明を記入します。また、写真も添えます。これらの詳細により、実際のお客様を代表する人物を容易に想像することができます。 | 
| 目標 | その人物が達成したいことを記述します。これには、お客様の生活や製品・サービスに当てはまる、関連するいくつかの目標を含めるとよいです。 | 
| 障壁 | 目標の達成を妨げている問題点（ペインポイント）を明らかにします。 | 

:::note info
より多くの情報を含めると便利な場合があります。例えば、性格、趣味、価値観、ライフスタイルなどを詳しく記載することができます。より多くの情報を含めることで、お客様をより深く理解することができます。
:::

# カスタマーの調査

正確な顧客ペルソナの作成は、まず調査から始まります。
- 年齢、居住地、世帯、学歴、職業などの人口統計データを含む、顧客に関するデータが必要です。
- お客様の目標や障壁を説明するデータも必要です。

企業は、分析ツール、顧客インタビュー、調査、フォーカスグループ、その他の調査方法を用いて、この種のデータを収集します。

以下は、顧客データを収集するために行う質問の例です。

- あなたの年齢は？
- あなたの学歴は？
- どこに住んでいますか？
- 誰と一緒に住んでいますか？
- あなたの職業は何ですか？
- 平日の主な活動内容は？週末はどうですか？
- あなたはどのような問題に直面していますか？
- あなたが最も大切にしていることは何ですか？
- あなたの目標は何ですか？

また、質問内容は、自社の製品やサービスに特化したものにする必要があります。

# グルーピング

すべてのデータを収集・集計したら、傾向をつかんだり、似たような回答をまとめたりして、データを整理する必要があります。そして、収集したデータを基に、ターゲット層の各グループを代表する架空のペルソナを作成します。

# ペルソナ例

以下の例は、キャンプテントを販売している会社のペルソナです。調査によると、

- 顧客の大半は30代半ばから50代半ばの、2～3人の子供を持つ保護者

であることがわかりました。また、お客様の目標や障壁を調査し、その回答からお客様がいくつかのグループに分類されることがわかりました。そして、この調査から得られた情報をもとに、それぞれのグループを代表するペルソナを作成しました。

### ペルソナ１

| 要素  | 内容  | 
| :--- | :--- | 
| 誰 | Antonio Weberは、3人の幼い子供を持つ35歳の父親である。電気技師で準学士号を持ち、郊外に住んでいる。 | 
| 目標 | 3人の子供たちとアウトドアへの愛を分かち合うこと。<br>数年間使用できる、大きくて手頃なテントを購入すること。 | 
| 障壁 | 子供たちが小さいので、一人でテントを張れるか心配である。 | 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/a1787efd-8310-be15-1385-a436dc95900f.png" width="750">

### ペルソナ2

| 要素  | 内容  | 
| :--- | :--- | 
| 誰 | Juliana Sotoは、50歳で、大学生の娘を2人持つ親です。彼女は学士号を持つ保険代理店で、都会に住んでいる。 | 
| 目標 | 家族で米国を横断する1ヶ月間のロードトリップを手頃な価格で計画すること。　<br>あらゆる天候で家族を濡らさず保護できる防水テントを見つけること。 | 
| 障壁 | 以前の経験による暴風雨の間にテントが漏ることについての心配である。 | 

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/2c406461-6470-9d5f-27dd-4ad7f59fdd8e.png" width="750">

# ペルソナが違いを生む理由

ペルソナは、実際の顧客に関する調査や情報に基づいていることを忘れてはいけません。調査に基づいた正確なペルソナは、ターゲットとなる顧客とより密接な関係を築くのに役立ちます。

ペルソナを作成することで、顧客の視点から仕事に取り組むことができるようになります。マーケティングメッセージ、ブランドボイス、Eメールやソーシャルメディアでのキャンペーンは、すべてお客様をより深いレベルで理解することで恩恵を受けることができるのです。
【Ubuntu】サクッとファイルとディレクトリの権限を特定の人だけに付与する備忘録

ファイルを読み書きさせたいユーザが複数いる場合に、ユーザグループを作って権限を付与させる方法の備忘録です。

以下は、今回のシチュエーションです。
- 企業NのUbuntuサーバにアクセスできるユーザが４つある（sudo実行権あり管理用「userX」１個、一般ユーザA〜C「userA〜C」計３個）
- ある特定のディレクトリに、一般ユーザA、一般ユーザBのみ書き込み権限を付与したい（その他は読み取りと実行のみ許可。ユーザCは故意にファイルを書き込めないようにする）
- **パーミッション777（=その他ユーザ含む誰でもファイルを書き込める）は避けたい**（危ない）。

この記事に記載のコマンドは、rootまたはsudo実行権のあるユーザ（「userX」）で実行するものとして書いています。

# ユーザグループの作成

```bash
$ sudo groupadd -g GID GROUP
```

```bash:例
$ sudo groupadd -g 99 group1
```

# 作成したグループへユーザを追加

`-aG`オプションでユーザを追加する（`-a -G`と同等）。`-G`のみで実行すると、対象ユーザの所属グループがすでにあった場合**追加せずに置き換えてしまうので注意**。

```bash
$ sudo usermod -aG GROUP USER
```

```bash:例
$ sudo usermod -aG group1 userA
$ sudo usermod -aG group1 userB
...
```

# ファイル／ディレクトリの所有権変更
ディレクトリそのものの所有者をユーザAにしておき、グループの所属をgroupAにする場合。
`-R`で再帰的にサブディレクトリの所有権も変更。

```bash
$ sudo chown OWNER:GROUP FILE/DIRECTORY
```

```bash:例
$ sudo chown userA:group1 /hoge/dir/ -R
```

# ファイル／ディレクトリのパーミッションを変更
group1に所属するユーザのみ読み書き実行可能にする。その他のユーザ（ユーザCなど）には書き込ませない。
パーミッションは８進数で記述。

- 読み取り(r)：4
- 書き込み(w)：2
- 実行(x)：1

付与したい内容を加算し、所有者・グループ・その他の順で８進数を繋げる。

```bash
$ sudo chmod PERMISSION FILE/DIRECTORY
```

```bash:例
$ sudo chmod 755 /hoge/dir/ -R
```

補足：`ls -l`コマンドでパーミッション変更が反映されたか確認し、パーミッションが755のファイルであれば「-rwxrwxr-x」、ディレクトリであれば「drwxrwxr-x」と表示される。
経営者層の責任者

# CEO(Chief Executive Officer)
```最高経営責任者```。企業の代表者であり、```企業経営全体の経営責任```を負う。

# COO(Cheif Operating Officer)
```最高執行責任者```。投資意思決定、資金調達・運用といった```財務面や経理面```での責任を負う。

# CTO(Chief Technology Officer)
```最高技術責任者```。```技術戦略や研究開発方針```などを立案し、実行する。

# CLO(Chief Legal Officer)
```最高法務責任者```。企業の```法務```に関する責任を負う。

# 出典
https://gihyo.jp/book/2022/978-4-297-13178-4
WSL上のファイルやディレクトリをGUI(Windows上)で開く方法

どうもこんにちは。
株式会社船井総研デジタルの@fsd_yoshikawaです。
初めてQiitaに記事を投稿させてもらいます。
以後お見知りおきのほどをお願いします。

## 概要
今回は初めてということで極めて小さなTIPSを書かせていただきます。
WSLを使っていて特定のディレクトリ、または __\*.jpg__ などのファイルをWindows上で表示したいと思うことは多いと思いますが、それを簡単に実現する方法を書きます。

## 環境
Windows_version=Windows11 22h2(build22621.1265)
WSL_version=2
```
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.1 LTS"
```

## 手順
WSLを開き、自分のホームディレクトリに存在するご利用のシェルの設定ファイルを開きます。たしかWSLのUbuntuはデフォルトはBashのはずで、その場合.bashrcです。私の場合はZshを使っていますので、この場合.zshrcということになります。

ファイルを開いて冒頭部分に下記のPATHを追加します。

```bash:.zshrc
export PATH=$PATH:'/mnt/c/Windows/System32/WindowsPowerShell/v1.0'
```

これはPowerShellの実行ファイルが存在するディレクトリです。

次に、上記の行より下に下記のaliasを追加します。

```bash:.zshrc
alias open='powershell.exe /c start'
```

これで例えば自分のホームディレクトリに移動した上で`open .`とコマンドを入力すると、WSL上に存在する自分のホームディレクトリがWindows上で開きます。

その他、例えばそこに**test.txt**というファイルが存在するとして`open test.txt`とコマンドを入力すると、WSLホームディレクトリ上の**test.txt**をWindowsで指定しているエディタで開くことができます。画像も同様です。

以上です。
皆さんの快適なターミナル生活を願っています。
Googleデジタルマーケティング＆Eコマース：顧客ペルソナの作り方

# はじめに

”Googleデジタルマーケティング＆Eコマース プロフェッショナル認定証"　の受講が完了しました(2022/3/3)。私がこのコースから得られた素晴らしい体験を、テーマごとに分割して、わかりやすくご紹介しています。興味を持たれた方は、是非下記を受講してみてください。

https://jp.coursera.org/professional-certificates/google-digital-marketing-ecommerce

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/84e33f4e-81cb-98a6-4546-f2ec06fd8b8b.png" width="800">

# ペルソナの調査

ペルソナを作成するには、理想的な顧客についての情報が必要です。ただ推測するだけではいけません。実際のデータが必要です。この情報を収集するためには、調査が必要です。ここでは、そのための方法をいくつか紹介します。

#### 顧客データ
これは、ビジネスがすでにその顧客に関する既存のデータを持っている可能性があります。人口統計、所在地、販売履歴、顧客サービスに関する注意事項など、詳細な情報を得るためにこれを見直します。

#### インタビュー
製品やサービスでの経験について、顧客に直接インタビューすることを検討してください。何がきっかけでその製品にたどり着いたのか、どのように問題が解決されたのか、また適切であれば他の関心事についても情報を収集し、より詳細なペルソナを形成することを検討します。

#### Webデータの分析
ソーシャルメディア上でビジネスを展開している場合、ビジネスアカウントをフォローしている人たちの人口統計学的データがあれば、それを確認します。さらに、Google AnalyticsなどのWebサイト解析では、Webサイト訪問者の年齢や性別などの要素に関するデータを得ることができます。また、ネット上の口コミやコメントも調べておきましょう。これらはペルソナデータを得るための絶好の機会になります。

#### アンケート
既存の顧客にメールでアンケートを送るのは、情報収集の簡単な方法です。しかし、このような方法では、アンケートに参加する人が少ないと感じるかもしれません。そこで、アンケートに答えてくれたお客様の中から1名に無料で何かをプレゼントすることで、アンケートへの参加を促します。

# ペルソナの定義

調査が済んだら、顧客がどのような人であるかを定義します。これには、ペルソナの興味、特徴、そしてデモグラフィックを定義することが含まれます。

デモグラフィックとは、
- 年齢
- 性別
- 収入
- 家族の人数
- 職業
- 学歴
- 居住地
など、お客様に固有の情報です。

例えば、以下のようになります。
- 32歳、子ども2人、大型犬を飼っていて、ハイキングが好きな男性

# ペルソナの目標と障壁

さて、ペルソナの興味、特徴、属性が決まったら、次は目標と障壁を具体的に考えてみましょう。

目標と障壁を作成するには、主にアンケートやインタビューなど、顧客について収集したデータに頼る必要があります。

### 目標
ペルソナの目標については、顧客とその達成したいことを具体的に説明します。このゴールは、製品やサービスに関連するものである必要があります。

例えば、造園業であれば、お客様は
- ***見栄えの良い緑を望んでいます。***

また、データを見直すことで、さらに達成したい目標が見えてきます。***
- ***植木や敷地の手入れをしてもらえるという安心感だけを求めています。***
- ***景観に誇りを持ちたいお客様もいらっしゃいます。***

目標や障壁を設定する際には、データに頼ることになりますが、追加的な詳細を含めてもかまいません。例えば、顧客は一貫して

- ***「景観をよくしたい」***

と回答していたとします。その場合、

- ***「自分の家に誇りを持ちたい」***

と考えていることが推測されます。

### 障壁
お客様が当社に依頼することを妨げているものは何なのかを考えることもできます。ここでも、アンケートやインタビューなどの顧客データを確認します。何か障壁はないでしょうか。

造園業の例から話を進めると、顧客アンケートを確認したときに、いくつかの障壁が繰り返し存在することに気づきました。

- ***「芝生の手入れをする時間がない」***
- ***「手入れをしたことがあるが、きれいになったとは思えない」***
- ***「単に設備がないだけ」***

その会社に依頼することに関する障壁を考えてみましょう。

- ***「過去に質の悪いサービスを受けたため、造園会社を信用していない」***

# ペルソナを作成する

デモグラフィック・データ、目標、障壁が揃ったところで、それらの情報を組み合わせてペルソナを作成します。

造園の例で説明すると、次のようなペルソナが考えられます。 

- ***都会に住む55歳の女性で、小さな庭を持っています。彼女は5年間、自分の庭の手入れをしてきましたが、現在は時間がありません。***
- ***30歳の新築の住宅所有者です。 彼らはこれまで造園の仕事をしたことがなく、郊外に引っ越してきたばかりです。***
- ***地方に住む27歳の予算重視の賃借人です。彼らは、自治会の要求に合わせて、基本的な造園を施そうとしています。***

# ペルソナ活用のベストプラクティス

さて、このペルソナをどのように活用すればよいのでしょうか？ベストプラクティスは、ペルソナをすぐに利用できる状態にしておくことです。

マーケティング資料を作成するときは、常にすべてのペルソナを検討しましょう。

- ***<font color="MediumBlue">誰にアプローチしようとしているのか？</font>***
- ***<font color="MediumBlue">彼ら・彼女らにとって、魅力的なビジュアルは何か？</font>***
- ***<font color="MediumBlue">彼ら・彼女らにとって、魅力的なメッセージは何か？</font>***
- ***<font color="MediumBlue">彼ら・彼女らは、どのようなオンライン・プラットフォームで時間を過ごしているのか？</font>***

:::note info
顧客ペルソナは大変な作業に思えるかもしれませんが、それだけの価値があります。成功するマーケティングは、顧客をよく知ることから始まります。
:::
在庫評価額の計算

# 在庫評価額
決算や毎月の損益計算をするために、```在庫として抱えている商品を金額として算出```したものである。
# 出典
https://www.weblio.jp/content/%E5%9C%A8%E5%BA%AB%E8%A9%95%E4%BE%A1%E9%A1%8D#:~:text=%E6%B1%BA%E7%AE%97%E3%82%84%E6%AF%8E%E6%9C%88%E3%81%AE%E6%90%8D%E7%9B%8A%E8%A8%88%E7%AE%97%E3%82%92%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E3%80%81%E5%9C%A8%E5%BA%AB%E3%81%A8%E3%81%97%E3%81%A6%E6%8A%B1%E3%81%88%E3%81%A6%E3%81%84%E3%82%8B%E5%95%86%E5%93%81%E3%82%92%E9%87%91%E9%A1%8D%E3%81%A8%E3%81%97%E3%81%A6%E7%AE%97%E5%87%BA%E3%81%97%E3%81%9F%E3%82%82%E3%81%AE%E3%81%A7%E3%81%82%E3%82%8B%E3%80%82

# 先入先出法
棚卸資産の評価や原価計算をする際、```先に仕入れた物品から先に払い出された```と仮定する方法。英語表記「First In, First Out」の略で「FIFO」と呼ばれることもあります。
# 出典
https://www.smd-am.co.jp/glossary/YST2901/#:~:text=%E6%A3%9A%E5%8D%B8%E8%B3%87%E7%94%A3%E3%81%AE%E8%A9%95%E4%BE%A1%E3%82%84%E5%8E%9F%E4%BE%A1%E8%A8%88%E7%AE%97%E3%82%92%E3%81%99%E3%82%8B%E9%9A%9B%E3%80%81%E5%85%88%E3%81%AB%E4%BB%95%E5%85%A5%E3%82%8C%E3%81%9F%E7%89%A9%E5%93%81%E3%81%8B%E3%82%89%E5%85%88%E3%81%AB%E6%89%95%E3%81%84%E5%87%BA%E3%81%95%E3%82%8C%E3%81%9F%E3%81%A8%E4%BB%AE%E5%AE%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%80%82%E8%8B%B1%E8%AA%9E%E8%A1%A8%E8%A8%98%E3%80%8CFirst%20In%2C%20First%20Out%E3%80%8D%E3%81%AE%E7%95%A5%E3%81%A7%E3%80%8CFIFO%E3%80%8D%E3%81%A8%E5%91%BC%E3%81%B0%E3%82%8C%E3%82%8B%E3%81%93%E3%81%A8%E3%82%82%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82

# 期末在庫
期末在庫とは、```決算の最後の日に残っている在庫```のことです。
# 出典
https://www.shiraishi-co.info/blog/?p=4026#:~:text=%E6%9C%9F%E6%9C%AB%E5%9C%A8%E5%BA%AB%E3%81%A8%E3%81%AF%E3%80%81%E6%B1%BA%E7%AE%97%E3%81%AE%E6%9C%80%E5%BE%8C%E3%81%AE%E6%97%A5%E3%81%AB%E6%AE%8B%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E5%9C%A8%E5%BA%AB%E3%81%AE%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82

# 期首在庫
期首在庫とは、「```前期末の在庫をそのまま翌年の期首に繰り越したもの```」をいいます。

この期首在庫は期首商品棚卸高とも呼ばれます。

# 出典
https://www.zaico.co.jp/zaico_blog/what-is-beginning-inventory-explain-about-basic-knowledge-and-relationship-to-cost-of-sales-and-gross-profit/#:~:text=%E6%9C%9F%E9%A6%96%E5%9C%A8%E5%BA%AB%E3%81%A8%E3%81%AF%E3%80%81%E3%80%8C%E5%89%8D,%E3%81%A8%E3%82%82%E5%91%BC%E3%81%B0%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82

# 気づき
期末在庫の分残っていたからそれを差し引いて、数量＊単価すれば計算すればよかったのか。
Vimについて

## この記事の読者対象

* 高速でプログラミングをしたい方
* キーボードだけでコードを書きたい方

## Vimとは何ぞや？

**Vim**とは世界でも広く使われているテキストエディタの拡張版です。
Vimには根強いファンがおり、Vim使いの事をVimmer（ビマー）と呼びます。
ボマーみたいですね。元ネタを知らない方はハンターハンターを今すぐ見て下さい。

## Vimの特徴

* **コマンドを利用することで様々な操作を高速に実施することが可能**
* **キーボードから手を離すこと無くほぼ全ての操作が可能**

めちゃくちゃいいですよねぇ。
私はコードを書くときにマウスでフォルダを開き、ファイルを開きとしていました。
ですが、エンジニアさんがキーボードだけでファイルを開いて編集したりしていたので、私はなぜその方法でコードを書くのか聞きました。
エンジニアさん曰く、
「特殊なテキストエディタなので、色々な事を覚えないといけませんし、使い慣れるまでとても時間がかかります。しかし、高速にテキスト編集が出来ますよ！」
と仰ってましたが、その時はお恥ずかしながらちんぷんかんぷんで最近になってようやく理解が進んできました。
今はできるだけ、vimコマンドをうってコードを書くようにしています。

その時に必要なvimショートカットキーがあります。
ここが普通のショートカットとは違い、一癖ありますので実際に使ってみて便利だったと思ったコマンドを紹介したいと思います！


## vimショートカットまとめ

`vim ファイル名`　ファイル編集
`i`でその場でインサートモード
`a`で直後の文字にインサートモード
`Esc`でインサートモードから抜け出す
`:wq`で保存終了
`:q`で保存せずに終了
`x`でカーソル下の文字を削除

`/`で検索
`h左、j下、k上、l右`vim移動
`gg`で最初の行、`G`で最終行にジャンプできる(`home,end`でも可能)
`ctrl-f`で1ページ後、`ctrl-b`で1ページ前に移動
`大文字のH、M、L`はそれぞれ画面の最上部・真ん中、最下部の行にカーソルを移動する
=でその行のインデント位置を自動修正できる
`u`でアンドゥ、`ctrl+r`でリドゥ
`dd`で行全体を削除
コマンドモード時に`Shift + V`と入力すると行が選択される。 そして、`d`と入力すると削除
`yyp` (コピペ) と `ddp` (カットしてペースト) を覚えた

**vimのモード**
* ビジュアルモード (vキー) がたぶん初心者に一番わかりやすい
* インサートモード (iやaキーなど)
* ノーマルモードは基本となるモード
* コマンドモード (:) で各種コマンドを実行
* オペレータとモーション
* vimのキー(主にノーマルモードについて)は、大きく分けて「オペレータ」と「モーション」の2種類がある。これを把握することが大事。

``` 
オペレータ: 動詞として動作を指定する。主要なものは4つなのでここから覚えよう
モーション: 対象範囲を指定する
```

オペレータは意味のあるキーバインドになっているので、以下のような感じで覚える
```
c : change (変更)
d : delete (削除)
y : yank (ヤンク: コピーと同義)
g : go (移動全般)
```
ノーマルモードでは基本的に最初にオペレータを入力し、その後に範囲指定を行う(CUI的発想)が、ビジュアルモードでは範囲を最初に選んでそれからオペレータを入力する (GUI的発想)という違いがある。

## さいごに
備忘録も兼ねて書きました。
Vim、使いこなせるように頑張ります(ー ー)!
多次元配列のデータ格納

# はじめに
多次元配列にデータを格納するときの注意点を残します

### 今回の背景
以下の２つのransack検索結果から、[[名前, 会社名], [名前, 会社名], [名前, 会社名]]ような１つの配列を作成したい
```
Product.preload(:company).      
  ransack(name_cont_any: keywords, company_id_not_null: true).
  result.
  order(:name).
  map(&method(:format_option))
```
```
Product.preload(:company).      
  ransack(company_name_cont_any: keywords, company_id_not_null: true).
  result.
  order(:name).
  map(&method(:format_option))
```

### 間違えたこと
単純に配列に追加して最後にflattenで揃えようとしていた
```
product_list = IprProductReport.preload(:company).
  ransack(name_cont_any: keywords, company_id_not_null: true).
  result.
  order(:name).
  map(&method(:format_option))

product_list << IprProductReport.preload(:company).
  ransack(company_name_cont_any: keywords, company_id_not_null: true).
  result.
  order(:name).
  map(&method(:format_option)).
  flatten
```

・名前検索の結果→意図した結果になっている
```
[["防犯カメラ", "(B社)"], ["ペットカメラ", "(C社)"]]
```
・会社検索の結果→意図した結果になっていない（階層がflattenによってずれている）
```
[["イヤホン", "(株式会社Bカメラ)",　"セイコー", "(株式会社Bカメラ)", "忍者レフ", "(株式会社Bカメラ)"]]
```
最後にflattenすると、２つ目のransack結果が2個以上あるときに全て1つの配列になってしまう

### 実際に書いたコード
①それぞれのransack結果をproduct_list_nameとproduct_list_company_nameの配列に事前に格納する
②* で配列の要素を展開して１つの配列に格納するように
③.uniqで検索結果の重複を防ぐ
```
product_list_name = Product.preload(:company).      
  ransack(name_cont_any: keywords, company_id_not_null: true).
  result.
  order(:name).
  map(&method(:format_option))

product_list_company_name = Product.preload(:company).      
  ransack(company_name_cont_any: keywords, company_id_not_null: true).
  result.
  order(:name).
  map(&method(:format_option))

[*product_list_name, *product_list_company_name].uniq
    
```

最終的な出力結果
```
[["防犯カメラ", "(B社)"], ["ペットカメラ", "(C社)"], ["イヤホン", "(株式会社Bカメラ)"],　["セイコー", "(株式会社Bカメラ)"], ["忍者レフ", "(株式会社Bカメラ)"]]
```

### スプラット演算子*について
配列の中身を展開して渡すことができる
```
array = [:a, :b] # => [:a, :b]

[*array, :d, :e] # => [:a, :b, :d, :e]
```

配列が空の場合も、階層がずれない
```
product_list_name = [["防犯カメラ", "(B社)"], ["ペットカメラ", "(C社)"]]
product_list_company_name = []
[*product_list_name, *product_list_company_name].uniq

# => [["防犯カメラ", "(B社)"], ["ペットカメラ", "(C社)"]]
```

# 参考資料
[Rubyの配列展開（*[:a, :b, :c]）をJavaScriptでもやりたい](https://takagi.blog/how-to-do-splat-operator-of-ruby-in-javascript/)
【TypeScript】オプショナルチェーン

## 内容
TypeScript、JavaScriptのオプショナルチェーンについてふんわりとしか理解していなかったのでメモとしてまとめておきたいと思います

## オプショナルチェーンとは？？
`TypeScriptのオプショナルチェーンは、オブジェクトや配列のプロパティやメソッドが存在するかどうかを確認するための機能です。オプショナルチェーンを使用すると、undefinedやnullの値が混入している場合でも、安全にプロパティにアクセスできます。`です。

* オブジェクトの場合
以下のようなオブジェクトがあるとします。
```typescript
const user = {
  name: 'Alice',
  address: {
    street: '123 Main St',
    city: 'New York',
    country: 'USA'
  }
};
```

ここで、`user.age`にアクセスすると、存在しないので当然エラーが発生してしまいます。
そこで使用されるのがオプショナルチェーンです。
userの中に存在するのかチェックするので`user?.xxx`という書き方になります。
console.logで確認してみると、
```typescript
console.log(user?.age); // undefined
```
`user.age`は存在しないので`undefined`が返ってきます。

このようにコードを簡略化でき、undefinedやnullチェックを手動で行う必要がなくなります。
[js] スクロールに合わせて連動するnavigation


スクロール連動でcomponent監視してwindowの真ん中にきたら連動させたいとかよくありますよね。
毎回やり方忘れるのですが、Observer api使うやり方の忘備録です。

# こんなやつ
<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="KKxyzgL" data-user="yuito118" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/yuito118/pen/KKxyzgL">
  Untitled</a> by yuito118 (<a href="https://codepen.io/yuito118">@yuito118</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

# 考え方
1. 監視対象のhtml要素にidを持たせる
2. 連動させたいものにも`${id}-linked`みたいなidを持たせる
2. observer apiに渡す。
2. 検知されたときに${id}-linkedに.activeをつける

# 画面の真ん中に来た時を検知するには
まずは仕様の確認。

https://developer.mozilla.org/ja/docs/Web/API/Intersection_Observer_API
## option
#### root: null | (Element or Document)
default = null(今見てるwindow)
> ターゲットが見えるかどうかを確認するためのビューポートとして使用される要素です。指定されなかった場合、または null の場合は既定でブラウザーのビューポートが使用されます。
#### rootMargin: DOMString
default = "0px"
> root の周りのマージンです。 CSS の margin プロパティに似た値を指定することができます。例えば、"10px 20px 30px 40px" (top, right, bottom, left) のようなものです。この値はパーセント値にすることができます。この一連の値は、交差を計算する前にルート要素の範囲のボックスの各辺を拡大または縮小させることができます。既定値はすべてゼロです。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/787586/50d0d2b6-3517-769f-006d-5496e66b26ab.png)
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/787586/c83672d8-191d-4011-a4ce-a7a15f41c5d2.png)


#### threshold: (double or sequence<double>)
default = 0
>単一の数値または数値の配列で、ターゲットがどのくらいの割合で見えている場合にオブザーバーのコールバックを実行するかを示します。見える範囲が 50% を超えたときのみ検出する場合は値 0.5 を使用します。 25% を超える度にコールバックを実行する場合は、 [0, 0.25, 0.5, 0.75, 1] という配列を指定します。既定値は 0 です（つまり、 1 ピクセルでも表示されるとコールバックが実行されます）。 1.0 の値は全てのピクセルが見えるようになるまで、閾値を超えたとはみなされないことを意味します。

## 実装
```typescript
const observer = new IntersectionObserver(
  // callback
  (entries) => {
    entries.forEach((entry) => {
      if (entry.isIntersecting) {
        // 交差検知
        toggleActive(linkedElement)
      }
    })
  },
  // option
  {
    root: null,
    rootMargin: '-50% 0px',
    threshold: 0,
  }
)

const watch = (id: string) => {
  const section = document.getElementById(id)
  const linkedElement = document.getElementById(`${id}-linked`)
  if (!section || !linkedElement) return

  observer.observe(section)
}
```
デフォルトの設定`{root: null, rootMargin: "0px", threshold: 0}`ではwindowに入った瞬間に検知ということですね。
window全画面になっているのでこれを真ん中に縮小してあげれば良いです。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/787586/e017bec3-2045-8340-8861-313b9c982583.png)
VSコードのフォントサイズを大きくしたい！

# 背景
VSコードの文字が小さすぎて何も見えなかったので、もう少し文字サイズを大きくしたいなと思った。

# やったこと
3通りくらいの方法で大きくできるらしいが、私が今回したのは
1. VSコードのメニューバーの「表示」というところを選択
1. 「表示」の中にある「外観」という部分にカーソルを合わせる
1. おそらく下から3番目くらいにある「拡大」をクリック

するといい感じに自分好みのサイズにすることができます。
もちろんショートカットキー（チョチョイとVSコード上でボタンを押すだけで任意の操作ができる）でも変更できるらしいですけど、初学者なんでとりあえずはポチポチしました。

ちなみにショートカットキーは「⌘」キーを押しながら「+」または「-」キーを押してズームインまたはズームアウトできるそうです。

# 感想
めんどくさいけど、色々とショートカットキーで操作できるようになった方が最終的には時短につながると思うので、初学者のみんな（自分含め）も頑張っていきましょー！
新人の学び（環境構築編）

# 初めに


入社４日目の新人エンジニアの物語である。

参照
https://docs.flutter.dev/get-started/install/windows
https://web.yokkaichi-u.ac.jp/yucc/archives/1947
https://akira-watson.com/android/adt-windows.html

# WindowsでFlutterを使うために

**Flutter、Android Studio、Visual Studio、Javaをインストールする必要がある**

【デフォルトインストール先】

（AndroidStudio）C:\Program Files\Android\Android Studio

（SDK）C:\Users[UserName]\AppData\Local\Android\sdk


## 遭遇したエラー

**UserNameが日本語の場合は、SDKインストール時にエラーがでる**
>Cドライブ直下に新規フォルダを作成しそこを指定（ex:C:\AndroidStudio/SDK）

※ AndroidStudio → more setting → Android SDK Locationに上記のパスを指定

**unable to locate Android**
>https://www.youtube.com/watch?v=m93wBD9_EFA
> (ex: flutter config --android-sdk C:\AndroidStudio/SDK)


**android studio not found at C:\Program Files\Android\AndroidStudio**

> https://stackoverflow.com/questions/75103753/android-sdkmanager-tool-found-but-failed-to-run-for-flutter-doctor-android

>```flutter config --android-studio-dir="C:\Program Files\Android\Android Studio```



**XXX has been compiled by a more recent version of the Java Runtime～**

> 原因と解決策
https://rainbow-engine.com/error-compiled-by-more-recent/
https://www.youtube.com/watch?v=6h2jdDdmU3Y

> PATHの設定
https://www.javadrive.jp/start/install/index4.html


**Visual Studio関連**
https://qiita.com/Toshiaki0315/items/adeb29caa4b63051b8ba
PIVをやってみる．part 3 FFT相互相関法で作成

# はじめに
part 1で無料のOpenPIVを試してみたが内部の処理がわからずパラメーターの最適化ができなかった．part 2では直接相互相関法で作成したPIVのプログラムを試したが，上手く渦が計測できた．しかし，処理速度が遅いため，次はFFT相互相関法を試してみる．

# FFT相互相関法
計測時間が前の画像を第1画像，後の画像を第2画像とする．画像を一定のサイズに区切って第1画像と第2画像に同サイズの探査領域を設定する．両方を二次元のフーリエ変換を行い，第2画像の方は複素共役をとる．第1画像をフーリエ変換したものと第2画像をフーリエ変換して複素共役をとったものの積を逆フーリエ変換すると相互相関係数分布となる．FFT(Fast Fourier Transform)を用いることができるのでプログラムは簡単にでき，GPUとの相性がよく高速化に適していると言われている．

# プログラムの作成，結果
OpenPIVと比較するために前回と同様に画像は[PIVChallenge](https://www.pivchallenge.org/)のから1st PIV Challenge (Sept.14-15, 2001, Göttingen, Germany) のCase 3: medium particle density and small particle を使用した．Numpyの関数を用いて二次元のFFTをを行った．img_a_trimとimg_b_trimは同じサイズ，同じ位置で設定して，同じ粒子が探査領域内で計測できるように粒子の移動量を考えて設定する．前の時間の方はnp.conjで複素共役をとっている．最後に逆フーリエ変換した後に複素成分が残ってしまうため．np.realで実数部を使っている．

```Python
import numpy as np

img_a_trim_fft = np.fft.fft2(img_a_trim)
img_a_trim_fft = np.conj(img_a_trim_fft)
img_b_trim_fft = np.fft.fft2(img_b_trim)
img_ab_trim_fft = img_a_trim_fft * img_b_trim_fft
img_ab_trim_ifft = np.fft.ifft2(img_ab_trim_fft)
img_ab_trim_ifft = np.real(np.fft.fftshift(img_ab_trim_ifft))
```

![B003_1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121335/c005eace-1c01-2806-17c4-5960b6e453f3.gif)

直接相互相関法を用いたpart 2と同様に自作のプログラムでは渦が計測できており，うまくいっている気がする．探査領域を半分にしており4倍の計算負荷がかかるはずだが，一対の画像の計算に3秒程度で早い．2倍の高速化なので今後は並列化などでさらに高速化を目指したい．

![Figure_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121335/db528826-6c1e-737c-c8ca-5f461c0bd65e.png)


# 終わりに
OpenPIVが上手くいかなかったため，PIVの更なる理解のために自分で直接相互相関法のプログラムを作成して，次にFFT相互相関法を試した．Numpyを用いて相互相関係数を求めてPIVをしたが，渦を計測できており，高速化もできた．次回はこれらのプログラムを用いてBOS法(Background Oriented Schlieren)と呼ばれるシュリーレン法を試してみたい．

# 参考
PIVハンドブック，可視化情報学会
[numpy.fft.fft2 — NumPy v1.24 Manual](https://numpy.org/doc/stable/reference/generated/numpy.fft.fft2.html)
Javaを基本からまとめてみた【カプセル化】

## オブジェクト指向三大要素

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939638/1d327f27-7eaa-cb18-bab8-e8a01b60b19e.png)


## カプセル化
- privateやpublicといったアクセス修飾子を用い、外部クラスからのフィールドやメソッドへのアクセスを制御することを『カプセル化』と言う

## カプセル化のポイント
- ミス・悪意によるフィールドの書き換えや意図せぬ用途でメソッドが起動されるなどの外部アクセスによるトラブルを防ぐため、外部に公開する必要のないメソッドは全て隠す。
- 外部にメンバ（特にフィールド）へのアクセスを許す場合も、そのメンバにアクセスするための正式な手続き方法（アクセス用のメソッド）のみを公開する。



## 参考サイト
[【Java-オブジェクト指向】Javaプログラミングの「オブジェクト指向」が絶対理解できる講座【プロ講師が丁寧解説】
](https://www.udemy.com/course/uz-java-obj/learn/lecture/21205574#overview)
[【Java入門】ポリモーフィズムを詳しく解説します。](https://plog.shinmaiblog.com/java-polymorphism/)
React + Material UIの環境構築

# React + Material UIの環境構築

フロントエンドアプリをReact + Material UIで作成する際の環境構築をします。

## 前提情報

### 実施時期

2023年3月  
現在時点での公式Docを読みながら進めます。

### 筆者の知識レベル

フロント触るのは3年ぶり2回目

## 環境構築

実際に環境構築していきます。

### 1. node.jsのインストール

npmが使えなくては生きていけないので、  
[Node.js公式ページ](https://nodejs.org/ja/download/)からインストールします。

執筆時点では18.15.0 (同梱 npm 9.5.0)でした。

インストールしたらnpmコマンドが使えることを確認

```
C:\Workspace>npm -v
9.5.0
```

### 2. Reactアプリのひな形を作成

今回はnpxを使用し、Reactアプリのひな形を作成します。  
typescriptを使いたいので、"--template typescript"オプションを追加します。

```
npx create-react-app <プロジェクト名> --template typescript
```

### 3. Material UIのインストール

[Material-UI公式ドキュメント](https://mui.com/material-ui/getting-started/installation/)を参考に、Material-UIをインストールします。

```
npm install @mui/material @emotion/react @emotion/styled
```

※グループ名がmaterial-uiからmuiに変わっている！！時の流れを感じました。  
私もこの3年の間にいろいろありました。

### 4. 動作確認

React + Material-UIが使えているかを確認します。

#### 4-1. App.tsの編集

デフォルトのApp.tsに、Material-UI由来のボタンを追加してみます。

```ts:App.js
//~~~省略~~~

//import文の追加
import Button from '@mui/material/Button'; 

function App() {
  return (
    <div className="App">
      <header className="App-header">
        //ボタンの追加
        <Button variant="contained">Hello World</Button>
        
///~~~省略~~~
```

#### 4-2. アプリの起動

"npm start"を用いて、アプリを起動します。

```
npm start
```

#### 4-3. ブラウザでの確認

ブラウザで[http://localhost:3000/](http://localhost:3000/)へアクセスし、ボタンが追加されているか確認します。  
以下の画像のように、Reactのロゴマークの上に"HELLO WORLD"のボタンが表示されていれば成功です。おつかれさまでした。

![reactmui.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3213461/cb668451-7d16-4b06-cc5d-53a15f5459ab.jpeg)

## 参考ページ
[Node.js公式ページ](https://nodejs.org/ja/download/)  
[Material-UI公式ドキュメント](https://mui.com/material-ui/getting-started/)
Cox比例ハザードモデル　lifelinesとsksurvの書き方の違い

# データについて
今回使用するデータは```lifelines.dataset```の```load_rossi```です。
したがってsksurvのCox回帰の際に目的変数の形を変換しなければいけません。忘れそうなのでメモっときます。

## lifelines

```python
#data load
from lifelines.datasets import load_rossi
rossi = load_rossi()

from lifelines import CoxPHFitter
cph = CoxPHFitter()
cph.fit(rossi, duration_col='week', event_col='arrest')
cph.print_summary()
cph.plot()
```
lifelinesの場合データをすべてひとまとまりの```DataFrame```でもち、fitの際にdurationのカラムとeventのカラム名を指定するだけでできます。直観的ですね。


## sksurv
sksurvの場合は説明変数は```DataFrame```のままでも大丈夫ですが、目的変数（durationとevent）の形式を```numpy```の構造化配列に変形します。
```python
from sksurv.linear_model import CoxPHSurvivalAnalysis
estimator = CoxPHSurvivalAnalysis()
y = rossi[['arrest','week']] #目的変数 
X = rossi.drop(columns=['arrest','week']) #説明変数

#dtypeの指定 ?はbool型　i8はint64
tp = np.dtype([('arrest','?'), ('week', 'i8')])

structured_y = np.zeros(len(y), dtype=tp)
structured_y['arrest'] = y['arrest']
structured_y['week'] = y['week']
estimator.fit(X,structured_y)
```
Azure VM で "接続しようとしているリモート コンピューターではネットワーク レベル認証 (NLA) が必要ですが、Windows ドメイン コントローラーに接続して NLA を実行することはできません" とでたときの対処法

こんにちは、駆け出しアーキテクトのやまぱんです。

今回は Azure VM で　下記の Error Messageが出たときの対処法です。
> "接続しようとしているリモート コンピューターではネットワーク レベル認証 (NLA) が必要ですが、Windows ドメイン コントローラーに接続して NLA を実行することはできません。 リモート コンピューターの管理者は、[システムのプロパティ] ダイアログ ボックスの [リモート] タブのオプションを使用して NLA を無効にすることができます。"

### 出たシチュエーション
RDP経由でドメイン参加(Azure AD DS) に参加して、一度セッションを切った後に再度RDP使用とすると発生。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/a1f3e0c9-3602-5f79-e737-0712100bf7c7.png)

事前に日本語化していたので、日本語化したことも影響しているかもしれない。(参考にて記載している公式サポートのシナリオに合致しそう。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/96d1ddc1-af21-5678-3cd0-69fa7a405033.png)

ローカルユーザーでもドメインユーザーでも同様のエラー発生。

### 対処した方法

Azure の 実行コマンド スクリプト の機能でNLAを無効化することで無事RDPできるようになりました
* Azure Portal  → 該当 Azure VM  → 実行コマンド → DisableNLA 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/51a702a6-0c4d-dc1e-999f-99d956a3868f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/cf4e4af4-b553-10d5-b7de-242c27fdf215.png)

実行後は Azure Portal から再起動を実施。

### 参考
+ 言語パックインストール時のご留意点
https://jpwinsup.github.io/blog/2022/06/22/UserInterfaceAndApps/LanguageSupport_IME/lp-consideration/

> 言語パックのインストール後に、以下のような問題が発生したとのお問い合わせをいただくことがございます。
> 
> 印刷やプリンターの追加に失敗する。
> タスクバー上の検索ボックスが動作しなくなる
> *****Azure VM にて、言語パックのインストール後、リモート デスクトップ接続に失敗する。*****
> OS の設定画面などが、一部文字化けや、正常な表示とならない。
> OS の動作に必須のサービスが起動しない、または異常終了する場合がある。
> グループ ポリシー エディターを開くと複数のエラー メッセージが表示される

+ RDP を使用して Azure VM に接続するときの認証エラーのトラブルシューティング
https://learn.microsoft.com/ja-jp/troubleshoot/azure/virtual-machines/cannot-connect-rdp-azure-vm

+ Disable Network Level Security on my Azure Virtual machine remotely
https://stackoverflow.com/questions/61914591/disable-network-level-security-on-my-azure-virtual-machine-remotely




今回は実施しませんでしたが、シリアル コンソールから Windows Updateしまくるという解決方法もあるようです。
+ シリアル コンソールで CMD または PowerShell を使用する
https://learn.microsoft.com/ja-jp/troubleshoot/azure/virtual-machines/serial-console-windows#use-cmd-or-powershell-in-serial-console
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/91b50a99-b9be-3a9c-aba1-6debf4313adb.png)
HorizontalPagerでページ送りの向きを逆にする

# 概要
HorizontalPagerを使ったアプリでページ送りの向きを逆にしたい。
イメージとしては

これを
![スクリーンショット 2023-03-09 144254.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2707277/32ac8e68-9ff6-4d14-5cbc-8230a765a160.png)

こうしたい
![スクリーンショット 2023-03-09 144324.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2707277/e0d47cc9-a9e8-2c01-624e-dfb492033917.png)

# 解決法
HorizontalPagerの引数にreverseLayout=trueを渡してやる。![スクリーンショット 2023-03-09 144811.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2707277/db33547d-6ba2-abfc-2aba-e13877ae6f70.png)



# 参考文献
https://google.github.io/accompanist/api/pager/com.google.accompanist.pager/-horizontal-pager.html
PHPStormを使ってみての感想

## はじめに
ここ最近馴染みのあるVSCODEからPHPStormに乗り換えてみました。
結論慣れると非常に使いやすく、もっと使い込んでいろんな恩恵を受けたいと感じています。

良いとは感じるものの機能が多すぎて何がすごいのかよくわからなくなっているので、
今回PHPStormの良いところを調べたのでまとめてみます。

有料のIDEなのでなかなか手出しがしづらい部分もあるかもですが、
ぜひ参考にしてもらえると嬉しいです。

## PHPStormのよいところ

### コード補完機能
PHPStormは、コード補完機能を備えている。
これにより、開発者はコードを高速かつ正確に入力が可能。

### デバッグ機能
PHPStormは、デバッグ機能が非常に優れている。
開発者は、コードを実行しながらブレークポイントを設定し、コードの中に入っている変数や関数の値を監視することができる。

### コード解析
PHPStormは、コード解析機能を備えている。
これにより、開発者はコードの構文エラー、タイプミス、そしてセキュリティ問題を早期に検出することができる。

### コードの自動整形 
PHPStormは、コードの自動整形機能を備えている。
これにより、コードを整理し、一貫性を保つことができる。

### バージョン管理
PHPStormは、バージョン管理システムに対応している。
Git、Subversionなどのバージョン管理システムに対応しているため、開発者はチームでコードを管理することができる。

### プラグイン
PHPStormには、豊富なプラグインがある。
これにより、開発者は、PHP以外の言語やフレームワークにも対応できる。

### ショートカットキー
PHPStormは、豊富なショートカットキーを備えている。
これにより、開発者は作業効率を高めることができる。

## まとめ
これらの機能により、開発者は生産性を向上させ、高品質なコードを迅速かつ効率的に開発することができる。

以上
技術記事コンテストの開催

## はじめに
今回は、f4samuraiエンジニア全体で行った技術記事コンテストの話を行います。

技術記事コンテストとは、社内で使用しているConfluenceに、業務や今までの開発を行った経験で得た知識や考えを記載し、作成された記事を表彰しよう！という試みです。

 

初回の１回目は、テーマは決めず

「今一番みんなに知ってもらいたいことかどうか」
「読んだ人が読んで良かったと思うかどうか」
という評価観点だけ伝えて開催しています。

 

## 開催の理由
技術記事コンテストを行った理由は、技術戦略チームの動きとも関係があります。

https://qiita.com/f4samurai/items/f2ebb3ddee23284a0b08

技術戦略チームでは、エンジニア全員が個人ではなく組織で戦えるエンジニア集団の一員になることを、理念として掲げています。

そして、組織で戦うための最初の段階として、情報の蓄積・共有を各々が行うこと目標にしました。

情報の蓄積や、共有ができると以下のことの実現に繋がります。

* 車輪の再発明を減らし、効率的な開発の実現ができる
* チームごとの課題だけでなく、社内全体の課題に目を向け、個人がよりハイクオリティで生産性の高い開発を行う意識を持つ
* できていること、できてないことを可視化できるため、個人や組織の長期的な成長につながる
* 複雑な事象を言語化できるようになり、大人数での作業を円滑に実現できるようになる

今回、記事コンテストを実施することで、個人の情報蓄積、共有を行う事に対してポジティブなイメージを持ってもらい、まずは情報を蓄積することの習慣づけを行うことを目指しました。

 

## 技術記事コンテストを開催した結果
技術記事コンテストは１ヶ月ほどの期間を用いて行われ、

最後にはエンジニアが集まっての表彰会も行いました。

その結果ですが、

* 社内のエンジニアの1/3が新規記事を執筆
* 記事の内容から派生してより深い議論、情報交換が行えた
* 今まで話す機会がない人と話すことができた
* 会社全体でのエンジニアの一体感を高めることができた

と、様々な技術ノウハウ、業務情報に関する記事が執筆され会社の資産が生まれました。加えて、リモートワーク下ではなかなか行えなかった、同じエンジニアという職種内での情報交換や、今後会話しやすくなるための交流を実現することができました！

 

## 最優秀賞について
コンテストであるため、最優秀賞となる記事も決定致しました！

今回最優秀賞となる記事は

「仕事が楽しくなる!? PJ把握のためのコード読解のコツ」

となりました！

 

内容は、本文を一部抜粋しますと

:::note info
｢普段チケットで触る部分のコードだけではなく､PJのソースコード全体を把握するように立ち回るとお得だよ｣ということと､｢そのためにPJのソースコードの大意を掴む方法｣を､筆者の体験談に即しまとめた記事です
* 前述した通り､技術やPJの構成を理解し､顧客が望む機能追加やバグFIXを行うことが､エンジニアの主要な職責であると､筆者は思っています｡
* PJアーキテクチャの把握は､上記を実現するためのメリットを必ずもたらします｡
    * 企画から受けた要望の､工数見積の精度向上､そもそもの実現可能性自体のup
    * 機能追加やバグFIXの精度/速度 両面での向上
    * 上記2点の結果､業務スピードが上がる / PJメンバーから信頼度が上がる → 仕事のサイクルが好転のループに乗りやすくなる
:::
というものです。

 

また、具体的なコードの把握のコツについてはコチラです。

タイトルのみ抜粋しました。

> 1番最初に､プロジェクトのディレクトリ構成に着目する
コードを読む前に、PJで使われている主要なデータ構造を把握する
大きなモジュール単位で､木を見ず森を見るようにコードを読む
何でも良いので､必ずアウトプットしながら読む!

自分もコードを読むときは、この記事にあったような全体感を把握し、紙に構造を書き出したり、チーム内のメンバーに説明したりすることをよく行っていました。

しかし、改めて人に伝えるためにこの記事のように言語化することはできていなかったです。

 

今回、コンテストに応募いただいた記事はどれも素晴らしいもので、すぐに仕事に使えるもの、エンジニア的な開発の指針となるもの、会社の資産となるものなど、各々価値があるものでした。

 

その中でもこの記事は

「すべてのエンジニアの業務に関係するテーマで、みんなに知ってほしいものであった」

「経験に加えて、本人の思考などを踏まえて、読む人の事を考えて丁寧に執筆されていた」
「コミュニケーションのきっかけとなる、読んでよかったと思える記事であった」

という点が優れており、最初に決めた評価観点からみても素晴らしい出来でしたので最優秀賞といたしました！　

 

## まとめ
今回の試みは、組織、個人が情報を蓄積するきっかけにもなりましたが、それに加えて、日々の業務を俯瞰して伝えたいことを整理し、エンジニア間でコミュニケーションすることで、リモートワーク化で感じにくくなる会社で働く一体感のようなものを感じました。

また、今回技術記事コンテストで作成された記事については、できるものは外部公開も検討していますのでご期待ください！

 

[エンジニア採用特設サイトはこちら](https://www.notion.so/f4samurai-Engineer-Recruiting-33fd41dc956242f6a172ad52038fc653)
nRF Connect SDK:Secure DFUできた記念に

# やっぱり考えるよね
Secure DFUでnRF SDKと同じECDSA-256が使えるということで「それならもしかしてnRF SDKのファームウェアをnRF Connect SDKのファームウェアでDFUできるんじゃね？」って考えるじゃないですか。
え？そんなこと考えないって？
まあまあまあ。とりあえずやってみましょうよ。
# 結論
当たり前ですができませんでした・・・orz

::: note
これ以上書くことがない(笑)
:::
nslookupの使い方

ActiveDirectoryのDNS名前解決の確認で使用した時のメモ
```
nslookup 'IPアドレス' 'DNSServerアドレス'
```
でも正引き、逆引きは出来る。
レコード内の情報（メールサーバーで言うとプリファレンス値など）を確認したいときは
```
nslookup -type='レコードタイプ' 'FQDN' 'DNSServerアドレス'
```
Javaを基本からまとめてみた【this / コンストラクタの呼び出し】

## this / コンストラクタの呼び出し
- 『this』は『このインスタンス』と言う意味を表す。
```
this() : コンストラクタ
this.変数名 :　フィールド変数 
```

- コンストラクタからコンストラクタを呼ぶ際は、呼び出し元のコンストラクタの先頭で呼ばなければならない。

- メソッド内のローカル変数とフィールドヘンスが同じ名称の場合、ローカル変数が優遇される

```Sample2.java


class Sample2_drive {
 public static void main(String[] args)

 System.out.println("車を場に搭乗させる")
 car chocoCar = new Sample2_car();

//コンスタントラクタは一番深いものから動く

 car mocoCar = new Sample2_car("クーペ","red",80);

//コンストラクタ①(引数無し)
Sample2_car(){
 System.out.println("コンストラクタ① (引数無)");
 carModel = "未登録"; //車種
 color = "未登録"; //色
 speed = 0; //現在の速度
 System.out.println("○ ○");
}

//コンストラクタ②(引数有り)
Sample2_car(String cm, String cl, int sp){
 this() //コンストラクタ①(引数無し)の起動
 System.out.println("コンストラクタ② (引数有)");
 carModel = cm; //車種
 color = cl; //色
 speed = 0; //現在の速度
 System.out.println("○ ○");

```

## 参考サイト
[【Java-オブジェクト指向】Javaプログラミングの「オブジェクト指向」が絶対理解できる講座【プロ講師が丁寧解説】
](https://www.udemy.com/course/uz-java-obj/learn/lecture/21205574#overview)
リモートワークでもつながりを作るf4samuraiの工夫

## はじめに
自分は、2022年4月にf4samuraiに転職してきました。

現在はどの会社でもリモートワーク中心の業務であるため、コミュニケーション面で会社に馴染めるか、また、自分のスキルを活かせるかどうか不安がありました。

 

しかし、f4samuraiではリモートワーク下でも、社員同士のコミニケーションを促進し、あらたなつながりを作りだすための様々な工夫が行われており、約半年働くことで、長年働いた会社と同じか、それ以上の人のつながりが生まれ、仕事にも活かすことができました！

 

今回は、その仕組みについて説明しようと思います。

## つながりを作る仕組み
まず最初に、ポータルサイトが非常に充実していると感じています！

https://note.com/f4s_matsuno/n/nab3678236641

こちらの記事にも書いてあるのですが、メンバー全員の顔写真と自己紹介があるため、話しかけるきっかけにもなります。


加えて、ポータルには座席表もすぐ見られるようになっており、出社して直接質問する時に何度も利用させていただいています！

 

ポータルはこれだけでなく、社内で使う勤怠やスケジュールを管理するツールへのリンク、体制図、秋葉原のランチマップ、社内メンバーのインタビュー記事などなど、会社勤めで欲しい情報が非常に分かりやすくまとまっています。

 

 

続いて、社内での情報発信の仕組みも存在しています。

１つ目は社長のラジオ。
![20221201153228.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/16aec181-a1e8-5b68-a637-49bdc3e7f119.png)
複数人で会社のことから日常生活のことまで、肩肘張らずに話しているので、会社や一緒に働いてる人の雰囲気を深く理解することができます。

 

リアルタイム配信ではチャットでコメントをしたりできますし、加えて、アーカイブにで後から聞けるところも素晴らしいです！

 

そして、テキスト朝会というものも相互理解に役に立っています。
![20221201153603.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/5e5288e0-3736-7174-3abb-66e3cb6b61f1.png)
こちらは希望者が持ち回りでブログを書いていくもので、ゲーム、映画、カフェ、オススメのお店など趣味の話など、会社で働くひとの日常が見え、コミュニケーションのきっかけにもなりました。

 

他にも、大きなカフェスペースを活かした、チームの懇親会、ヤクルトさんの訪問販売、旅行のお土産のおすそ分け、専用のエスプレッソマシーンなどを使って振る舞われるバリスタデーなど、交流するためのきっかけづくりが充実しています！

 

加えて、社内で行われるイベントが自由参加形式なのも、配慮が行き届いていいなと思っています！

興味があるものだけ参加、見るだけでの参加、積極的に発信するスタイルでの参加、参加しない、どのスタイルも許容しているところが、多様性を許容する社風を表していると感じました。　

## つながりを仕事に活かす
では、このような仕組みで増えたつながりを通して、業務にどのような影響があったかを説明します。

 

## 雑談から業務改善へ
まず、出社日で顔を合わせた時に会話をすることが増え、その結果業務改善に繋がったというものがあります。

具体的には、ボイスを収録するときの台本作成ツールの改善です。ちょうど帰る時にスクリプトチームが話し合っている所が見えて、そこでヒアリングしたとこから改善に繋がりました。

 

他にもSQL作成ツールの改善も社内でのつながりがきっかけとなり作成しました！
![20221201175337 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/e9c506d6-60f0-8302-0fce-03958dd9c5e1.png)
エクセルのマクロによるSQLの作成ツール

## 日常の温かみのあるやり取り
そして、リモートワークだと、文字情報でのみのやり取りであるため、使い方によっては指示・依頼が飛び交うといった印象になりかねないですが、f4samuraiでは社員同士のつながりがあり、お互いを尊重する空気感があることで、相手を気遣ったやり取りがあると感じています。

 

## つながりからアイデアが生まれ行動へ移していく
さらに、社内の仕組みを活かして生まれたつながりから行動が生まれ、どんどん進化していくところもf4samuraiのいいところだと思います！

 

仕事に関係することで言えば、Jenkinsの運用改善情報の共有、GoogleのBillingLibraryという課金システムのアップデート情報などもプロジェクト間で共有され、サービスの安定運用、品質向上に役立っています。

 

また、直接仕事には関係ないですが、最近流行っているコンテンツやサービスを語り合ったりする機会も多く、他にはおすすめの手土産をシェアしあう活動なども最近生まれました！

 

トップダウンだけでなく、ボトムアップで提案されたことがどんどん実行されていくところが、ベンチャー感あって自分はすごくいいなと感じています！

 

## まとめ
今回はf4samuraiの社風や特徴を今年入社した自分からの目線でまとめてみました！

再度整理すると以下となります。

* コミニケーションをするために必要な情報の提供ができている
* 交流を生み出すきっかけの場が多い
* 一人ひとりの気配りや気付きで新たな仕組みが生み出される
* ボトムアップかつ、スピーディに行動していく風土がある

社風が合いそうだなと思った方は、エンジニアが知りたい情報を詳細にまとめた以下のサイトがありますので、是非ご覧いただければと思います！

[エンジニア採用特設サイトはこちら](https://www.notion.so/f4samurai-Engineer-Recruiting-33fd41dc956242f6a172ad52038fc653)
エンジニアからの提案がゲームに反映された事例

「社内のエンジニアが提案してゲームに反映されることってどのくらいあるんですか？」と採用候補者の方から聞かれたことがあったので、社内でヒアリングをしてみました。

まだリリース前のタイトルでの提案もあり詳しく書けない部分もあるのですが、弊社エンジニアの働き方が少しでもイメージできたら嬉しいです。
![20221108193857 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/9916d267-ecae-e049-1391-bd76ee465eca.jpeg)
機密事項でスクショが載せられないので代わりにオフィスのある秋葉原の写真

:::note info
* リアルタイムユーザバトルの実装見積り
* タイトル表示や場面転換の演出案
* ストーリースクリプトの実機確認手法
* 描画負荷を下げる改修
* バトルリプレイ機能の実装
* 自作フレームワークの実装
* 画面遷移のひと手間を減らす
* キャラクターの新スキルレビュー
:::

## リアルタイムユーザバトルの実装見積り
> ディレクターはリアルタイムユーザバトルを実現したかったのですが、社内で実装を経験したメンバーがおらず難易度や工数を見積もれないでいたため、別の機能で代替しようとしていました。
そこで「実装難易度を見積もることを目的としたテスト実装に1週間使う」ことを提案しました。事前に通信ライブラリのドキュメントにも目を通していたので、これを使えばいけるかもという感触がありました。
その時点で検討していたゲーム仕様も、通信タイミングが少なくて済むゲームルールだったため実装がスムーズに進み、異なるPC間で対戦できるところまで3～4日でいけました。これを見てディレクターがリアルタイムユーザバトルをゲームのエンドコンテンツする仕様に変えることができました。
（サーバサイドエンジニア Oさん）

## タイトル表示や場面転換の演出案
ストーリーを表示するアドベンチャーパートで、タイトル表示や場面転換の演出について素案を作成し、採用されました。

> タイトル表示は、キャラとタイトルが一緒に出るといい感じになるのではないかという案を考え、フェードのみの簡単なアニメーションを作成してメンバーに共有しました。結果その案が採用され、デザイナーに作成の依頼を行いました。
場面転換は、VTuberの配信開始時や画面の切り替わる時に使われている演出が作品のイメージに合うのではないかと思い、演出をまとめて共有したところその一つが採用されました。
（ネイティブエンジニア Mさん）

 

## ストーリースクリプトの実機確認手法
> シナリオチームがスクリプトを作成するツールはUnityを使って実装されているのですが、実際のゲームはcocos2d-x上で動作していました。当初はUnity上でLive2Dや演出も確認する想定だったのですが、スクリプトを実機で確認するとLive2Dのモーションやwaitの秒数がボイスとずれてしまうということがありました。
そこで、スクリプトツール上では値を設定してスクリプトを出力する機能のみとし、演出の確認は実機で行うように提案して改修しました。実装としてはUnityをSocketサーバーとして立てて、そこに実機を繋いてUnityで作ったスクリプトのjsonを送るようにし、受け取ったjsonでストーリーを再生するようにしました。
それまでは何か新規の演出を実装する場合、cocos2d-x側とUnity側で二重に実装する必要がありコストが高かったのですが、演出表示部分を実機にまとめることで実装コストも下がりました。
（ネイティブエンジニア Sさん）

 

## 描画負荷を下げる改修
> ゲーム内に登場するアバターキャラは、部位ごとにパーツを結合しているため描画処理が重くなっていました。
そこで、動的にメッシュとテクスチャを結合してキャラクターのドローコールを削減するように努めました。また、非圧縮テクスチャとしてテクスチャ結合していたものを、圧縮テクスチャのまま結合するように改修して、メモリと描画負荷を軽減しました。
（ネイティブエンジニア Oさん）

 

## バトルリプレイ機能の実装
> バトルをリプレイ再生したいというプランナーの要望があり、実装方法を検討しました。
結果、バトル内部の計算結果などをjsonデータにして保持することで、そのデータを元にバトルを再生する機能を実現できました。
（ネイティブエンジニア Oさん）

 

## 自作フレームワークの実装
> そのプロジェクトではwicketというテンプレートエンジンを採用していたのですが、そこにbackbone.jsを組み合わせるかどうかという議題が上がりました。画面作成のコストを考えると少し効率悪そうな感じがしたので、backbone.jsまでの機能はないけれど、wicketに合わせた簡略化したライブラリを作り採用されました。
プレゼント受け取りやフレンド一覧、ミッション一覧など画面を切り替えて描画していた部分は、jsonデータのやりとりだけで再描画できるようになりました。
（フロントエンドエンジニア Rさん）

 

## 画面遷移のひと手間を減らす
> 画面遷移のひと手間を減らすような提案をよく行っています。
例えばクエストのループ状態について、毎回設定がリセットされていたのを設定状態が保持されるように変更しました。
あとはイベントの中でキャラクターのチーム編成を変更する頻度がかなり低いにも関わらず、フローに必ず編成させる処理が挟まっていたのが気になったので、UIチームにフローの変更を提案し、初回だけ編成をするよう改修しました。
（フロントエンドエンジニア Mさん）

 

## キャラクターの新スキルレビュー
> 僕自身ゲームが大好きで多くのゲームをプレイしています。
自分が関わっているプロジェクトに関して、メイン担当はクライアント開発ですがゲーム設計部分で気になる部分があればディレクター・プランナーに伝えています。
例えば、既存のスキルと組み合わせると無限に必殺技が出せるようになってしまう、似たようなステータスを持つキャラクターの上位互換になっていてそのキャラが活躍できなくなってしまう、などです。
（フロントエンドエンジニア Yさん）

 

 

実際にヒアリングをしてみると、ゲームルールに関する提案だけでなく、実装方法やUI/UXの改善、ゲームバランスを踏まえたチェックなど、ゲームに関連する様々なことにエンジニアが関わっているんだなと感じました。

 

[エンジニア採用特設サイトはこちら](https://www.notion.so/f4samurai-Engineer-Recruiting-33fd41dc956242f6a172ad52038fc653)
技術戦略チームを立ち上げました

会社の技術的な課題を、組織横断で解決するチームを立ち上げたときの話をします。

:::note info 
会社が抱えていた問題
検討チームの立ち上げ
チームの理念とミッション
【チーム理念】
【チームミッション】
これからやっていくこと
:::

## 会社が抱えていた問題
これまでエンジニアが関係する課題は、技術的な課題であってもチームマネジメントに関する課題であっても、個々のエンジニアが解決にあたっていました。
会社の規模が小さかったときはそれでも良かったのですが、規模が大きくなり複数ラインで開発するようになってからは、課題が解決できるかどうかはそのエンジニア個人の能力に依存するようになってしまいました。
組織で働くメリットの一つとして、各エンジニアの強みや知見を集めることでより難易度の高い問題に対処できることがあげられます。
会社としての技術力を一段上げ、よりハイクオリティで生産性の高い開発をするために、技術戦略チームを立ち上げることにしました。
 
## 検討チームの立ち上げ
サーバサイドのエンジニアリーダーと、クライアントサイド（Unity）のエンジニアリーダーに声をかけ、検討チームが発足しました。
まずは各自が思っている課題の洗い出しから始めました。
それぞれが付箋に書き、ホワイトボードに貼り出しながら説明、それを聞いて関連する課題があったらそれも貼り出す、という形で進めます。
 

![20220906182713 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/39d88d24-46de-2a4c-d25c-055ff16255bd.jpeg)
課題の整理中
ある程度挙げられたところで、付箋をmiroに転記しました。
miroでは、課題の抜け漏れがないかを検討するため、ざっくりとグループ分けをします。

![20220906182827 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/8d2e3ed3-37d5-9c9e-4822-1dbf8f55ec11.png)
miroを使うとグループ分けしやすい
ここでは、以下のような分類にしました。
 
* 事業に関する課題
    * エンジニアチーム
        * 現在直面している課題
        * 将来への備え
    * プロジェクト全体
        * 立上げ時
        * 開発・運営時（マネジメント）
* 会社組織に関する課題
    * 人事
        * 採用
        * 配置
        * 評価
        * 報酬
        * 育成
        * 代謝
    * 社内システム
 
## チームの理念とミッション
このタイミングでチームの理念とミッションも考えました。
 
### 【チーム理念】
エンジニア全員が、個人ではなく組織で戦えるエンジニア集団の一員になる
 
### 【チームミッション】
「SECIモデル」と「ダブル・ループ学習」を実践・推進し、エンジニアの常識や文化のレベルを継続的に向上させる
 
活動内容を踏まえ、チーム名称も検討しました。ひねった名前も候補としてありましたが、ここはシンプルに **「技術戦略チーム」** としました。
 
## これからやっていくこと
課題の抜け漏れがないと納得できたら、優先度を付けスケジュールを立てました。
優先度の高い課題のうち、まず最初にエンジニア個人がもっている暗黙知を集約することから始めることにしました。
それぞれのエンジニアがプロジェクトの設計・開発運用フェーズにおいて気にしたこと、意識したことなどのノウハウを明文化していきます。
今はいろんなエンジニアにヒアリングを行っているフェーズなので、まとまったらこのブログでも紹介したいと思います。
 
[エンジニア採用特設サイトはこちら](https://www.notion.so/f4samurai-Engineer-Recruiting-33fd41dc956242f6a172ad52038fc653)
EXCEL 掛け算

アスタリスク（*）を使用した計算

1.入力するセルに「=」を入力する
まず、エクセルで掛け算の計算結果を表示したいと考えているセルをクリックし、「=」を入力
2.掛け算するひとつ目のセルを選択する
掛け算しようと考えている数字が入力されているセルをクリック
3.「アスタリスク」を入力する
「=」の後に手順2で指定されたセルの番号が表示されたら、「*」を加えます。
4.掛け算するもうひとつのセルを選択
最後に、掛け算しようとしているもうひとつのセルを選択して「Enter」キーを押せば、計算結果が表示
f4samurai エンジニアブログ開設！

:::note info
* ご挨拶
* エンジニアから見たf4samuraiの特徴
* 現在の勤務形式
* 会議の頻度について
* 最後に
:::



## ご挨拶

はじめまして！
この度、f4samuraiエンジニアブログを開設することになりました。
このエンジニアブログでは、技術情報を共有したり、f4samuraiの特徴をエンジニア目線からお伝えしていければと思います。

## エンジニアから見たf4samuraiの特徴

早速エンジニアの自分から見て、f4samuraiの特徴をお伝えしていこうと思います 。

### 現在の勤務形式

まず、2022年9月 現在の勤務形式は、基本的に在宅勤務を推奨しています。オフィス自体は、常にオープンしているため、家に作業スペースがない方や、会社の方が集中できる方はオフィスを利用することも可能です。




オフィスはJR秋葉原駅の目の前にある秋葉原UDX内にあり、どこに住んでも通いやすく、雨の日もあまり濡れずに通勤が出来ます。

始業開始が10:30であるのも、朝の通勤が混まずに助かるところです。



![20220902145834 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/02d10573-ca22-1d35-7e10-308e83aa42dc.png)
オフィス外観





オフィスは、PCに加えて２つの外付けディスプレイが支給され

椅子だけでなく机も昇降する形式で非常に快適な開発環境となっています。
![20220902144051 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/186e2a83-9e2e-31de-fb5a-cd2ddf50f7a3.png)
昇降式の机




自分は、基本的に在宅のほうがプログラムや設計に 集中できるので好きなのですが、オフィスが非常に綺麗で、快適、かつ秋葉原駅目の前とアクセスも非常に良いため、出社して働くのも楽しいと感じるようになりました！

オフィスをより知りたい方は、写真や設計思想が以下にあるので是非見ていただければと思います。

https://ibasho-ob.com/archives/7625

## 会議の頻度について

在宅作業が中心であることで、エンジニアとして気になるのは会議の頻度についてです。

こちらについては、担当するプロジェクト、立場、担当範囲によって異なりますが

定常的に行われるものは

* 月１の全社会議
* 毎朝のチーム、エンジニアの朝会

となっており、会議は多すぎず、開発に集中できる状態です。




オフィスにおけるリモートでのミーティングは、自席や会議室以外にも使えるスペースがあり、場所の確保や会話のハウリングなどでのストレスもなく快適です。

具体的には以下の写真のようなスペースが存在します。
![20220902144757 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/58caa38c-9165-b4ce-264d-c39ce4cf271f.jpeg)
カフェの作業スペース
![20220902144834 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/5e5e8e4f-56c2-9f6d-03d6-b799b31edd88.jpeg)
集中ブース
![20220902144914 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3190574/25b13d42-b024-f09c-56b8-d4840372aadb.jpeg)
窓際の作業スペース

エンジニアの傾向としては、全体的に大人しく、しっかり考えて行動する人が多い印象です。

このこともあり、定常以外の会議でも短い時間で有益な情報交換や議論が行なうことができ開発に集中できると感じています。




## 最後に

f4samuraiに入る前は、あまりf4samuraiで働いている方の情報がなく、どのような会社かイメージがわかなかったですが

実際に働いてみると

* 快適な開発環境
* エンジニアとして適切なコミュニケーション頻度
* これから成長していけそうな組織風土

と、エンジニアとして求めるものが揃っているなと感じています。




オンラインでのカジュアル面談なども行っているので、直接お話しを聞きたい方がいらっしゃいましたらぜひ申し込んでください！

https://open.talentio.com/r/1/c/f4samurai/pages/48992




また、エンジニア採用特設サイトを作成致しました。

こちらもご覧いただければと思います。

[エンジニア採用特設サイトはこちら](https://www.notion.so/f4samurai-Engineer-Recruiting-33fd41dc956242f6a172ad52038fc653)
Flutter iOSにてGTMSessionFetcher/Coreのバージョンを何とかする

Flutterでアプリを開発中でiOS向けにビルドしたとき、`pod install` のステップにて以下のエラーが発生した。

```
    [!] CocoaPods could not find compatible versions for pod "GTMSessionFetcher/Core":
      In Podfile:
        firebase_auth (from `.symlinks/plugins/firebase_auth/ios`) was resolved to 4.2.10, which depends on
          Firebase/Auth (= 10.3.0) was resolved to 10.3.0, which depends on
            FirebaseAuth (~> 10.3.0) was resolved to 10.3.0, which depends on
              GTMSessionFetcher/Core (< 4.0, >= 2.1)

        google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/ios`) was resolved to 0.0.1, which depends on
          GoogleSignIn (~> 6.2) was resolved to 6.2.4, which depends on
            GTMSessionFetcher/Core (< 3.0, >= 1.1)

        mobile_scanner (from `.symlinks/plugins/mobile_scanner/ios`) was resolved to 0.0.1, which depends on
          GoogleMLKit/BarcodeScanning (~> 3.2.0) was resolved to 3.2.0, which depends on
            MLKitBarcodeScanning (~> 2.2.0) was resolved to 2.2.0, which depends on
              MLKitCommon (~> 8.0) was resolved to 8.0.0, which depends on
                GTMSessionFetcher/Core (~> 1.1)
```

firebase_authとmobile_scannerで`GTMSessionFetcher/Core`の依存バージョンが矛盾する。

## podspec

`MLKitVision` と `MLKitCommon` のpodspecファイルをダウンロードし、iosディレクトリに置いておく。

この記事を書いている時点の最新は以下の通り。

https://github.com/CocoaPods/Specs/blob/master/Specs/8/1/e/MLKitVision/4.2.0/MLKitVision.podspec.json
https://github.com/CocoaPods/Specs/blob/master/Specs/c/c/6/MLKitCommon/8.0.0/MLKitCommon.podspec.json

※バージョンがあがったら、適宜最新を参照してください

## GTMSessionFetcher/Core

上記でダウンロードして配置した MLKitVision.podspec.json と MLKitCommon.podspec.json の中で `GTMSessionFetcher/Core`のバージョンが 1.1 となっている箇所を 2.1 に変更する。

## ios/Podfile

ios/Podfileの `target 'Runner' do` の中で、上記で編集したファイルを参照するように指定する。

```
  pod 'MLKitVision', :podspec => 'MLKitVision.podspec.json'
  pod 'MLKitCommon', :podspec => 'MLKitCommon.podspec.json'
```