OmniAICreator/Qiita-1.07M huggingface dataset:
チームの結束力を高めるわいわいチームビルディング！

# はじめに
こんにちは、H×Hのセンリツ大好きエンジニアです。（同担OKです😉）
今回は自分が所属しているスクラムチーム内で行われているチームビルディングの内容について触れていきます！

個人的に、**チームの結束力を高めるために非常に重要な要素**だと思っているので、取り入れられることは是非取り入れてみてください！

他にも、以下のイベントでは面白い記事がたくさんありましたので気になる方は是非見てみてください！

https://qiita.com/official-events/640648f4dc7d69b3d830

# チームビルディングの重要性
チームビルディングとは、**チーム全体で高いパフォーマンスを発揮するためにチームを作っていく**と言うものになります。
チームビルディング自体はほとんどの企業で行われているのでは無いでしょうか？😉
改めて、チームビルディングのメリットを挙げると以下のものになるかと思います。

- メンバー間のコミュニケーションが活発になる
- チーム愛が高まり、仕事への意欲が高まる
- 問題解決能力が向上する
- 心理的安全性が確保されることで、意見が言いやすくなる

どれを取ってもチーム開発において重要なことばかりですね！
これらのメリットがあるチームビルディングを、自分達はどのように行なっているかというと。。。

ズバリ！

#### 感謝！オープンコミュニケーション！毎日の小話！

です！！！

それぞれ説明していきます。

## 感謝
皆さん、社会人になってからきちんとテキストに残した感謝はどれくらいしておりますでしょうか？
（改めて感謝を伝えるのってこそばゆい感じしますよね🥴）

**感謝される方は言われて悪い気持ちは全くしない**ので、感謝すればするほど好感度も上がっていくかと思います。

自分達のチームでは、スクラムを2週間１スプリントとして回していますが、スプリント終わりの「レトロスペクティブ」でチームの振り返りをしています。
その時に、まずはチームへの感謝を述べるという事で、**チームメンバー一人一人にいつでも見返せるよう、テキストベースでの感謝を述べています!**

これにより、毎スプリント照れ臭い気持ちにはなりますが🙈、直接感謝を伝えられることでチームに対する愛情が芽生えてきます！

本当にチームを好きになることは重要だと思いますが、**きちんと感謝を伝えることがチーム愛への近道**だと確信してます！

是非、感謝はどんどん述べていきましょう！✌

## オープンコミュニケーション
これは要するに、**チームメンバー間のDMを極力行わない**というものです！

チーム内でのDMが頻繁に行われていると、**チーム内で作業する中で知らないことが勝手に決まっており、チームに対する不信感が高まってしまう**ということが発生するかと思います。🥶

ただ、DMでやり取りする必要が感じられなかったので、基本的にはDMを廃止する形にしました！
そうすることで、チーム内でどのような議論が行われているか全て可視化されるので、**メンバーの考えや行動がめちゃくちゃわかりやすくなります！** 🫰

それだけではなく、オープンなコミュニケーションを行うことによりメンションされていない第三者からも意見が言いやすくなるので、**問題解決力がチーム全体で向上する**といった特典ももれなく付いてきます！（お得ですね😎）

些細なことで通知が行ってしまうのは避けたい方もいらっしゃいますが、チーム内でしっかり話し合ってからオープンコミュニケーションにするか決めていただければと思います！😤

**自分達のチームでは、特に誰も通知がうるさいことに関する不満がないので廃止しました！**
**作業に集中したい場合に通知をオフにするといった方法で切り替える方もいらっしゃいます！**

## 毎日の小話
チームが出来てからの**序盤は、仲を深めることはかなり苦戦**しますよね。。。😰
チームメンバーの人となりも分からなければ、何が好きなのか分からない。。。そういった経験があるかと思います。

序盤の内にチームでのコミュニケーションを取る手段として、「**毎日の小話**」というコーナーを設立しました！🥳

このコーナーは、**毎日行う朝会であるデイリースクラム内にて、日々あった面白いことや共有したいことを一人一人お話ししていくと言ったコーナー**です！

デイリースクラムで毎日の小話を取り入れることで、かなり早い段階で仲を深められたかなと思います！
特に面白かったお話としては、「メンバーが電車内でお相撲さんに囲まれてしまった話」です！😹

このように、毎日全員が短い時間で簡単な話を展開することで**人となりを知れたり、2人きりになった時のトークテーマにもなる**ため、メンバー間の隔たりが無くなっていくことが感じられます！

勿論、メンバー全員がデイリースクラムで話すので、会議時間が長くなりがちです。
これはデメリットになってしまうのですが、**会議が長引くこととチームの雰囲気が良くなること、どちらを優先しますか**？という問いを投げかけたいと思います。🤔

自分達は**今後このチームで業務を遂行していく中で、今ある時間よりチームの雰囲気を良くすることの方が確実にメリットになる！** と確信したのでこの方法を取りました！😍
今では仲も深まったと感じているので、全員ではなくルーレットで決まった一名がお話しするというように切り替えています。
（完全には無くさずに、コミュニケーションとして利用しています😁）

# おわりに
上記3つを取り組むことで、かなりチームビルディングが捗ったのでどれもオススメです！
すぐに取り入れられそうなものばかりなので、少しでも気になったものがあれば是非トライしてみてください！💪

最後までご覧いただきありがとうございました！
以上、センリツでした。🤓
iOSアプリを開発、リリースするまで

## Unityでアプリ制作を始めました
iPhoneでプレイできるゲームを作ることにしたので、やったことを記事に残します

## アプリ開発
ここは別で作成中。また記事書きます

## TestFlightを使って検証

https://developer.apple.com/jp/testflight/

`
TestFlightを使用すると、アプリおよびApp ClipをApp Storeでリリースする前にユーザーをテストに招待し、
有益なフィードバックを受けることができます。
`

AppClipが分からなかったので調べたところ、一部の機能が使えるミニアプリらしい。

とりあえず、TestFlighはアプリを試験的に公開できる場所で、
社内または社外のテスターに向けてテストが出来るみたいでした。

## 使い方

ここから始めるみたいでした

https://appstoreconnect.apple.com/login

<br>
AppleIDでログインするとApple Developer Programに登録してくださいとの内容

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/b1a1600a-267c-ba06-5a55-215c7746088f.png)

<br>

Apple Developer Programに登録する

https://developer.apple.com/jp/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/d009196a-418e-c989-68f0-cfe5ac8166a8.png)


今すぐ登録ボタンを押すとApple Developerアプリが必要らしいので
AppStoreからインストール

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/ad8f8dde-30c6-55c7-b753-da6fdd58b25b.png)

<br>

Apple Developer Program登録　年12800円
無料でTestFlightを利用できないので、登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/5ea2f5e3-5bcc-b439-a609-b2b590862e99.png)

<br>

審査に１ヶ月以上掛かったが登録できました。問い合わせしまくりました。
身分証明書はパスポートが英語表記でおすすめです
住所も英語で記載し直しました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/ea449729-de99-4226-1cee-7ccc5ce7d1a4.png)

<br>
※Unityでアプリ作成中なので、それが落ち着いたら更新します


----


<br>
ここからはclaudeが回答した手順で進めます


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/c61adf83-1fd4-86a8-8e7a-4018829a6c78.png)

<br>

### 3. 有効な Bundle ID を設定
com.名前.アプリ名にするらしいので設定

### 5. アーカイブを作成し、「Distribute App」を選択します。
`
ipaファイルとしてビルドする作業になります。
XcodeのProductからArchiveを選択して、ビルドを行います。
`

アーカイブ＝ビルド…🤔うーん

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/54f5de24-55b0-0bb8-2cb9-e2f791e9c34a.png)

出来ました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/47144077-9fc6-b085-27c9-43b174e0c73d.png)


Distribute Appを押すとTestFlightがあったので
Apple Developer Programの登録が出来たら再度やってみます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760274/8ee7cf77-06ad-fbaa-b7bd-9a402bccbc18.png)
Python 速習動画

10 リスト（途中） まで

https://www.youtube.com/watch?v=tCMl1AWfhQQ&t=3011s

冷房で体が冷えて眠い。

![2024.7.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812230/3563eb17-cec3-7cd0-edc5-b3ed2b4c5c48.png)
おすすめJetBrains製品(Idea, Riderなど)向けPlugin

装飾をJetBrains IDE向けのおすすめプラグインまとめです。
n番煎じではあるのですが、この手の記事はいくらあってもいいと思ったので作成しました。
いいものを見つけ次第追加していきます。
# 無料
## 虹色系
### Index Rainbow
インデントが階層ごとに着色されます。

https://plugins.jetbrains.com/plugin/13308-indent-rainbow

### **Rainbow Brackets Lite**
波かっこ`{}`がペアごとに着色されます。

https://plugins.jetbrains.com/plugin/20710-rainbow-brackets-lite--free-and-opensource

## アイコン系

### Extra ToolWindow Colorful Icons
IDE内のアイコンに色が着色され、一部アイコンを追加します。

https://plugins.jetbrains.com/plugin/16604-extra-toolwindow-colorful-icons

### Atom Material Icons
ファイルにアイコンがつけられます。デフォルトでもある程度のファイル形式に対応しているが、より多くのファイル形式/差分に対応。

https://plugins.jetbrains.com/plugin/10044-atom-material-icons

## ファイルサポート系

### Rainbow CSV
CSVファイルの要素ごとに着色がされます。

https://plugins.jetbrains.com/plugin/12896-rainbow-csv

### .env files support
環境変数ファイル`.env`をサポートします。
dockerなどと一緒に用いるとおすすめ。

https://plugins.jetbrains.com/plugin/9525--env-files-support


## その他

### Randomness
数値や、文字列、UUIDなどをランダムに生成します。

https://plugins.jetbrains.com/plugin/9836-randomness


# 有料(フリーミアム含む)
## GitToolBox
各行に最後の変更者が表示されたり、コミットメッセージの記述時にサポートがされます。
基本的な機能は無料で利用できる**フリーミアム**な料金形態です。

https://plugins.jetbrains.com/plugin/7499-gittoolbox
[CDK For Terraform]RDS拡張モニタリング反映時にエラー

# CDK For TerraformでAuroraを管理している際に拡張モニタリングを反映する際にエラーが発生

- エラー内容

```log
A MonitoringRoleARN value is required if you specify a MonitoringInterval value other than 0.
```

## 元々の定義

```typescript
new aws.rdsClusterInstance.RdsClusterInstance(this, `auroraclusterinstance`, {
          identifier: auroraInstanceName,
          clusterIdentifier: AuroraCluster.clusterIdentifier, 
          engine: "aurora-postgresql",
          instanceClass:  "db.t4g.medium",
          autoMinorVersionUpgrade: false,
          promotionTier: i == 0 ? 1 : 2,
          dbParameterGroupName:  "instance-psql14-group",
          caCertIdentifier: "rds-ca-rsa4096-g1",           // 証明書
          applyImmediately: false, // 即時適用
          performanceInsightsEnabled: true, // パフォーマンスインサイト有効
          monitoringInterval:  0, // 拡張モニタリング設定
        });
```

拡張モニタリングを有効にするにはmonitoringIntervalの値を0以外にする必要があるが、その場合はMonitoringRoleARNを指定する必要があります。

## 変更した定義

```typescript
new aws.rdsClusterInstance.RdsClusterInstance(this, `auroraclusterinstance`, {
          identifier: auroraInstanceName,
          clusterIdentifier: AuroraCluster.clusterIdentifier, 
          engine: "aurora-postgresql",
          instanceClass:  "db.t4g.medium",
          autoMinorVersionUpgrade: false,
          promotionTier: i == 0 ? 1 : 2,
          dbParameterGroupName:  "instance-psql14-group",
          caCertIdentifier: "rds-ca-rsa4096-g1",           // 証明書
          applyImmediately: false, // 即時適用
          performanceInsightsEnabled: true, // パフォーマンスインサイト有効
          monitoringInterval:  15, // 拡張モニタリング設定
          monitoringRoleArn: `arn:aws:iam::${accountId}:role/rds-monitoring-role`, // 拡張モニタリング有効時のIAMロール
});
```

拡張モニタリングを有効にするため`monitoringInterval`の値を15、
monitoringRoleArnにロールを設定するようにしました。

ただこの設定だと再び拡張モニタリングを無効にしたときに以下エラーになってしまいます。

```log
 Error: updating RDS Cluster Instance (aurorainstance): InvalidParameterCombination: You must specify a MonitoringInterval value other than 0 when you specify a MonitoringRoleARN value.
 ```

0にする場合は`monitoringRoleArn`の指定はしないようにする必要があります。

そのため最終的な定義は以下のようにしました。

```typescript
          monitoringInterval: IndividualConfig.rdsConfig.monitoringInterval || 0, // 拡張モニタリングの有効化　0は無効 
          //       拡張モニタリング有効時のみIAMロールを設定する。そうしないとエラーになる。
          ...(IndividualConfig.rdsConfig.monitoringInterval > 0 && {
            monitoringRoleArn: `arn:aws:iam::${accountId}:role/rds-monitoring-role`, // 拡張モニタリング有効時のIAMロール
          }),          
```

`monitoringInterval`を外部パラメータとしてもち、0以上だった場合は
IAMロールを設定するというように分岐ロジックを実装しました。

これによりエラーが発生せず、拡張モタリングのパラメータ指定だけで
有効無効の制御ができるようになりました。
合格体験記: AWS Solution Architect Associate

## はじめに
資格試験の勉強には、暗記が多くて苦手だと感じる人が多いでしょう。私もその一人でした。しかし、AWS Solution Architect Associateに挑戦する中で、その苦手意識を克服するための新しいアプローチを見つけました。本記事では、私がどのようにしてこの資格試験に合格するための勉強方法を変えたのか、その経験を共有します。

## 資格勉強の苦手意識
これまでの資格勉強は、単なる暗記作業と感じることが多く、苦手意識が強かったです。特に、用語の意味を理解せずにただ覚えようとすることが多く、その結果、知識が定着しないという問題に直面しました。

## アプローチの転換
この問題を解決するために、私は以下のようなアプローチの転換を試みました。

### 課題解決能力の向上
資格勉強を単なる暗記作業としてではなく、課題解決能力を向上させるためのケーススタディとして捉え直しました。具体的には、試験問題を自分ならどう解決するかを考えることで、実際の現場での応用力を養いました。

### 問題解決の思考プロセス
選択肢から正解を選ぶのではなく、問題を自分自身でどう解くかを深く考えるようにしました。これにより、問題の本質を理解し、解決策を導き出す力を身につけることができました。

### 自己解決能力の向上
問題の解説がいまいち分からない場合には、自分で調べ直すなど、アクティブな行動を取るようにしました。この過程で得られた知識は、単なる暗記よりも深く身につくことが多かったです。

## 前向きな勉強
このアプローチの転換により、資格勉強に対する苦手意識が大きく軽減されました。ケーススタディとして勉強を捉え直すことで、勉強が前向きになり、モチベーションも向上しました。

## おわりに
AWS Solution Architect Associateの資格取得を目指す方々にとって、課題解決能力を向上させるアプローチは非常に有効です。暗記に頼るのではなく、自分自身で問題を解決する力を養うことで、試験に合格するだけでなく、実際の業務においても役立つスキルを身につけることができます。皆さんもぜひ、自分に合った勉強方法を見つけ、前向きに挑戦してみてください。
`n`を使用してnodejsの開発環境構築やってみた

# はじめに
WSL2でNext.jsのプロジェクトを作成しようと思いましたが、nodeのバージョンが対応していなかったため、nodeのバージョンアップをする必要がありました。
nodeのバージョンアップ方法を探しているときに`n`というnodeのバージョン管理ツールが便利そうだったので使用することにしました。

[nのリポジトリ](https://github.com/tj/n)

# 環境
WSL2 Ubuntu22.04.4

# やったこと
## 1. nodejsとnpmの本体をインストール

apt updateは実行したうえで、以下のコードを実行します。
```bash
sudo apt install nodejs npm
```
これでnodeとnpmのインストールが完了しました。

## 2. nのインストール

```bash
sudo npm install -g n
```

上のコマンドでnのインストールができます。

## 3. lts(推奨版)のnodeをインストール
次にnを使って推奨版のnodeをインストールします。
```bash
sudo n lts
```

ちなみに最新版を使いたいときは、`lts`を`latest`に置き換えてください。

インストールができると以下のようなメッセージが表示されるかと思います。
```bash
Note: the node command changed location and the old location may be remembered in your current shell.
         old : /usr/bin/node
         new : /usr/local/bin/node
If "node --version" shows the old version then start a new shell, or reset the location hash with:
hash -r  (for bash, zsh, ash, dash, and ksh)
rehash   (for csh and tcsh)
```

現在のシェルは元々のnodeを参照したままなので、新しいシェルに変えるか`hash -r`または`rehash`コマンドを実行する必要があるといった内容です。

メッセージにもあるので間違えないと思いますが、自分が使っているシェルによって実行するコマンドが変わりますので注意してください。

nodeのインストールができているか確認してみましょう。
```bash
node -v
> v20.15.0
```

以上でnを使用した推奨版nodeの環境構築が完了しました。

最初にインストールしたnodeは使用しないので削除しておきましょう。
以下のコマンドで削除できます。

```bash
sudo apt purge nodejs npm
```

# おまけ

## 使用するnodeのバージョン切り替え
複数バージョンのnodeをnを使用してインストールしている場合、以下のコマンドでバージョン一覧の参照と切り替えができます。

```bash
n
```

nと打ち込むだけですね。

## nodeのバージョン削除

任意のバージョンのnodeを削除するときは以下のコマンドです。
```bash
n rm <バージョン番号>
```

現在使用しているバージョン以外のnodeを削除するときは以下のコマンドです。
```bash
n prune
```
自分用メモ AWS タスク定義 CloudFormationサンプル

AWSのCloudFormationでタスク定義作るサンプル。
ECS+Fargate+ECR+EFS。あとTomcat（これは名前しか登場しないか）。
タスクロールとタスク実行ロールは横着して同じの使ってます。

```
AWSTemplateFormatVersion: 2010-09-09

Parameters:
  ProjectName:
    Type: String
    Default: test

  ContainerImage:
    Type: String
    Default: <ECRのリポジトリURL>:<イメージのバージョン>
  EfsAccessPointId:
    Type: String
    Default: <アクセスポイントのID>
  EfsContainerPath:
    Type: String
    Default: <コンテナ内でEFSをマウントさせるパス>
  EfsFileSystemId:
    Type: String
    Default: <EFSのファイルシステムID>
  EcsExecRole:
    Type: String
    Default: <タスク実行ロールのARN>
  LogGroup:
    Type: String
    Default: <CloudWatchのロググループの名前>
  TomcatPort:
    Type: Number
    Default: <コンテナ側のポート（ここではTomcat使ってるのでこの名前）>

Resources:
  ECSTaskDefinition:
    Type: 'AWS::ECS::TaskDefinition'
    Properties:
      Family: !Sub ${ProjectName}-ecs-task-def
      TaskRoleArn: !Ref EcsExecRole
      ExecutionRoleArn: !Ref EcsExecRole
      NetworkMode: awsvpc      
      Cpu: 256
      Memory: 512
      RequiresCompatibilities:
        - FARGATE
      Volumes:
        - Name: !Sub ${ProjectName}-ecs-efs-volume
          EFSVolumeConfiguration:
            AuthorizationConfig:
              AccessPointId: !Ref EfsAccessPointId
            FileSystemId: !Ref EfsFileSystemId
            TransitEncryption: 'ENABLED'
      ContainerDefinitions:
        - Name: !Sub ${ProjectName}-ecs-container
          Image: !Ref ContainerImage
          Essential: true
          PortMappings:
            - ContainerPort: !Ref TomcatPort
              Protocol: tcp
          MountPoints:
            - SourceVolume: !Sub ${ProjectName}-ecs-efs-volume
              ContainerPath: !Ref EfsContainerPath
          LogConfiguration:
            LogDriver: awslogs
            Options:
              awslogs-group: !Ref LogGroup
              awslogs-region: !Ref 'AWS::Region'
              awslogs-stream-prefix: ecs
【Elastic Beanstalk】デプロイしたときにlibsass.soがないと言われた

どうもこんにちは。

今回は、Elastic Beanstalk環境にデプロイした時、libsass.soがないと言われたので、メモとして残します。

# 環境

## Ruby on Rails環境

Ruby 3.2.2
Rails 7.1.3.3
gem 'sassc-rails'を使用

## EB環境

Ruby 3.2 running on 64bit Amazon Linux 2023/4.0.7

## エラー内容

上記に示した状態でデプロイを実行すると以下のようなエラーが出てきます。

```
LoadError: Could not open library '/var/app/staging/vendor/bundle/ruby/3.2.0/gems/sassc-2.4.0/ext/libsass.so': /var/app/staging/vendor/bundle/ruby/3.2.0/gems/sassc-2.4.0/ext/libsass.so: cannot open shared object file: No such file or directory. (LoadError)
Searched in <system library path>, /usr/lib, /usr/local/lib, /opt/local/lib
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/ffi-1.16.3/lib/ffi/dynamic_library.rb:65:in `load_library'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/ffi-1.16.3/lib/ffi/library.rb:95:in `block in ffi_lib'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/ffi-1.16.3/lib/ffi/library.rb:94:in `map'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/ffi-1.16.3/lib/ffi/library.rb:94:in `ffi_lib'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/sassc-2.4.0/lib/sassc/native.rb:13:in `rescue in <module:Native>'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/sassc-2.4.0/lib/sassc/native.rb:10:in `<module:Native>'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/sassc-2.4.0/lib/sassc/native.rb:6:in `<module:SassC>'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/sassc-2.4.0/lib/sassc/native.rb:5:in `<main>'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/sassc-2.4.0/lib/sassc.rb:31:in `require_relative'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/sassc-2.4.0/lib/sassc.rb:31:in `<main>'
<internal:/usr/share/ruby3.2-rubygems/rubygems/core_ext/kernel_require.rb>:37:in `require'
<internal:/usr/share/ruby3.2-rubygems/rubygems/core_ext/kernel_require.rb>:37:in `require'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/bootsnap-1.18.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/zeitwerk-2.6.14/lib/zeitwerk/kernel.rb:34:in `require'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/sassc-rails-2.1.2/lib/sassc/rails.rb:5:in `<main>'
<internal:/usr/share/ruby3.2-rubygems/rubygems/core_ext/kernel_require.rb>:37:in `require'
<internal:/usr/share/ruby3.2-rubygems/rubygems/core_ext/kernel_require.rb>:37:in `require'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/bootsnap-1.18.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
/var/app/staging/vendor/bundle/ruby/3.2.0/gems/zeitwerk-2.6.14/lib/zeitwerk/kernel.rb:34:in `require'
/var/app/staging/config/application.rb:4:in `<top (required)>'
/var/app/staging/Rakefile:4:in `require_relative'
/var/app/staging/Rakefile:4:in `<top (required)>'
/opt/elasticbeanstalk/config/private/checkforraketask.rb:21:in `<top (required)>'
/bin/bundle:25:in `load'
/bin/bundle:25:in `<main>'
```

# 改善策

結論から言うと、Gemfileに以下を追記します。

```Gemfile
gem 'sassc', '2.1.0'
```

エラー内容から、`sassc-2.4.0`の`libsass.so`が開けないと言われています。
なら、「バージョンを下げてみよう」という発想です。
以下のサイトから、バージョン履歴を確認できるので、一つずつ`bundle install`を実行してデプロイを試してみると良いと思います。

https://rubygems.org/gems/sassc/versions

以上
FactoryBotのコールバックをスキップする方法

## これは何
とあるModelのコールバックメソッドの中身のテストしようとしたが、**FactoryBot**の　`after(:build)`　の存在に気付かず翻弄されたので、それをスキップする方法をまとめました。

- `after(:build)`
    - FactoryBot.build('hoge')が呼ばれた後に実行されるコールバック

## きっかけとなったコード

Memberモデルに定義してある、`assign_customer_id`メソッド内で正しくcustomer_idが設定されるかのテストを書いていました。
実際の動作テストでは成功しますが、RSpecのテストではcustomer_idが設定されずに成功しません。
尚、データ関連の生成には、基本的には**FactoryBot**を使用するようにしています。

```ruby:Modelの例
class Member < ApplicationRecord
  #　レコードが生成される直前に呼ばれるActiveRecordのコールバック
  before_create :assign_customer_id

  def assign_customer_id
    # 外部APIと連携してcustomer_idをセットするような処理
  end
end
```

```ruby:Rspecの例
  describe '#assign_customer_id' do
    subject do
      member.save!
    end

    let(:member) do
      build(:member)
    end

    it 'customer created' do
      subject
      # 正しくcustomer_idが設定されているかを確かめる処理
    end
  end
```

## 原因

今回テストしていたModelと対応するFactoryBot内で、`assign_customer_id`　のメソッドだけがモックに置き換わっているようでした。
そのため、FactoryBotを利用している限りは、絶対に `assign_customer_id` の中身が実行されない作りになってました。

```ruby:FactoryBotの例
FactoryBot.define do
  factory :member do
    name { FFaker::Internet.user_name }
    email { FFaker::Internet.email }
    customer_id { '' }

    transient do
      stubs { [:assign_customer_id] }
    end

    after(:build) do |member, evaluator|
      evaluator.stubs.each do |method|
        # ここでモックに置き換えられている
        receive = RSpec::Mocks::Matchers::Receive.new(method, -> {})
        RSpec::Mocks::AllowanceTarget.new(member).to receive
      end
    end
  end
end
```

記事ではさらっと書いていますが、頭の中にFactoryBotのコールバックに対する意識が抜けていたので、たどり着くまでに時間がかかりました。
※なぜモックになっているかは今回は説明を省きます。


## 対策
FactoryBotでデータを生成する際に、`skip_after_build`　を指定することで、`after(:build)`をスキップするようにします。

- `trait`
    - FactoryBot内でのデータを定義を簡素にするために用いるオプション
- `transient`
  - 作成するデータと直接関係無い新しいattributeを定義する機能
  - 挙動を変更するためのフラグ等に利用するのが一般的

```diff_ruby:FactoryBotの例
FactoryBot.define do
  factory :member do
    name { FFaker::Internet.user_name }
    email { FFaker::Internet.email }
    customer_id { '' }
    
+    trait :skip_after_build do
+      # 実際に作成するデータと直接関係無い新しいattributeを定義する機能。
+      transient do
+        skip_after_build { true }
+      end
+    end

    transient do
      stubs { [:assign_customer_id] }
    end

    after(:build) do |member, evaluator|
+      # skip_after_buildが定義されていたら処理をスキップする
+      unless defined? evaluator.skip_after_build
        evaluator.stubs.each do |method|
          # ここでモックに置き換えられている
          receive = RSpec::Mocks::Matchers::Receive.new(method, -> {})
          RSpec::Mocks::AllowanceTarget.new(member).to receive
        end
+      end
    end
  end
end
```

```diff_ruby:Rspecの例
  describe '#assign_customer_id' do
    subject do
      member.save!
    end

    let(:member) do
-      build(:team)
+      build(:team, :skip_after_build)
    end

    it 'customer created' do
      subject
      # 正しくcustomer_idが設定されているかを確かめる処理
    end
  end
```

これで無事に書きたいテストが書けました。
割とレアなケースな気がするため、需要があるかはわかりませんが、少しでも参考になれば幸いです。
【PowerShell】Seleniumのインストール/インポート

Install-Module -Name Selenium

Import-Module Selenium
Import-Module : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Program Files\WindowsPowerShell\Mod
ules\Selenium\3.0.1\SeleniumClasses.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https:
//go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ Import-Module Selenium
+ CategoryInfo          : セキュリティ エラー: (: ) [Import-Module]、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand

※上記のようなエラーが発生した場合の対処(ポリシーを変更する)
PS C:\Users\Administrator> Get-ExecutionPolicy
Restricted
PS C:\Users\Administrator> Get-ExecutionPolicy -List

Scope               ExecutionPolicy
-----               ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined


PS C:\Users\Administrator> Set-ExecutionPolicy RemoteSigned
PS C:\Users\Administrator> Get-ExecutionPolicy -List

Scope               ExecutionPolicy
-----               ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       RemoteSigned


PS C:\Users\Administrator> Import-Module Selenium

成功します。
【Ruby on Rails】学習メモ：配列のエラーにはまった話

今回は業務でRuby on Railsを用いたコーディングをするにあたって行き当たったエラーに関するメモを共有します。
初心者がこんなところでつまずいたよ、という記録を残していきたいと思いますので、近い境遇の方の助けになれば幸いです。

# 筆者のステータス
Ruby on Railsの初心者(学習中)
JavaやPerl等についてはいくらか経験あり

# 実現したかったこと
次のような構造の"data"から、配列"hogeDetails"に含まれる"hoge_id"を取得したいと考えました。
```Ruby
data ----- id
       |--- hogeDetails<Array>
                |--- hoge_id
                |--- hoge_name
                    ...
```

# 今回行き当たったエラー
上記の目的を実現するために、「data以下の要素を順に指定していけばよい」と考え、次のような実装を行いました。
```
hogeId = data.hogeDetails.hoge_id
```
ところが次のようなエラーが発生し、想定したように値が取れていません。
エラーメッセージの内容は、どうやら「指定したメソッドは未定義ですよ」といったもののようでした。
```
undefined method `hoge_id' for [#<hogeDetails id: 1, hoge_id: 123456, ......]:Array
```
hogeDetailsの配下にはhoge_idが間違いなく存在しているのになぜだろう、というのが今回詰まったポイントです。

# エラーの原因と解決策
このエラーの原因をひとことで言い表すと、「hoge_idを取得するための指定方法が間違っていた」ということになります。修正後の実装は次の通りです。
```
hogeId = data.hogeDetails[index].hoge_id
```
修正前の実装と比較すると、hogeDetailsに対してインデックスの指定をしていることがわかります。今回は「配列に対して要素位置を指定していなかったため発生したエラー」でした。例えるなら**荷物の送り状を作成するときに、宛先の建物名までは書いたものの部屋番号が抜けていた**ようなイメージでしょうか。

dataの構造も、より実際に即して表すと次のようになります。
```Ruby
data ----- id
      |--- hogeDetails<Array>
           |--- hogeDetails[0]　★配列hogeDetailsの要素のうち、どれを取得したいか指定する必要がある
                    |--- hoge_id
                    |--- hoge_name
                        ...
           |--- hogeDetails[1]
                    |--- hoge_id
                    |--- hoge_name
                        ...
```
分かってしまえば単純というか、非常に初歩的なミスだったと言えます。

# 気づいたこと・補足
自分以外の担当者が作成したソースコードに手を加える形で修正を行い、今回取り上げたエラーに遭遇しました。データの構造も設計書やログ等で確認しながらの作業だったため、理解が不十分だったところもありました。
特に初めて触れるソースコードや不慣れな言語の場合はちょっとしたミスでも解決までに時間を要することがあり、改めて日々の学習の大切さを実感しました。
今後の記事でも、学習の中で得たちょっとした気づきを共有していければと思います。
leJOSって周辺ツールがいいよねって話

![EV3ControlCenter](https://storage.googleapis.com/zenn-user-upload/108d88cad8c7-20230915.png)
今回はインストールしたleJOSソフトウェアの中に同封されている、「EV3 Control Center」を使ってみます。
Windowsスタートメニューのアプリ一覧を確認すると「leJOS」フォルダの中にいくつかのアプリが入っているので、今回は「EV3 Control」を開いてください。
「Name:」のところには何も入れずに、「Search」を押してください。少し待つと右の四角の中に、PCに接続してあるEV3の名前が出てくるはずなので、マウスで選択し「Connect」を押します。左のEV3のStatusがCONNECTEDになれば接続成功です。

# 操作説明
基本的にleJOSのメニュー画面とできることは同じなので、leJOSではできないことのみを紹介します。
## Programs
「Upload file」でファイルのアップロードなどのファイル操作が可能です。
このあと紹介するEclipse以外の開発環境を使う人は、基本ここでアップロードすることになると思います。
「Run program」で遠隔で実行することもできます。

## Console
上の段ではシステムのログを見ることができます。
下の段ではEV3の遠隔操作ができます。各ボタンを押すとEV3上で押された判定になります。
ただプログラム実行中は使えないという欠陥があります。

なぜかLED patternからEV3のLEDの色を変えることができます。

## Sensors
何かと便利なのが左に表示される小数点3桁までのバッテリー残量。
それ以外は基本EV3側と同じ使い方ですがリアルタイムに情報は取得するときは負荷がかかるので「Continuous」を押す必要があります。ただ2秒ほどラグがあるので、見たいタイミングで「Update」を押して手動で更新するほうがいいかもしれません。
センサーの確認が終わったら、軽くするために「Stop」を押して止めてください。

## Motors
モーターの速度を設定して動かすことができます。動かしたいモーターの「Selected」にチェックを入れ、下の「Forward」や「Backward」を押すとモーターが回転します。「Turn Left」や「Turn Right」はモーターを二つ選択した状態で使用します。
「Reverse」でデフォルトの回転方向を変更できます。

## Images
pngのモノクロ画像をleJOSで使えるデータ配列に変換することができます。

# おわりに
この辺がPCからできる便利な機能はこれぐらいです。
他にもいくつか機能がありますが、あまり使う機会はないかなと思います。

# おまけ
実はleJOSには、スタートメニューにピン止めされていないソフトウェアがいくつか同封されています。
```
C:\Program Files\leJOS EV3\bin
```
デフォルトでは上の場所にインストールされているはずです。
「EV3 SD Card Creator」というファイルがインストール場所にあるので、こちらを使ってSDカードにデータを焼くのがおすすめです。
Java奮闘記: JARファイルって初めて見るぞ

# はじめに

## 筆者について
新卒3年目のデータエンジニアです.

- https://github.com/KazuSh1geru
- https://www.linkedin.com/in/%E5%92%8C%E5%8F%B2-%E9%AB%98%E8%8D%89%E6%9C%A8-7b912b2a6/

## 執筆の背景
初めてJARファイルを作成しようとした時、そのプロセスが意外と複雑であること、そして必要な情報がWeb上に十分に存在しないことに気づきました。これが、JARファイルの作成過程を詳細に解説するブログを書くことにした主な理由です。
このブログを通じて、同じような課題に直面するかもしれない他の開発者たちに向けて、参考となるTIPSを提供したいと思います。

## JARファイルとは何か？
Java ARchiveの略で、Javaクラスファイルとリソースを一つのファイルにまとめたものです。
依存関係を含めて配布や実行が簡単になるため、Javaアプリケーションの管理と配布を効率的に行うことができます。

私は初めてJARファイルを触るきっかけとしては、SalesforceからGCP(BigQuery)へのデータパイプラインを開発がありました.
データパイプラインのパッケージとして、ApacheベースのSalesforceプラグインを使用しています.
このプラグインをJAR形式で保持する必要があります。


# しくじり0: 欲しいファイル(JAR)が全然検索にヒットしない..
ゆとりエンジニアである私は、開発に用いるパッケージはパッケージ管理ツールでバージョン指定すれば手に入ると思っていました.
そうでなくても、公式ページのアーカイブページからダウンロードできるものだと思っていました.

:::note info
ないパッケージは、自分で作る！
:::


# しくじり1: Javaプロジェクトをどうパッケージ化すればいいか？がわからない

今回開発したデータパイプライン（Cloud Data Fusion）が[CDAP](https://cdap.atlassian.net/wiki/spaces/DOCS/overview)に依存していました。
CDAPとは、マルチクラウド環境でデータアプリケーションを構築・管理するためのアプリケーションプラットフォームです。
そのCDAPがJAVAで作成されていました。

紆余曲折あって、下記のパッケージまで辿り着きました。
https://github.com/data-integrations/salesforce/releases/tag/v1.6.2

これをプラグインとしてパッケージングできれば勝ちです。が、パッケージってどうやって作るんだ？となりました。
結論としては、mavenというJavaプロジェクトの管理ツールを使えば良いことまで分かりました.

:::note info
プロジェクト管理ツールを使ってパッケージを作れるぞ。
:::

Pythonで言えば`pyproject.toml`があるように、他のプロジェクトでもパッケージ化するための方法がある前提を持つ。

# しくじり2: パッケージ管理ツールの過去バージョンが見当たらない

mavenのバージョン3.6.3が必要だったのですが、ダウンロードページは最新版のみでした。
https://maven.apache.org/download.cgi

リリースノートはあるけど、ダウンロードできない.
https://maven.apache.org/ref/3.6.3

arvhiveはドメイン自体が別にあった.
https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

:::note info
アーカイブ版は目立たないところにあるぞ！
:::

この後、mavenを使用して無事JARファイルは作れました。

# 学び

扱い慣れていないファイルやパッケージは初めに使い方やコンセプトを理解すべきだと思いました。
それとともに、一般的なファイルの扱い方を参考にすべきだと思いました。
gem が build できなかった (MAKEDIRS)

## とある gem がビルド できなかった．

具体的には，`Makefile` で `MAKEDIRS` が動いてなかった

```make:Makefile
(snip)
MAKEDIRS = /usr/local/bin/gmkdir -p
(snip)
```

```
$ ls -l /usr/local/bin/gmkdir
lsd: /usr/local/bin/gmkdir: No such file or directory (os error 2).
```

どこかのタイミングで coreutils を消してしまったのかもしれない．

## これの由来を確認すると

```rbconfig.rb
  CONFIG["MAKEDIRS"] = "/usr/local/bin/gmkdir -p"
```

ということで，おそらく ruby-build 時に固定されているものみたい．

ビルドしなおすと，存在するパスになった．

```rbconfig.rb
  CONFIG["MAKEDIRS"] = "mkdir -p"
```

ビルドしなおすのが面倒なときはbuild時だけ上書きできてもいい．気はするけど，
今後のこともあるのでビルドしなおしで対応した．

## Refs

- https://qiita.com/hatobeam75/items/c478af9bffffde3eb981
- https://qiita.com/labocho/items/c998791ab37e93ccb924
useRecoilを使ってみる

RecoilはReactのHooksです。
アプリケーション全体で状態を管理できます。
(※Recoilプロジェクトの最終更新は2023年9月,,,,)
https://github.com/facebookexperimental/Recoil

# まずは導入
任意のReactプロジェクトを作成し、Recoilを導入します。

```Bash
$ npm create vite@latest // recoil-sample-app として作成
$ cd recoil-sample-app
$ npm install recoil
$ npm install
```

まずはRecoioを使えるようにコンポーネントをRecoilRootで囲みます。

```tsx:App.tsx
import { RecoilRoot } from "recoil";
import SampleComponent from "./SampleComponent";

function App() {
  return (
    <>
      <RecoilRoot>
        <SampleComponent />
        <SampleComponent />
      </RecoilRoot>
    </>
  );
}

export default App;
```

Recoilでは状態を管理するのにAtomを用います。
作成したAtomはkeyで呼び出すことが出来ます。
```ts:SampleAtom.ts
import { atom } from "recoil";

export const SampleAtom = atom({
  key: "SampleAtom",
  default: 0,
});

```

Recoilを使うコンポーネントは以下のように、useStateとの比較が出来るように簡単に作りました。
```tsx:SampleComponent.tsx
import { FC } from "react";
import { useState } from "react";
import { useRecoilState } from "recoil";
import { SampleAtom } from "./SampleAtom";

const SampleComponent: FC = () => {
  const [state, setState] = useState(0);
  const onClickState = () => {
    setState(state + 1);
  };
  const [recoil, setRecoil] = useRecoilState(SampleAtom);
  const onClickRecoil = () => {
    setRecoil(recoil + 1);
  };
  return (
    <>
      <div className="state">
        <button onClick={onClickState}>Stateのボタン</button>
        <p>Stateの値:{state} </p>
      </div>
      <div className="recoil">
        <button onClick={onClickRecoil}>Recoilのボタン</button>
        <p>Recoilの値:{recoil} </p>
      </div>
    </>
  );
};

export default SampleComponent;

```

# 動作確認

![Animation2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2779836/555ae778-622d-a0dd-6d04-b57bb1485c0d.gif)


useStateは当たり前ですが、自コンポーネントのみで値を管理します。
recoilはコンポーネント間で値を共有できていることを確認出来ました。
簡単ですね。便利です。
（なんでRecoilの更新止まっちゃったんだろう...安心してプロジェクトでは使えないじゃん）

今回は、一番基本のhooks「useRecoilState」のみを扱いましたが、ほかにもたくさん用意されています。
Contextとの比較をしつつ今後紹介していこうと思っています。

以上！
明瞭さを捉える： 写真のノイズを抑えるガイド

写真は瞬間を捉る芸術です。しかし、ノイズは写真の完璧さを損なうことがあります。この記事では、写真におけるノイズの原因、ノイズの種類、およびカメラマンがノイズを減らす方法について探求します。

### ノイズの起源
ノイズは主に2つのソースから生じます：ショットノイズとデジタルノイズです。ショットノイズは光のランダムな動作の結果であり、デジタルノイズはカメラのセンサーと電子部品からのものです。光が不足している時には、カメラマンはより多くの光を捉えるためにISOを上げますが、これもノイズを増やす原因となります。

#### ショットノイズ
ショットノイズは、光子のセンサーへのランダムな当たり方により発生します。このランダム性は明度の変化を作り出し、ノイズを形成します。

#### デジタルノイズ
デジタルノイズはカメラの電子部品に関連しています。ISO設定が高くなると、このノイズが増大し、より目立つようになります。

### ノイズの種類
#### 明度ノイズ（Luminance Noise）
明度ノイズは、写真にグラINYな斑点が見えるものです。画像の暗い部分で特に目立ちます。

#### 色度ノイズ（Chroma Noise）
色度ノイズは、ランダムに色付きのピクセルが現れるものです。それは気分を害し、写真の品質を低下させます。

### ノイズを最小限に抑える技術
カメラマンは、ノイズを減らすために以下の技術を使用できます：

- **低いISO設定**：照明状況に応じて可能な限り低いISOを使用します。
- **カメラの安定性**：三脚を使ってリモートシャッターを利用して、カメラの揺れを避けます。
- **RAWフォーマット**：ポストプロセスのためにより多くのデータを得るためにRAWで撮影します。

### ノイズ削減のための高度な技術
新しい技術は、ノイズを減らすために提供しています：

- **空間域方法**はピクセルブロックを分析して、詳細を保持しながらノイズを削減します。
- **変換技術**は画像を別のドメインに変換してノイズを削減します。
- **機械学習**はトレーニング済みのモデルを使用して、ノイズを特定し、画像の詳細を維持しながら削減します。

### ノイズ削減のためのポストプロセス
ポストプロセスはノイズ削減にとって非常に重要です。Adobe Photoshopのようなソフトウェアを使用することで、カメラマンは以下を行うことができます：

- ノイズ削減の**強度**を調整します。
- **詳細を保持**してエッジをシャープに保ちます。
- **色ノイズを減らし**てランダムな色ピクセルを排除します。
- **詳細をシャープに**して画像の明確さを回復させます。

### ケーススタディ
夜間にISO 3200でシティスケープを撮影するカメラマンを想像してみてください。画像は多分にノイズがあるでしょう。Photoshopを使用することで、カメラマンは以下を行うことができます：

- ノイズ削減の**強度**を中程度に設定して明度の変化を減らします。
- **詳細を保持**機能を使って画像のシャープさを保ちます。
- **色ノイズを減らし**て色付きのピクセルを取り除きます。
- **詳細をシャープに**して画像の明確さを高めます。

### 結論
ノイズは写真における課題ですが、乗り越えられるものです。正しい技術や技術を用いることにより、カメラマンはノイズを制御し、削減することができます。カメラの設定を調整したり、ポストプロセスツールを使用したりするなど、画像の品質を向上させる方法があります。技術が進歩するにつれて、さらに良いノイズ削減方法が期待され、よりクリアで印象的な画像を撮影できるでしょう。


（記事転載：）
https://www.sinoseen.com/taming-noise-in-photography-guide
rails s

# -p
サーバを起動するときのポート番号を指定(初期値:3000)
# -b
バインドするIPアドレスを指定(初期値:0.0.0.0)

### 気づき
このオプションを使うことで開くポート、IPアドレスを指定できる。

これでapacheからのリクエストすることができる。

# 出典
https://railsdoc.com/page/rails_server

# 感想
apサーバ、webサーバにapcheやpumaがあるおかげでhttpの通信ができているのかもしれない。
知らないことだらけだ。

# 関連記事
https://qiita.com/masatom86650860/items/2c438d910cb17d7b557f
action-slackを使って複数のグループへメンションする

## これはなに
- 業務上で得た知識をメモるだけ
- 他人が読む前提で書いていません

## action-slackとは
- GithubActionsの結果をトリガーにSlack通知ができたりする
    - ワークフローが特定の状態（PRがOpend/Closedになったなど）になったら通知するとか
- 機能はシンプルだけどやりたいことは普通にできた

## 何がしたかったか
- 自チームの修正のうち、他チームに影響するPRを自動で通知する
    - 他チームへ影響がある修正をしたにも関わらず、連絡が漏れしてしまった事象の再発防止
- 開発ブランチへのマージ時、特定ディレクトリ配下に変更があったら、自チーム宛＋他チーム宛にメンションする
    - 他チームも含めることにより半強制的に連絡させる

## 詰まったところ
[公式](https://action-slack.netlify.app/usage/with/#mention)をみる感じ、以下の感じでいけると思いきや、テストしてもうまくいかない
~~~
with:
    mention: 'subteam^XXXXXXXXX,subteam^YYYYYYYYY'
~~~
書き方が違うのかと思い、`<!subteam^XXXXXXXXX>`のように書いてみたがダメだった
（ちなみに、`<!` は自動で保管される模様）

何が悪かったのかと思い公式を眺めていたら、以下記述があることに気づく
~~~
if_mention: 'xxxxxxx'
~~~
結論、以下のコードで動いた
~~~
with:
    mention: 'subteam^XXXXXXXXX,subteam^YYYYYYYYY'
    if_mention: 'always'
~~~

## 所感
`if_mention`なので常に通知する際は不要かと思ったが、無いとメンションが有効にならないっぽい
`always`パラメータを発見した際はびっくり、、、公式通りにやるのが一番ってことか
AWSとGoogle Cloudのリージョン

## はじめに
AWSを主に使っていて、Google Cloudを最近使う機会がありリージョンの記述に違いがあったのでまとめました。
主に東京と大阪について記述しています。

## AWS
- アジアパシフィック (東京)
    - ap-northeast-1

- アジアパシフィック (大阪)
    - ap-northeast-3

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions

## Google Cloud
- asia-northeast1-a	東京（日本、APAC）
- asia-northeast1-b	東京（日本、APAC）
- asia-northeast1-c	東京（日本、APAC）
- asia-northeast2-a	大阪（日本、APAC）
- asia-northeast2-b	大阪（日本、APAC）
- asia-northeast2-c	大阪（日本、APAC）

https://cloud.google.com/compute/docs/regions-zones?hl=ja

## まとめ
awsは`ap-northeast-1`,gcpは`asia-northeast1-a`を選んでおけば良いかと思います。
【Python】処理時間の計測にはtime.time()ではなく、time.monotonic()またはtime.perf_counter()を使う

処理時間の計測にはtime.time()ではなく、time.monotonic()またはtime.perf_counter()を使うとよい。
（せめて、time.monotonic()。）

## 理由

time.time()は、システムの日時変更の影響を受けるため、正確な時間計測には適していない。

### time.time() ※いまいちな例

```python
import time

start = time.time()
# 実行する処理
time.sleep(2)
end = time.time()

print(f"処理時間: {end - start} 秒")
```

上記のコードはシステムの日時が変更された場合、正確な計測ができない。

### time.monotonic
time.monotonic()は単調増加するクロックの値を返す。このクロックはシステムの日時変更の影響を受けない。

```python
import time

start = time.monotonic()
# 実行する処理
time.sleep(2)
end = time.monotonic()

print(f"処理時間: {end - start} 秒")
```

### time.perf_counter
time.perf_counter()は高解像度のパフォーマンスカウンタの値を返す。これもシステムの日時変更の影響を受けない。さらに高精度。

```python
import time

start = time.perf_counter()
# 実行する処理
time.sleep(2)
end = time.perf_counter()

print(f"処理時間: {end - start} 秒")
```

特に高精度な計測が必要な場合に有用（パフォーマンスチューニングや詳細なプロファイリングを行う場合）。


# 参考
https://docs.python.org/ja/3/library/time.html#time.monotonic

https://atmarkit.itmedia.co.jp/ait/articles/2307/18/news015.html
開発見積もりの合意を得る秘訣：プランニングポーカーを使いこなそう

## プランニングポーカーとは？

プランニングポーカーは、アジャイルソフトウェア開発における見積もり手法の一つです。
開発チームがストーリーポイントやタスクの見積もりを行う際に用いられます。
この手法は、チーム全員が意見を出しやすくし、合意に達するのを助けます。

## プランニングポーカーのメリット

- **チームの合意を得やすい**：
    各メンバーが独自に見積もりを出すことで、偏った見積もりを防ぎます。
- **コミュニケーションの促進**：
    見積もりの違いを議論することで、タスクの理解を深め、チームのコミュニケーションを促進します。
- **過去の経験を反映しやすい**：
    経験豊富なメンバーと新人メンバーが同じテーブルで議論することで、過去の経験が見積もりに反映されやすくなります。

## プランニングポーカーの進め方

1. **準備**：
    チーム全員にプランニングポーカーカード（1, 2, 3, 5, 8, 13, 20, 40, 100のようなフィボナッチ数列やTシャツサイズなど）を配ります。
2. **アイテムの選定**：
    見積もり対象のユーザーストーリーやタスクを選びます。
3. **説明**：
    プロダクトオーナーが選んだアイテムについて説明し、質問に答えます。
4. **見積もり**：
    各メンバーが一斉に自分の見積もりをカードで提示します。いっせーので出すイメージ！
5. **議論**：
    見積もりに大きな差があった場合、理由を議論します。特に高い見積もりと低い見積もりを出したメンバーがその理由を説明します。
6. **再見積もり**：
    必要に応じて再度見積もりを行い、合意に達するまで繰り返します。

## プランニングポーカーの実践例

例えば、新しい機能の追加にかかる工数を見積もる場合、以下のように進めます。

1. **説明**：
    プロダクトオーナーが「新しいログイン画面のデザイン変更」について説明します。
2. **見積もり**：
    各メンバーがそれぞれ「5（中程度の工数）」「8（やや多い工数）」「13（多い工数）」のように提示します。
3. **議論**：
    「5」と「13」を出したメンバーが理由を説明し、例えば「デザイン変更は簡単だが、バックエンドとの連携が複雑」という見解が出ます。
4. **再見積もり**：
    再度見積もりを行い、「8」で全員が合意することになります。

## プランニングポーカーのコツと注意点

- **適切なサイズのタスクを選ぶ**：
    あまりに大きすぎるタスクは細分化してから見積もりを行います。
- **全員の意見を尊重する**：
    見積もりの際には、全員が意見を出し合うことが重要です。特に新しいメンバーや経験の浅いメンバーの意見も大切にします。
- **フィードバックを重視する**：
    見積もり後には振り返りを行い、プロセスの改善点を見つけます。

## まとめ

プランニングポーカーは、アジャイルチームが効果的に見積もりを行うための強力なツールです。
チームのコミュニケーションを促進し、合意に基づいた見積もりを行うことで、プロジェクトの成功に寄与します。


ありがとうございました。
init.luaでのskkeleton導入

## 初めに
SKKって良いですよね
PowerPointとの相性が悪いので使うのをやめていましたが
SKKeltonの存在をvim-jpのslackで知り、Neovimの時だけでも使ってみようと思いました

ですが、Web検索で見つかる設定方法がVimScriptばかりなのとWebの記事と実装の乖離があり、苦労しましたので記事にしておきます

## 設定内容
おそらく最低限の内容ですが、下の設定で動いています
今後、使いながら調整していきます

### Lazy
```lazy-conf.lua
   {
        'vim-skk/skkeleton',
        dependencies = {
            "vim-denops/denops.vim",
            "Shougo/ddc.vim",
            "Shougo/ddc-ui-native",
        },
        config = function()
            vim.fn["skkeleton#config"]({
                globalDictionaries = { '~/.config/eskk/SKK-JISYO.L' },
                eggLikeNewline = true,
            })
            vim.fn["ddc#custom#patch_global"]('ui', 'native')
            vim.fn["ddc#custom#patch_global"]('sources', { 'skkeleton' })
            vim.fn["ddc#custom#patch_global"]({
                sourceOptions = {
                    ["skkeleton"] = {
                        mark = 'skkeleton',
                        matchers = {},
                        sorters = {},
                        converters = {},
                        isVolatile = true,
                        minAutoCompleteLength = 1,
                    },
                }
            })
            vim.fn["ddc#enable"]()
        end
    },
```

### Keymap
```keymap.lua
vim.keymap.set({ "i", "c" }, [[<C-j>]], [[<Plug>(skkeleton-enable)]], { noremap = false })
```

## ポイント
ハマったのは、辞書ファイルの設定で[新しいVim用日本語入力プラグインを作った](https://zenn.dev/kuu/articles/vac2021-skkeleton)にある通り辞書ファイルのパスを「globalJisyo」に設定してもダメで「globalDictionaries」に配列で渡さないとダメでした

:::note warn 
7/2 13:00 追記
SSKeleton作者のkuu氏より、記事を修正されたのコメントを頂きました
上記ブログの方法で辞書ファイルへの参照設定は問題なく出来ます
:::


[ドキュメント](https://github.com/vim-skk/skkeleton/blob/main/doc/skkeleton.jax
)を確認すると

:::note info
2024-01-11~
- "globalJisyo" オプションと "globalJisyoEncoding" オプションの削除
- "userJisyo" オプションは "userDictionary" オプションに変更
- "immediatelyJisyoRW" オプションは "immediatelyDictionaryRW" オプションに変更
:::
の通り、パラメータが無くなっているので当然と言えば当然なんですが


この記事がどなたかのお役に立つと嬉しいです
Persistent Volumeを削除せず、新しいPersistent Volume Claimに付け替える

# はじめに
Kubernetesを利用しているプロジェクトでは、各種リソースのマニフェストファイルをIaCで管理していることがほとんどだと思います。
そんな中、裏技的な方法で既存のPersistent Volumeを削除することなく、新しいPersistent Volume Claimに紐付ける方法を知ったので共有したいと思います！（同一StorageClass間）

## 前提知識
Persistent Volume Claimの実体がPersistent Volumeという位置付けのリソースです。
詳細について、公式ドキュメントをご一読すると理解が捗ります。
https://kubernetes.io/ja/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims

## 付け替え前の事前準備
- 付け替えたいPVのマニフェストを編集し、persistentVolumeReclaimPolicyを「Retain」に設定（kubectl patchでも恐らく設定可能）
:::note alert
確認せずに作業を始めてしまうと大切なデータが消失します
:::

## 付け替え手順
1. PVCをマウントしているリソースがない状態にする
2. PVCが削除されたタイミングで付け替え対象のPVは「Released」ステータスで残り続けます
3. 付け替えPVのclaimRef(PVC参照)の設定値を編集すると、PVは「Avaiable」ステータスとなる
    - 編集：`name`
    - 削除：`resourceVersion`、`uid`
4. 付け替え先PVCのマニフェストを適用し、完了

# 終わりに
以上が簡単な付け替えの手順です。
私も付け替えを実際にやってみるまでは半信半疑だったのですが、問題なく付け替えられました！
大容量データの同期には結構な時間が掛かるため、単純な名前変更などで付け替えできる時には付け替えてしまうと手っ取り早い気がしました！
皆さんも是非お試しあれ！
Privacy Nutrition Label Typesデータ項目が自動で追加されている

## Privacy ManifestのPrivacy Nutrition Label Typesにデータ項目が自動で追加される

### はじめに
今回は、新しく作成した `Privacy manifest` が、最終確認時に
`Privacy Nutrition Label Types` に自動で
データ項目が追加されていた事象について共有します。

:::note info
以前`Privacy manifest` を対応していた時には`Privacy Nutrition Label Types` に自動で項目は追加されていませんでした。
:::

### 問題
 `Privacy manifest` を新規作成し、その内容を `PDF` で出力した際
 身に覚えのないデータが含まれていることに気づきました。

### 調査の結果
`Firebase Messaging` の`Privacy manifest` 対応により
 `Privacy Nutrition Label Types` に追加されていました。

```plaintext
自動で追加されたPrivacy manifestのパス:
Runner.app/Frameworks/FirebaseMessaging.framework/FirebaseMessaging_Privacy.bundle/PrivacyInfo.xcprivacy
```

### 確認したリポジトリ
`Firebase Messaging` のリポジトリを確認すると、以下のリンクに
`Privacy manifest` の設定が含まれており、自動でデータが追加されていることが
確認できます。

https://github.com/firebase/flutterfire/blob/master/packages/firebase_messaging/firebase_messaging/ios/Resources/PrivacyInfo.xcprivacy

### 追加されたデータの確認
実際に追加されたデータ項目の `PDF` は以下のとおりです。

![追加されたPDFのスクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637125/ac44b663-a5b0-56c3-a0fe-ee3c329c3923.png)

### 開発者の対応
自動で追加される項目に関して開発者は手動で追加する必要はありません。
必要な項目のみを追加してください。

### まとめ
`Privacy manifest` 対応のサードパーティーSDKを使用する際は、データ項目が自動で追加されることに注意し、必要なデータのみを確認して追加するようにしましょう。

また、 `Privacy manifest`　の対応方法に関して記事を投稿していますのでご覧ください。

https://qiita.com/kskg4/items/9d93f9707c43d9083ea3

# 告知
最後にお知らせとなりますが、イーディーエーでは一緒に働くエンジニアを
募集しております。詳しくは採用情報ページをご確認ください。

https://eda-inc.jp/recruit/

みなさまからのご応募をお待ちしております。
react-to-print borderが効かない

## はじめに
react-to-printを使って、印刷用のページを作成していてcssのborderが効かない問題が発生しました。
解決したので、その方法を記載します。
Chakra UIを使用しているので、Chakra UIのコンポーネントを使用していますが、他のスタイル記述方法で同じ問題が起きるかどうかは確認できていません。

https://www.npmjs.com/package/react-to-print

## 問題のコード
以下のコードはChakra UIのコンポーネントを使用しています。
できなかった例では、`borderStyle`,`border`,`borderColor`をそれぞれ分けて記述しています。

![before](https://scrapbox.io/files/659ba67148a59600242c38ee.png)

ボーダーが反映された例では、`border`にまとめて記述しています。

![after](https://scrapbox.io/files/659ba68abe3c77002465f90f.png)

## おわりに
一人でも多くの方が解決できたら幸いです。
NVIDIA Visual Profiler が起動しない

Java 11 では動きません。Java 8 で動きます。
```
$ sudo apt install openjdk-8-jdk
$ sudo update-alternatives --config java
alternative java (/usr/bin/java を提供) には 2 個の選択肢があります。

  選択肢    パス                                          優先度  状態
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      自動モード
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1111      手動モード
* 2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      手動モード

現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください: 2
```
論文解説：Rethinking Visibility in Human Pose Estimation: Occluded Pose Reasoning via Transformers

## 論文解説
WACV論文　2024年に投稿されたばかりのものです．
自分のまとめのついでに書いているので、説明に加えて時々自分のメモが書かれています．
もし記事内に間違いがあったらご指摘いただけると幸いです．

[原著論文](https://openaccess.thecvf.com/content/WACV2024/papers/Sun_Rethinking_Visibility_in_Human_Pose_Estimation_Occluded_Pose_Reasoning_via_WACV_2024_paper.pdf)
[code](https://github.com/pengzhansun/Occluded-Pose-Reasoning)
記事内で使用される画像はすべて原著論文を参考にしています．

---

この論文「Rethinking Visibility in Human Pose Estimation: Occluded Pose Reasoning via Transformers」は、人間のポーズ推定における視認性に関する再考と、Transformersを用いた遮蔽されたポーズ推論に焦点を当てている．以下に要約と解説を示す．

## この論文の貢献した点
1. 可視性に関係なく（可視性は評価で考慮される）キーポイントすべてを使って学習する場合、遮蔽されたキーポイントを学習することが、可視点を予測するタスクにおいて悪影響を与える
1. 遮蔽処理のための新しいモジュールの提案
1. 既存のモデルに追加し、精度が向上することを確認した

## Abstract
Occlusion（遮蔽）は人間のポーズ推定における一般的な課題．遮蔽されたキーポイントを学習することは、モデルが視認可能なキーポイントを検出する能力を損なう可能性がある．この損害が遮蔽を視覚的特徴と無理に関連付けることに起因すると推測している．
そのため、信頼性の低い遮蔽された特徴を排除するVisibility-aware attention mechanism（視認性に配慮した注意メカニズム）を提案している．
この方法により、モデルは視認可能なキーポイントの証拠と文脈情報を用いて遮蔽されたキーポイントを推論することが促される．

## 方法
### Observational Study on Occlusion
遮蔽がポーズ推定に及ぼす影響を定量的に観察するための実験を実施．Visible（視認可能）なキーポイントのみを使用して訓練するモデルと、全てのキーポイントを使用するモデルを比較した結果、当然、遮蔽領域の予測はデフォルトのモデルの方が精度は高いが、視認可能なキーポイントのみを使用する方が可視できる点についての精度は高いことが判明（遮蔽領域のキーポイントを学習することで可視点のキーポイントの精度も下げる）．

:::note info
視認可能性について書いているが、視認性はどう定義されているのかよくわからない．例えば、着ぐるみを着ている人物がいたら視認性は無い？自転車に乗っている人物がいる時、車輪の向こう側にある足の視認性はない？
cocodatasetを見てみても詳しい説明はなさそうだった．
:::

## model構造

### Visibility Prediction and Keypoint Masking
MLP（Multi-Layer Perceptron）であるVisNetを用いて、各キーポイントの視認性を予測する．予測された視認性に基づいて、遮蔽されたキーポイントの特徴をマスクし、残りのキーポイントの特徴をTransformerブロックに入力する．これにより、視認可能なキーポイントの特徴に基づいて遮蔽されたキーポイントを推論することが可能になる．

### Keypoint Reasoning with Transformers
Visibility-guided masked featureを入力として、視認性に基づくattentionを用いてキーポイントを推論する．Transformerブロックは、視認可能なキーポイントの特徴を強化し、遮蔽されたキーポイントの推論を支援する．

### Loss Function
視認性の二値分類を監督するために、標準のcross-entropy lossを用いる．また、全体の損失関数は、ポーズ推定の損失と視認性の損失の組み合わせとして定義される．

### Model Architecture
以上の要素を組み込むことで、従来のtop-down手法とは異なり、可視性も考慮したモデル構造を実現している．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2323577/5989623c-b8b5-05cc-f7d2-9d0fc433c4f0.png)

## 実験
### MSCOCO Keypoint Detection
MSCOCOデータセットを用いた実験では、提案手法がSimCCモデルを上回る性能を示した．特に視認可能なキーポイントと遮蔽されたキーポイントの両方で性能が向上した．

### CrowdPose Keypoint Detection
CrowdPoseデータセットを用いた実験でも、提案手法が視認性に基づく推論により、視認可能なキーポイントと遮蔽されたキーポイントの両方で性能を向上させた．

### Ablation Study
Visibility-guided masking strategyが最終結果に寄与することを示すためのアブレーションスタディを実施．Transformerブロックを用いた場合に比べ、visibility-guided masking strategyを適用することで大幅な性能向上が見られた．

## 結論
本論文では、遮蔽されたキーポイントが視認可能なキーポイントの予測に干渉することを定量的に観察し、視認性に基づくフレームワークを提案した．この方法により、モデルは視認性の属性を学習し、視認可能なキーポイントの特徴に基づいて遮蔽されたキーポイントを推論することが可能になる．提案手法は既存の姿勢推定モデルに容易に統合でき、MSCOCOおよびCrowdPoseデータセットで性能向上を示した．
CodeIgniter3でMailpitを使ってlocalhost内でメール送信

# はじめに
少々レガシーかもしれませんがDocker/CodeIgniter3を使ってローカル環境で開発をしている際、「メール配信処理もMailpitを利用してローカル環境内で完結させたい」というケースに対するTIPSです。ドキュメントや参考事例が見当たらなかったので備忘録です。

https://mailpit.axllent.org/

# Laravel
LaravelではMailpitが標準でサポートされており、まずDockerでイメージを指定してコンテナをデプロイします。

```yaml: docker-compose.yml
    mailpit:
        image: axllent/mailpit:v1.8
        container_name: mailpit
        ports:
            - "8025:8025"
            - "1025:1025"
        environment:
            MP_DATA_FILE: /tmp/mailpit.db
        volumes:
            - /path/to/local/development_project/docker/mailpit/tmp:/tmp
```

次にLaravel側の.envファイルで以下のように指定するだけで簡単に導入できます。

```php:.env
MAIL_HOST=mailpit
```

ローカル環境のサーバからメールを送信するとMailpit（標準では http://localhost:8025 にWebのUIが立ち上がる）にメールが届きます。なんと便利…。

# CodeIgniter3
対してCoodeIgniter3ではキュメントやソースコード上ではMailpitに対応しているような記述はありませんでした。ですがメール送信を担当するEmailクラスのconfigを確認すると`protocol`として以下が選択できるようです。
> mail、sendmail、または smtp

https://codeigniter.jp/user_guide/3/libraries/email.html#id5

WebサーバにSendmail/PostfixなどMTAがインストールされていればエイリアスが効いて**sendmail**で問題ないと思いますが、別のサーバのSMTPを使いたい場合は**smtp**を使うのが良さそうです。

`smtp_host`でSMTPサーバを指定でます。マニュアルには「SMTP サーバのアドレス」とありますが、ここではDockerで指定したホスト名である**mailpit**を、`smtp_port`はMailpitのsmtp inboundポートである**1025**番を指定します。

```php:Emailクラス config
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'mailpit';
$config['smtp_port'] = '1025';
```

この設定でテストしていたのですが、CodeIngiter側でエラーが発生してしまいました。
EHLO〜MAIL FORM〜TOまではうまくいっているのですが、どうも本文データを受け渡す際にコケているようです。

```html: CodeIgniter Emailクラス デバッグメッセージ
<pre>data: 354 Start mail input; end with <CR><LF>.<CR><LF></pre>
```

configの設定状況を確認すると`crlf` `newline`ともに**LF**（\n）になっており、Mailpit側が要求する**CRLF**（\r\n）での区切りとマッチしないためと思われます。


```diff_php:Emailクラス config（修正）
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'mailpit';
$config['smtp_port'] = '1025';
+$config['crlf'] = "\r\n";
+$config['newline'] = "\r\n";
```

上記のように上書き設定を追記してテストしたところ無事にMailpitへメールは配送されました。これでローカル環境内でのメールテストが可能になります。地味に便利です…。

# CodeIgniter4
Emailクラスのconfig周りを見る限り、若干項目のラベルが違いますが同じような設定で実現できるのではないかと思います。（未検証）

https://codeigniter.com/user_guide/libraries/email.html
[備忘録]　読んだネットの記事  (テクノロジー ver.2)

# はじめに
こんにちは，Umamusume22です．最近，勉強も兼ねてテック記事を読んでいます．習慣にすることを目指しています．読んだネット記事の内容を忘れないように引用した上でアウトプットしています．

# 備忘録
[1]"製造業向けの体験型共創ラボに、工場内物流で活用できるセンシング技術が追加"
https://monoist.itmedia.co.jp/mn/articles/2407/01/news052.html

- 検査工程におけるAIを活用したセンシング技術の検証の場を開設
- 従来の画像センシングに加えて聴覚や触覚のデジタル化に関するセンシングソリューション
    - 工場内物流に活用可能なセンシングソリューションの展示を追加
- 検査工程では，コネクター嵌合判定と異音検知を追加
    - コネクター嵌合判定では，嵌合時の振動を触覚センサーで検知
        - この波形から正常に嵌合できたかを判定する
    - 異音検知では，異常時の設備音を検知して設備異常を素早く検知する
- 検査前後に発生する製品の移動や保管プロセスにおけるAIを活用したセンシングソリューション
    - カメラで荷物のラベルを検知
    - カメラ画像からご台車に積まれた荷物の高さを検知

[2]"ジェイテクトが工作機械の会員Webサービス開始、保全計画や設備更新など支援"
https://monoist.itmedia.co.jp/mn/articles/2407/01/news054.html

- 工作機械の導入から更新まで行う
- 工作機械の保全履歴をWeb上で簡単に確認することが可能
    - Webサイトから所有機の名称、機番、納入日を確認
    - 操作マニュアルをダウンロードし，タブレットによる製造現場での閲覧が可能
    - 相談センターとユーザーの機械の遠隔接続が可能

[3]"製造業向けIoTサービスで電力使用量の測定が可能に、アナログセンサーにも対応"
https://monoist.itmedia.co.jp/mn/articles/2407/01/news062.html

- IoTデータ収集用の各種アナログ入力センサーの取り扱いを拡大
- 生産ラインの稼働状況と対比しながら電力使用量を測定し、記録できる機能を追加
- アナログ信号も収集可能
    - 設備ごとに個別に測定
    - センサーゲートウェイおよびセンサー数に応じた初期費用が必要
    - データはクラウドではなくセンサーゲートウェイに蓄積する
    - 振動や温度などのデータを収集
    - 故障の予兆検知や熟練技能者のノウハウをデジタル化

# 最後に
備忘録の内容が短いのは申し訳ありません．今回は製造業に関するネットの記事を書きました．読んだネットの記事は本記事のようにアウトプットしていきます．
読んでいただきありがとうございました．<br><br>


※ウマ娘の声をフーリエ変換した記事や水栓の開閉判定をLineに通知する記事も書いています．suzuが私です．興味がある方はぜひご覧ください！
https://vigne-cla.com/31-1/#toc5

※noteも始めました．
https://note.com/madoka235/n/nbba2153326e1

ぜひフォローよろしくお願いします!
某 .ne.jpメールのセキュリティ機能対応がひどい

## 某.ne.jpメールのセキュリティ機能対応がひどい


https://qiita.com/ripple_naip/items/5a8e353d76d09d0e780f


で書いた、見つけちゃっとTLS非対応のサーバー。

同じようにテストすると
結果はこれ、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667610/9f9ed672-62e8-cee0-faa1-4c5f97786fab.png)


おー、×だらけ。

IPv6,DNSSECはおいておくとして


## SPF

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667610/f5dba63a-a83c-8de4-18f1-5806f655af34.png)


SPF自体は設定されているけど、policyで×くらっています。
DNSルックアップ数が多すぎるとのこと。

ちなみに、詳細を端折って図にすると
こんな感じで各線がincludeとして、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667610/d46e1677-bf74-7900-6b55-f2e4b49f198b.png)


赤線のgからcへのincludeはcはbでincludeしているのでgからは無くてもいいはず。
これが無ければギリ制限に収まるはずなので、単に設定ミスなのかも。

DKIM,DMARCは問題なし


## TLS

STARTTLS が非対応なのでTLS関連テストがそもそも行われない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667610/e9d2c58a-aefd-6988-504d-fea133f49a8c.png)


これはひどい。


## RPKI

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667610/85b8e6a2-b162-e6ee-9ea3-c082bc3fcf5f.png)

Name serverが非対応らしい。
この会社も、使ってるネームサーバー、ネットワークの会社もかなり有名な会社なんだけど。


*** 

これに気づいたのは社内のSMTPリレーサーバーをTLS対応に切り替えようとしたときに
エラーが起きるメールアドレスが出たりして、色々調べているうちに見つけちゃったやつ。

## ほかの会社

その会社の同業種の他の会社がどうなっているか

### A社
IPv6,DNSSEC：非対応
DMARC, DKIM and SPF：問題なし
STARTTLS対応、但し低いバージョンのTLS接続を受け入れるため警告
RPKI:問題なし

### B社
IPv6,DNSSEC：非対応
DMARC, DKIM and SPF：DMARCレコードがあるがp=none
STARTTLS:非対応
RPKI：すべて非対応

### 同業ではないが何個か見た中で最高スコア

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667610/4abf5034-84fd-c7ca-5ae7-0fa23e918301.png)


問題点はDANE非対応と
TLSが低いバージョンを受け入れる点
2024年7月 AIOps 定点観測

# 概要
AIOps の動向や学習のため、Google で AIOps を検索した結果を記録している記事です。

# 2024年7月1日の検索結果 (リスティング広告)

![スクリーンショット 2024-07-01 171600.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2345504/984ed3ac-4e87-97f6-222b-c6f6f111ceb2.png)

* Splunk
* Dynatrace
* Datadog

Splunk がトップで Dynatrace と Datadog が続いています。

先月の結果はこちら --> [2024年6月 AIOps 定点観測](https://qiita.com/mkodera/items/2a0b5232aea57a624c2f)

# 2024年7月1日の検索結果 (広告以外)

![スクリーンショット 2024-07-01 171724.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2345504/0a19eac1-ece4-edae-d12f-35c487c0b68b.png)

* HPE
* AWS
* Splunk
* IBM


HPE が不動のトップで AWS と Splunk が続いています。

先月の結果はこちら --> [2024年6月 AIOps 定点観測](https://qiita.com/mkodera/items/2a0b5232aea57a624c2f)