OmniAICreator/Qiita-1.07M huggingface dataset:
AWS SOAに合格しました

# はじめに
隔月AWS認定3回目です。
行った学習内容等を備忘録として残しておきます。

# AWS認定とは？
Amazon Web Service(AWS)が主催する、AWSサービスを主軸としたクラウドサービスに関する知識やスキルを認定する資格です。
各資格についての説明は[公式サイト](https://aws.amazon.com/jp/certification/)から確認可能です。

AWS認定には、習熟度及び難易度別にFOUNDATIONAL、ASSOCIATE、PROFESSIONALの3カテゴリと、専門性に特化した知識を必要とするSPECIALITYの1つのカテゴリがあり、4つのカテゴリに分かれています。SPECIALITYの難易度は分類上はPROFESSIONALと同列です。
2024年7月現在、基礎知識やアーキテクチャ、データ分析など種類別に全10種類の資格が存在します。

## AWS SOAとは？
正式名称はAWS Certified Sysops Administrator - Associateです。
主にAWSを利用した運用やシステム管理などに関する知識やスキルを認定する資格です。
難易度としてはAssociateレベルのため、2番目の難易度にあたります。

# 受験の感想と結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748131/09bbafb7-0a19-c9e7-495d-20cb25cbc01b.png)

受験結果ですが、合格点720点に対して868点でした。
感想としては、運用周りで利用する各サービスに対する知見があまりなかったため、学ぶ点が多かったかなと思います。
また、後述しますが学習時間を取り損ねてギリギリに詰め込む形となってしまったのが厳しかったです。

# やったこと
- 模擬問題を解く(10h程度)
→今回は直前まで学習時間を取ることができず、試験24時間前くらいから学習を始めて10~11h程度で詰めて試験みたいな限界スケジュールになりました。反省しています。
内容としては、いつも通りUdemyの模擬問題を解き、わからない点や説明できない点などを調べて理解する形式で学習を行いました。

# 利用した教材

[【SOA-C02対応】AWS認定 SysOpsアドミニストレーター アソシエイト 模擬問題集＋詳解 【2024年版】](https://www.udemy.com/course/soa-c02aws-sysops-2024/)

いつも通りという感じになりますが、模擬問題です。
学習方法としては、
1. とりあえず解く
1. 正解/不正解に関わらず選択肢のどこが誤っているかを説明できないサービスや設定について、解説や公式ドキュメント、個人ブログなどを調べ理解する
1. 後ほど解き直す

ということをしています。
今回は時間の都合で解き直しができたのは一部のみでしたが。。。

# 受験費用
- 受験料 11,000円 (半額バウチャー利用)
- Udemy 1,800円

計 12,800円

# 今後受験する人へ
- 動画教材が使える人であれば、解説系の教材などがUdemyなどにあるため利用してもいいと思います。
- 最近知ったんですけどPing-tってやつでもいいかもしれません
- 模擬問題はやっといた方がいいです。本番の問題の雰囲気をつかめるので。
- 基本的には運用系なのでちょっと触ってみるっていうのが難しいケースが多いですが、可能であればAWS上でサービスを触った方が理解が深まると思います
- AWS SAAの知識があると色々理解がしやすいです。先にCLFやSAAは取っておくといいかもしれません。
- 勉強は計画的にやりましょう

# 今後の予定

隔月のつもりだったんですがちょっと暇になりそうなんで7月DEA予定です。
「続きを読む」を実装

# はじめに
案件で実装することになったので、それの備忘録です。

# 目的
youtubeなどに実装されているコメントが長いと省略されて表示されているこれです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632357/1d6d7ee6-e564-ce43-ceac-8d4f0f83d950.png)

# 既存
```erb
    <div class="flex-1 px-2 ml-2 text-gray-600 break-all">
      <%= comment.content%>
    </div>
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632357/eba598ba-4e69-3ae4-f1a6-c2fcebf4e0b0.png)

# 実装
探せばあるもので、下記のものを利用しています。

https://www.stimulus-components.com/docs/stimulus-read-more

```
yarn add @stimulus-components/read-more 
```


```javascript:app/javascript/controllers/index.js
import ReadMore from "@stimulus-components/read-more";
application.register("read-more", ReadMore);
```

ここの最後の行のCSSで、2行まで表示し、それ以上は省略するということをやっています
```css:app/javascript/stylesheets/application.css
.read-content {
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: var(--read-more-line-clamp, 2);
}
```

```erb
    <div class="flex-1 px-2 ml-2 text-gray-600 break-all">
      <div data-controller="read-more" data-read-more-more-text-value="続きを読む" data-read-more-less-text-value="一部を表示">
        <p class="read-content" data-read-more-target="content">
          <%= comment.content%>
        </p>
        <button data-action="read-more#toggle">続きを読む</button>
      </div>
    </div>
```

![l_6814799_129_0482c1947456dddf0c29fe1cb7ad2013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3632357/2d3c83d8-adb7-3e32-05d4-3de0c14a88de.png)


# さいごに
gemというわけではありませんが、サクッと実装できたことに驚きです。
ただ、デメリットしては無条件で「続きを読む」が表示されます。
そのため、自分は文字数だったり、行数だったりで出す出さないの条件式を設けました。
ケースバイケースがあると思いますので、その辺はお好みで実装してみてください。
私が考える最強のエンジニアライフプラン

# はじめに
私はデータベース、インフラ構築、汎用機の開発等、様々なフィールドでITエンジニアの仕事に従事しながらリーダー業務も行ってきました。
私が考える最強のエンジニアライフプランとは何かについて投稿します。

## データベースエンジニア
一番得意分野です。チューニング、テーブルの論理設計、物理設計が得意で、関連してストアドプロシージャの開発をやっていました。元のとっかかりはインフラエンジニアとして、クラスタ構成を設計、構築に携わったところから始まっています。

## サーバー構築、ネットワーク構築エンジニア
一番経歴が長いです。ネットワークの構築が好きで、期限が切れましたがCCNPの資格を持っていました。サーバー構築に関してはUNIX、Linuxを主にやっていました。
コンソールを使ってシェルを開発し、自動化するのが好きです。今でも家でやっています。

## 開発エンジニア
最近はこちらが多いです。私の場合、ASDとADHDを持っているので、障害特性を考えると、現在の開発エンジニアの立ち位置が１番合っていますね。

## データ分析エンジニア
今の主な業務です。pythonを使った開発がメインですが、VBAも使っています。pythonで色んなツール開発をしていますが、メンテナンスがしやすい言語だと実感しています。
その他C#を使った開発にも参画することになり、C#の勉強をしています。

## 私が考える最強のエンジニアは?
私が考える最強のエンジニアは開発、サーバー、データベース、ネットワーク、セキュリティすべての分野ができ、プロジェクトを推進できる中心的役割を果たすエンジニアが最強だと思います。いろんな面で足りませんが。

## 最強のエンジニアライフは?
自分の力の8割で仕事ができ、勤務時間の残り2割をエンジニアとしてのスキルアップに使える時間を確保できるエンジニアライフが最強だと考え間ます。常に2割のバッファーは残しておかないと、エンジニアライフは楽しくないかなと考えます。

## 障害との向き合い方
私の場合、ASD、ADHD両方持っていて、障害者手帳を取得しています。障害者だからとは言わせないスキルを持っておいた方が良いと考えています。現在は休日、ジムに通って、筋トレしたり、平日の退社後にウォーキング30～40分しています。近所に急な上り、下りがあるので有酸素運動になっているかなと思っています。

# 最後に
私なりに最強のエンジニアライフプランを考えてみました。
隙間時間にみる早見表〜応用情報技術者試験①〜

# この記事について
応用情報技術者試験を勉強していた時になかなか覚えられないな〜っとなっていた内容を毎回見ることができるようにメモしていたものです！

※さらっと見れるように分割しています。

## 保守
### 予防保守
潜在的障害発生前の訂正
### 完全化保守
潜在的障害発生前の改良
### 是正保守
問題発見の訂正
### 適応保守
環境変化の改良

## 財務諸表
| 公式 |
|:-:|
| 変動比率=変動費/売上高  |
| 損益分岐点売上高=固定費/(1-変動費)/売上高  |

## コンテナ型仮想化
アプリケーションの起動に必要なライブラリなどをまとめてホストOSで起動

## コンデンサ
交流電流は通すが直流は通さない

## ページフォルト
主記憶にページがない時に発生する割り込み、ページインと同じ発生率

## HDL
PPGA等に実装するディジタル化色を記述して、直接論理合成するために使用されるもの

## デマンドページング
アクセス要求があった時に要求ページのみ主記憶に読みこむ

## プリページング
前もって参照されそうなページを主記憶に読みこむ

## サーバコンソリデーション
仮想化ソフトウェアを利用して元のサーバ数よりも少なくすることによってサーバ機器の管理コストを削減

## リアルタイムシステム
即時処理、制限時間内に応答

## フォールトトレラント
障害が発生しても機能停止を防ぐ
### フェールセーフ
安全側に制御
### フォールトマスキング
障害を外部に漏らさない
### フェールソフト
性能を落として稼働継続
###　　フールプルーフ
危険な操作をさせない
### フォールトアポイダンス
障害を発生させない対策

## シノニム
あだ名のこと

## スタック領域
サブルーチン後の戻りアドレスなど

## ヒープ領域
割り当てと解放の順序に関連がないデータ

## エラトステネスの櫛
素数判定。最小素数の倍数を取り除いて素数を割り出すアルゴリズム

## RDB
### foreign key
外部キー
### primary
一意の値・カラム
### create table
テーブル作成
```sql
 create table テーブル名(カラム情報) 
```

### alter table
テーブル修正

```sql
alter table テーブル名 add foreign key 変数名（カラム名） reference テーブル名（カラム名）
```

### create view
view作成
```sql
create view ビュー名 as SELECT文
```

### Insert
インサート
```sql
insert into テーブル名(カラム名) valuew (値)
```
### update
アップデート
```sql
update テーブル名 set カラム名=値... where 条件
```

### delete
デリート
```sql
delete from テーブル名 where 条件
```

# 次
https://qiita.com/mr_noppo/items/3c0b29e9e1d4c25eb6f6
【Pybulletサンプル解説】変形するオブジェクトを生成【deformable_ball.py】

お疲れ様です。秋並です。

Pybullet公式gitリポジトリのサンプルコードを解説するシリーズです（一覧は[こちら](https://qiita.com/akinami/items/7b433b60aeb5115ba4d7)）。

<br>

今回は、deformable_ball.pyを解説します。（コードのリンクは[こちら](https://github.com/bulletphysics/bullet3/blob/master/examples/pybullet/examples/deformable_ball.py)）

本コードを実行すると、剛体のキューブと変形するボールが生成されます。

![deformable_ball.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2030125/0fe60394-c719-f8ad-c7cb-0ca4e92a81e9.gif)


# 使用している機能
本コードは、以下の機能を使用して「ソフトボディのオブジェクトの生成」を実現できます。

## ソフトボディのオブジェクトの生成
`loadSoftBody` 関数を使用することで、ソフトボディのオブジェクトを生成できます。
`loadUrdf`関数と同様に、ワールドが`RESET_USE_REDUCED_DEFORMABLE_WORLD`の場合、変形するオブジェクトを生成できます。
```python
softBodyId = pybullet.loadSoftBody(objectFile, 
                                    simFileName,
                                    base_position,
                                    scale,
                                    mass, 
                                    useNeoHookean, 
                                    NeoHookeanMu, 
                                    NeoHookeanLambda, 
                                    NeoHookeanDamping, 
                                    useSelfCollision, 
                                    frictionCoeff,
                                    collisionMargin 
)
```
- `softBodyId`：ソフトボディのオブジェクトのID
- `objectFile`：ソフトボディのオブジェクトのファイル
- `simFileName`：シミュレーションファイル
- `base_position`：位置（[x,y,z]）
- `scale`：スケール
- `mass`：重量
- `useNeoHookean`：ネオフック材料モデルの使用
- `NeoHookeanMu`：ネオフック材料のパラメータ1
- `NeoHookeanLambda`：ネオフック材料のパラメータ2
- `NeoHookeanDamping`：ネオフック材料のパラメータ3
- `useSelfCollision`：自己衝突の使用
- `frictionCoeff`：摩擦係数
- `collisionMargin`：衝突マージン


# コメントをつけたサンプルコード
サンプルコードにコメントをつけたものが以下になります（もともとあった不要と思われるコメント等については削除しています）

```python
import pybullet as p
from time import sleep
import pybullet_data

# PybulletをGUIモードで接続
physicsClient = p.connect(p.GUI)

# Pybulletに関するデータパスを取得
p.setAdditionalSearchPath(pybullet_data.getDataPath())

# シミュレーションを「変形可能なワールド」にリセットする
p.resetSimulation(p.RESET_USE_DEFORMABLE_WORLD)

# 重力を設定
p.setGravity(0, 0, -10)

# 床の姿勢を設定
planeOrn = [0,0,0,1]

# 床のオブジェクトを生成
planeId = p.loadURDF("plane.urdf", [0,0,-2],planeOrn)

# ボックスのオブジェクトを生成
boxId = p.loadURDF("cube.urdf", [0,3,2],useMaximalCoordinates = True)

# ボールの変形するオブジェクトを生成
ballId = p.loadSoftBody("ball.obj", simFileName = "ball.vtk", basePosition = [0,0,-1], scale = 0.5, mass = 4, useNeoHookean = 1, NeoHookeanMu = 400, NeoHookeanLambda = 600, NeoHookeanDamping = 0.001, useSelfCollision = 1, frictionCoeff = .5, collisionMargin = 0.001)

# 1時刻分シミュレーションを進めたときの経過時間の設定
p.setTimeStep(0.001)

# sdfのボクセルのサイズを0.25に設定
p.setPhysicsEngineParameter(sparseSdfVoxelSize=0.25)

# Pybulletが接続されている間ループを繰り返す
while p.isConnected():

  # シミュレーションを1時刻分進める
  p.stepSimulation()  

  # 重力を設定
  p.setGravity(0,0,-10)
```
JavaScriptで安全なセッション管理をしてみたい

## Self-XSSでも盗めないHTTPセッションで可能か？

Self-XSSは簡単に言うと、ブラウザーの開発者モード(コンソール)をユーザー自身に操作させる攻撃。
場合によってはセッション情報を盗んで、別のところから改めて攻撃もできる。
根本的な対策は難しく、コンソール画面に警告を出しておくとかがあるらしい。

そのブラウザでのセッションの対策は難しくても
セッション情報を盗めないようにできないか？
ちょっと考えて、WebCrypto APIを使って鍵交換・暗号化することで出来そうと、思って色々やってみた。

## 一応できる

はい、一応です。
少なくともSNS等では到底使えない方法です。

****

全体の流れ

1. クライアント側で
subtle.generateKey()を使いECDH鍵ペアを作成
公開鍵をサーバーに送信

2. サーバーも同様にECDH鍵ペアを作成
クライアントから送られてきた公開鍵をsubtle.importKey()で取り込んで
共有情報を生成しsubtle.deriveKey()で共有秘密鍵を作成
そしてその情報と紐づけるセッションIDしてを生成し
セッションIDとサーバー側公開鍵をクライアントに返答

3. クライアント側は受け取ったサーバー側公開鍵と作成済みの秘密鍵を使って
同様に共有秘密鍵を作成

4. 以降はHTTPヘッダにセッションIDを入れて、ボディ部は共有秘密鍵で暗号化
受け取り側は共有秘密鍵で複合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667610/5470d7b7-d104-2a25-4863-b013f99f0522.png)


WebCryptoより外はブラウザなりnode.jsなりの実装で通常であれば中は見えない。
つまり灰色で塗った部分は簡単にはアクセス出来ないようになっている、
少なくとも、ネットワークだったりコンソールを含むJavaScriptからはアクセス出来ない。

見えるのは、お互いの公開鍵(PublicKey@C,PublicKey@S)とセッションID(SessionID)
暗号化に使う鍵(DeriveKey)とそれを生成するのに必要な秘密鍵(PrivateKey@C,PrivateKey@S)は
ネットワークはおろかJavaScript環境上も見えない

:::note info
厳密には「JavaScript環境上も見えない」ために
generateKey(),deriveKey() でextractable=falseが必要
:::

使用する鍵を特定するにもセッションIDは平文の必要があるので
セッションIDはHTTPレベルでは平文(TLSで保護)のままでJavaScriptコンソールでも見えますが
セッションIDが分かっても共有秘密鍵が分からないのでボディ部を解読できません。


## 実際に作っていろいろ気づいた

* GETリクエストはセッションIDだけで出来てしまう
ボディ部しか暗号化しないので、ボディ部の無いGETは鍵が無くても通ります。
もっとも、レスポンスのボディ部は暗号化されているので読めませんので、
GETを偽装されても大きな問題にはなりません。

* DELETEリクエストも保護できない場合がある
DELETEのボディ部はHTTP仕様上で禁止はされていませんが明確に使えるわけでもなく、
一部実装では使えない場合もあります。
この辺はクライアント・サーバーともにそう作ればいいけど、
ライブラリがダメだったりした場合は対応が難しい。

* セッション保持が困難
見てもらう通りこの方法の最大の問題は、
交換した鍵がJavaScriptの実行インスタンス単位に制限されるので、
タブ間でも鍵の共有が出来ないし、同じタブでも再読み込みをしてしまうと鍵を失います。
結局のところ、これが実用上問題でした。

## 本当の目的

目的に関しては半分嘘で、当初の開発目的は内部ネットワーク内だけのシステムで
サーバーにTLS環境構築せず暗号化通信出来ないか？が始まり。
しかし、WebCrypto APIが安全なコンテキスト

https://developer.mozilla.org/ja/docs/Web/Security/Secure_Contexts

でないと動かないという事で、この目的では使えないことが判明している。

でも、気づいたのはそれなりに形が出来て、
これに合わせたセッション管理になっている状態だったので
完全ではないものの、対策を入れて使っている。
クラウド環境でのフェイルオーバー戦略を構築する方法


## はじめに

クラウド環境でのシステム運用において、フェイルオーバー戦略は非常に重要です。システムの可用性を高め、障害発生時の影響を最小限に抑えるためには、適切なフェイルオーバー戦略を構築することが不可欠です。本記事では、クラウドベンダーの様々なサービスを活用しながら、効果的なフェイルオーバー戦略を構築する方法について解説します。

## フェイルオーバー戦略の基本

フェイルオーバー戦略とは、システムの一部が障害を起こした際に、他の正常な部分に自動的に切り替える仕組みのことです。これにより、システム全体のダウンタイムを最小限に抑えることができます。フェイルオーバー戦略を構築する際には、以下のポイントを考慮する必要があります。

1. **冗長性の確保**: システムの各コンポーネントに対して冗長性を持たせることが重要です。例えば、複数のデータセンターにデータを分散させることで、特定のデータセンターがダウンしても他のデータセンターでサービスを継続できます。

2. **自動化**: フェイルオーバーのプロセスを自動化することで、障害発生時に迅速に対応できます。クラウドベンダーが提供する自動化ツールを活用することで、手動での介入を最小限に抑えることができます。

3. **監視とアラート**: システムの状態を常に監視し、異常が検知された際には即座にアラートを発する仕組みを構築することが重要です。これにより、障害発生時に迅速に対応できます。

## クラウドベンダーのサービスを活用する

クラウドベンダーは、フェイルオーバー戦略をサポートするための様々なサービスを提供しています。以下に、主要なクラウドベンダーのサービスをいくつか紹介します。

### AWS (Amazon Web Services)

1. **Amazon Route 53**: 高可用性のDNSサービスで、ヘルスチェック機能を利用して障害発生時にトラフィックを自動的に他のリージョンに切り替えることができます。

2. **Amazon RDS**: マルチAZ配置を利用することで、データベースの冗長性を確保し、障害発生時に自動的にフェイルオーバーが行われます。

3. **AWS Elastic Load Balancing (ELB)**: トラフィックを複数のインスタンスに分散させることで、特定のインスタンスがダウンしても他のインスタンスでサービスを継続できます。

### Google Cloud Platform (GCP)

1. **Cloud DNS**: 高可用性のDNSサービスで、フェイルオーバー機能を利用してトラフィックを自動的に他のリージョンに切り替えることができます。

2. **Cloud SQL**: 高可用性オプションを利用することで、データベースの冗長性を確保し、障害発生時に自動的にフェイルオーバーが行われます。

3. **Cloud Load Balancing**: トラフィックを複数のインスタンスに分散させることで、特定のインスタンスがダウンしても他のインスタンスでサービスを継続できます。

### Microsoft Azure

1. **Azure Traffic Manager**: 高可用性のDNSサービスで、ヘルスチェック機能を利用して障害発生時にトラフィックを自動的に他のリージョンに切り替えることができます。

2. **Azure SQL Database**: 高可用性オプションを利用することで、データベースの冗長性を確保し、障害発生時に自動的にフェイルオーバーが行われます。

3. **Azure Load Balancer**: トラフィックを複数のインスタンスに分散させることで、特定のインスタンスがダウンしても他のインスタンスでサービスを継続できます。

## フェイルオーバー戦略の実装例

ここでは、AWSを例にとって具体的なフェイルオーバー戦略の実装方法を紹介します。

### ステップ1: Amazon Route 53の設定

1. **ヘルスチェックの作成**: Route 53のコンソールからヘルスチェックを作成し、監視対象のエンドポイントを設定します。
2. **フェイルオーバールーティングポリシーの設定**: フェイルオーバールーティングポリシーを設定し、プライマリとセカンダリのエンドポイントを指定します。

### ステップ2: Amazon RDSのマルチAZ配置

1. **マルチAZ配置の有効化**: RDSインスタンスの作成時にマルチAZ配置を有効にします。既存のインスタンスに対しても、設定を変更することでマルチAZ配置を有効にできます。

### ステップ3: AWS Elastic Load Balancingの設定

1. **ロードバランサーの作成**: ELBのコンソールからロードバランサーを作成し、ターゲットグループを設定します。
2. **ヘルスチェックの設定**: ターゲットグループに対してヘルスチェックを設定し、インスタンスの状態を監視します。

## まとめ

フェイルオーバー戦略を構築することで、システムの可用性を高め、障害発生時の影響を最小限に抑えることができます。クラウドベンダーが提供する様々なサービスを活用することで、効果的なフェイルオーバー戦略を実現することが可能です。ぜひ、この記事を参考にして、自分のシステムに最適なフェイルオーバー戦略を構築してみてください。
隙間時間にみる早見表〜基本情報技術者試験〜

# この記事について
毎年、春と秋にはIPA試験が始まりますね！
僕も受験申し込みをしてからガッツリ勉強をしていました！
その時に、「どうしてもここを反復しておきたい！」と思ったものをメモしていたので
今後受験する人向けに公開します！

## IPアドレス
### クラスA
最初の文字が0のアドレス。
IPアドレス範囲（最初のオクテット）：1〜126
### クラスB
最初の文字が10のアドレス。
IPアドレス範囲（最初のオクテット）：128〜191
### クラスA
最初の文字が0のアドレス。
IPアドレス範囲（最初のオクテット）：192〜223

## ポート番号
0~65535まで指定可能
### ウェルノウンポート
0~1023までが範囲

| プロトコル | ポート番号 |
| :-:  | :-:|
| http | 80 |
| smpt  | 25  |
| pop3  | 110  |
| ftp転送  | 20 |
| ftp制御 | 21 |
| DNS | ５３ |

## 算術・論理シフト
### 論理シフト
溢れたビットは捨てられ０が入る。
### 算術右シフト
符号が1の時は1が入る

## 浮動小数点
e+11は10の11乗

## 補数
### ２進数の1の補数
繰り上がり前までになる値
10が元の値であれば、01が補数
### 2進数の2の補数
繰り上がる値
10が元の値であれば、10が補数

## 画像ファイル
### 可逆圧縮
**gif**
**png**
### 不可逆圧縮
**jpeg**

## ページングアルゴリズム
### FIFO
先入先出
### LRU
更新時間
### LFU
参照回数

## 画像のドット関連
| １ドットあたり | ビット数 |
| :-:  | :-:|
| ２色 | 1ビット |
| 256色  | ８ビット  |

・dpi
１インチあたりのドット数

## 標本化周波数
| 公式 |
| :-:  | 
| サンプリング数=標本化周波数*サンプリング時間 | 
| 音声データ＝サンプリング数＊量子化ビット数  | 

## 電力

| 公式 |
| :-:  | 
| w=v*a | 
| wh=w*h | 

## 論理演算

|  |  |  |  |
|:-:|:-:|:-:|:-:|
| and | 1*1=1  | 0*0=0  | 1*0=0  |
| or | 1*1=1  | 0*0=0  |  1*0=1 |
| xor  | 1*1=0  | 0*0=0  | 1*0=1  |


## バイト
| 単位 | 最小単位 | 10進数/２進数で表すと |
|:-:|:-:|:-:|
| バイト  | 0  | -  |
| キロ  | 千  | 10の3乗または2の10乗  |
| メガ  | 百万  | 10の6乗または2の20乗 |
| ギガ  | 十億  | 10の9乗または2の30乗  |
| テラ  | 一兆  | 10の12乗または2の40乗  |

## 時間
| 単位 | 10進数で表すと |
|:-:|:-:|
| ミリ | 10の-3乗  |
| マイクロ  | 10の-6乗  |
| ナノ  | 10の-9乗  |
| ピコ  | 10の-12乗  |
chatGPTにキャリア相談してみた

こんにちは

最近キャリアパスについて悩んでいるのでChatGPTに相談してみました。

## きっかけ
🙂「前職やめたはいいけど、この先どうしていこうかなぁ」
🙂「誰かに相談したいけどなぁ〜
　　知り合いや知人にするのは後ろめたい＆なんだか恥ずかしいなぁ」
  
『『そうだ！chatGPTに聞いてみよう！！』』

## 実際にやってみた。

![IMG_8435.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1782522/00954db0-b421-8574-74bb-abaa4385ee56.jpeg)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1782522/e4afbc0c-1586-b5ac-565a-49362e03eeda.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1782522/9bcd031e-d6ac-d59c-3c2e-9389f80a7088.png)


## 感想
論理的にメリットデメリットを挙げてくれるし客観視できてよかった。

キャリアに限らず、ブレインストーミングのはじめとしてAIはめっちゃ有用だと感じました。
Docker Desktopより高速なOrbStackに乗り換えよう！

# はじめに
こんにちは、H×Hのセンリツ大好きエンジニアです。（同担OKです😉）

Docker Desktopに現状そこまで不満はないのですが、時間を掛けずにDockerコンテナの起動や終了が出来ればさらに満足度が高まりますよね！

ということで今回は、Docker Desktopより軽量かつ高速だと謳われている**OrbStack**の始め方を紹介します！

# OrbStackとは

> OrbStack is the fast, light, and easy way to run Docker containers and Linux. Develop at lightspeed with our Docker Desktop alternative.

公式リファレンスによると、**OrbStackは高速、軽量かつ簡単にDockerコンテナとLinuxの実行を行える**アプリケーションです。

https://orbstack.dev/

どのくらい性能に違いがあるかの指標ですが、こちらも公式リファレンスに載っておりました。
### OrbStackとDocker Desktopのベンチマーク比較

|                       | OrbStack | Docker Desktop | 
| :-------------------: | :------: | :------------: | 
| 開発環境の構築速度    | **17 min**   | 45 min         | 
| イメージのビルド時間  | **7 min**    | 19 min         | 
| CPU＆バッテリー消費量 | **27 mW**    | 123 mW         | 

すごいですね！🫣
Docker Desktopより高速なのにCPUとバッテリーに優しいことから、OrbStackの方が魅力的に感じます！

また、**料金は個人使用（非営利目的）であれば無料**なので、気軽に触ることが可能です！

# OrbStackの始め方
公式のクイックスタート通りに進めていきます。

https://docs.orbstack.dev/quick-start

## OrbStackのインストール

Homebrewの場合は以下のコマンドでインストールできます。
```
$ brew install orbstack
```

ファイルをダウンロードする方法でもインストールできます。

https://orbstack.dev/download

## 動作確認
以下のコマンドですぐに動作確認が行えます。
```
$ docker run -p 80:80 docker/getting-started
```

## Docker Desktopからの切り替え
以下のコマンドでDocker Desktopからデータをマイグレートすることが出来ます。
簡単に言うとコンテナやイメージ、ボリュームなどの複製ですね。
```
$ orb migrate docker

INFO[0000] Starting Docker Desktop
.
.
.
INFO[0277] Done
```

先ほど動作確認をした方は、以下のコマンドでOrbStackの環境をまっさらにしてください。
```
$ orb delete docker
```

すると、時間は掛かりますがきちんとマイグレートされていることが確認できました！
![スクリーンショット 2024-07-10 8.10.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2653241/820eb80c-8180-2049-becc-cf9c6d75bf97.png)

次に、Dockerを扱うコンテキストの変更をしていきしょう！
以下のコマンドでコンテキストの一覧を確認します。
```
$ docker context list

NAME            DESCRIPTION                               DOCKER ENDPOINT                                          ERROR
default         Current DOCKER_HOST based configuration   unix:///var/run/docker.sock
desktop-linux   Docker Desktop                            unix:///Users/takesupasankyu/.docker/run/docker.sock
orbstack *      OrbStack
```

OrbStackがあることを確認できました。
それでは、コンテキストを切り替えましょう。
```
$ docker context use orbstack

orbstack
Current context is now "orbstack"
```

これにより、OrbStackでDockerを扱えるようになります！

自分の手元でDockerイメージをビルドしてみましたが、１分も掛からなかったので速度が段違いに速いです！！🤯（Docker Desktopは2分以上掛かってました）

# おわりに
Docker Desktopの代替案として登場したOrbStackですが、かなり速度が向上するので効率良くなりそうですね！
ただ、やはりデメリットもあるようなので利用を検討している方は一通り調べてから決めていただく方が良いかもしれません🥹

最後までご覧いただきありがとうございました！
以上、センリツでした。🤓
Valid処理について

Validは役目を終えたものを再利用するような処理。例えばアイテムを複数個作るとき。自分は最初、アイテムが消えたらと認識していて、アイテムがステージ上から消える。つまりプレイヤーがアイテムをとったらその配列にアイテムを生成していた。しかし、アイテムが役を終えるのは、プレイヤーがアイテムを使って効果を終わらせた時である。つまりValidするのはプレイヤーがアイテムを使って"完全に"アイテムが消えて、役目を終えたらValidをすること。(ちなみにプレイヤーがアイテムをとった時に生成するとプレイヤーが持ってるものと同じものが生成され、もう1人のプレイヤーがアイテムをとる=プレイヤーと全くおなじものをとることになり、一方がアイテムを使うともう一方も反応してしまうことになる。)
明日は我が身、セキュリティ事案！！Windowsをご使用の方はWindows Update忘れずに

# 2024年のマイクロソフトセキュリティ更新プログラム公開予定日

こんにちは、皆さん！
昨今セキュリティ事案があちらこちらで聞こえてきて他人事じゃないなと戦々恐々としている今日この頃です。
今回は、2024年のマイクロソフトセキュリティ更新プログラムの公開予定日についてご紹介します。セキュリティ更新プログラムは、システムの安全性を保つために非常に重要です。以下の表は、2024年の各月におけるセキュリティ更新プログラムの公開予定日になります。

| 月 | セキュリティ更新プログラム公開予定日 日本標準時間（アメリカ太平洋標準時間） |
| --- | --- |
| 2024年1月 | 2024年1月10日（2024年1月9日） |
| 2024年2月 | 2024年2月14日（2024年2月13日） |
| 2024年3月 | 2024年3月13日（2024年3月12日） |
| 2024年4月 | 2024年4月10日（2024年4月9日） |
| 2024年5月 | 2024年5月15日（2024年5月14日） |
| 2024年6月 | 2024年6月12日（2024年6月11日） |
| 2024年7月 | 2024年7月10日（2024年7月9日） |
| 2024年8月 | 2024年8月14日（2024年8月13日） |
| 2024年9月 | 2024年9月11日（2024年9月10日） |
| 2024年10月 | 2024年10月9日（2024年10月8日） |
| 2024年11月 | 2024年11月13日（2024年11月12日） |
| 2024年12月 | 2024年12月11日（2024年12月10日） |

## セキュリティ更新プログラムの重要性

セキュリティ更新プログラムは、システムの脆弱性を修正し、悪意のある攻撃から保護するために不可欠です。これらの更新プログラムは、定期的に適用することで、システムの安全性を維持し、データの保護を強化します。

## 更新プログラムの適用方法
1. **Windowsキー + I** を押して設定を開く
2. サイドバーから**Windows Update**をクリック
4. **更新プログラムの確認**をクリック

## まとめ

2024年のマイクロソフトセキュリティ更新プログラムの公開予定日を把握しておくことで、システムの安全性を確保するための準備ができます。定期的に更新プログラムを適用し、最新のセキュリティ対策を講じることが重要です。皆さんもぜひ、これらの公開予定日をカレンダーに記入して、忘れずに更新プログラムを適用してください！
YAMLファイルについて調べてみた

xLSTMの実装を試していて、そういえばよく見るなぁと思ってつまみ学習してみた。


初学者ですので、間違いなどありましたらご教授くださると嬉しいです。
## YAMLとは？

- "キャメル"と読んで."yml"や".yaml"と書くデータシリアライズ言語
    - データシリアライズ言語にはJSON, XML, CSV, YAMLなどがある(**この[Qiita記事](https://qiita.com/siakio/items/183b5f997123569e3ed2)がとてもわかりやすい**)
- 設定ファイルの記述に使われる言語
    - 自分が見たことある中だと機械学習モデルに渡すconfigファイルの素とかで使われてたりする
- JSONの上位互換なので、YAML内でもJSONの記述ができる
- 特に**YAMLでは改行とインデントが意味を持つ**けど、JSONはもたない
## 書き方は？

- 基本的にスカラー型とコレクション型を使う
- スカラー値としては数字、ブール値、文字列を扱える
- パイプ(|)で複数行の記述ができる
- ハイフン(-)はリストを表す
- マップを入れ子にしたりリストの中身をマップにしたりもできる
- #(シャープ)で以降の行をコメントアウトできる
    ~~~YAML: scalar.yml
    #コメントはシャープを使う
    #スカラー値の格納はこんなかんじ
    hogehoge: 2
    command: |
       cat hoge.txt | pbcopy
    ~~~
    ~~~YAML: collection.yml
    #pythonと同じで一行まるまるコメントになる
    #コレクションの格納はこんなかんじ
    #以下のコードは全て引用部分です
    
    #Comment: Student record 
    #Describes some characteristics and preferences 
    --- 
    name: Martin D'vloper #key-value 
    age: 26 
    hobbies: 
    - painting #first list item 
    - playing_music #second list item 
    - cooking #third list item 
    programming_languages: 
     java: Intermediate 
     python: Advanced 
     javascript: Beginner 
    favorite_food: 
    - vegetables: tomatoes 
    - fruits: 
       citrics: oranges 
       tropical: bananas 
       nuts: peanuts 
       sweets: raisins 
    ~~~
:::note alert
タブ文字は仕様で許可されていないので、インデントには必ずスペースを使いましょう
:::


## 参考資料
- [RedHat, What is YAML?, 2023](https://www.redhat.com/ja/topics/automation/what-is-yaml) (collection.yml内でここからコードを引用しました)
- [CircleCI, YAML入門: サンプルから学べる初心者向けガイド, 2021](https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://circleci.com/ja/blog/what-is-yaml-a-beginner-s-guide/&ved=2ahUKEwjRo7j2xp6HAxWjjK8BHc5WCd4QFnoECBMQAQ&usg=AOvVaw2d1NFTzgxWRgef68FzGOtN)
- [siakio, シリアライズ言語の比較, 2023](https://qiita.com/siakio/items/183b5f997123569e3ed2)
新卒1年目のテストエンジニアがVBAで作業を自動化した話

## はじめに
新卒1年目でテストエンジニアになりました。（SES社員1年目）
派遣される前は**コードは全く書かない**と言われていました。しかし、空いている時間に業務を自動化するコードは書いてよいとのことなので、早速VBAで書いてみました。

## 自動化するに至った経緯
現在、FP値の計測を行っています。具体的には、エクセルの表にある丸の数を数え、その結果を別のエクセルに出力するという単純な作業です。この作業を効率化するために、自動化を検討しました。自動化を実現することで、私自身のスキル向上にもつながると考え、実行に移しました。

## 苦労した点
丸の数を計測する方法を模索するのが、一番苦労しました。しかし、RGBをIF文に加えることで解決しました。

## 終わりに
まだまだ改善点もあるので、改善したら再度投稿しようと思います。
合格率で見る高度試験

情報処理技術者試験の2024年秋期試験はデータベーススペシャリスト試験(DB)を受験することにしました。ところで、高度試験は合格率の低さで知られていますが、漠然と低いというイメージが有るだけでした。よって、IPAが公開している情報から調べてみることにしました。

# 参考資料
令和6年春期時点の(つまり最新の)統計情報を参考にしました。

https://www.ipa.go.jp/shiken/reports/nq6ept000000i5c9-att/toukei_r06h.pdf

# 過去5回の合格率を見てみる
高度試験の各試験区分の過去5回分の合格率です。通年実施の情報処理安全確保支援士試験(SC)は過去5回分、それ以外の試験区分は5年分のデータです。(単位:%)

|試験区分|ST|SA|PM|NW|DB|ES|SM|AU|SC|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|1|15.4|15.3|14.1|14.4|14.4|16.0|14.7|14.6|19.2|
|2|15.3|16.5|15.1|<font color=BLUE>12.8</font>|15.8|16.4|15.0|15.3|21.1|
|3|14.8|15.0|14.4|17.4|17.1|18.3|14.8|16.0|19.7|
|4|15.5|15.8|14.1|14.3|17.6|19.7|15.2|15.9|<font color=RED>21.9</font>|
|5(最新)|15.8|15.0|13.5|15.4|18.5|16.6|15.0|16.4|18.3|
|平均合格率|15.3|15.5|14.2|14.8|16.6|17.4|14.9|15.6|20.0|
|標準偏差|0.29|0.52|0.47|1.38|1.31|1.27|0.15|0.57|1.18|

略称一覧
* ST(ITストラテジスト試験)
* SA(システムアーキテクト試験)
* PM(プロジェクトマネージャ試験)
* NW(ネットワークスペシャリスト試験)
* DB(データベーススペシャリスト試験)
* ES(エンベデッドシステムスペシャリスト試験)
* SM(ITサービスマネージャ試験)
* AU(システム監査技術者試験)
* SC(情報処理安全確保支援士試験)

# 全区分の合格率分布
全区分の合格率の分布をプロットすると、12%~22%の間に分布していることが分かります。しかし、折り重なって見にくいため、スペシャリスト系試験と論文試験に分けてプロットしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/ccce8c0c-d10f-1608-7a2e-1f48d26c71a6.png)

# スペシャリスト系試験の合格率分布
所謂記述系の試験です。但し、エンベデッドシステムスペシャリスト試験(ES)は2023年度から論文試験に移行したため、合格率の数字は参考値です。安全支援士試験(SC)は、2023年10月から合格率を高めるために問題数を減らし、午後試験を午後Ⅰ、午後Ⅱと２つ実施していたのを午後試験１つに統合しましたが、大きく合格率が高まってはいないようです。ネットワークスペシャリスト試験(NW)は12%台まで合格率が下がったこともありますが、ここ数年は15%前後の合格率です。データベーススペシャリスト試験(DB)は近年の合格率が唯一右肩上がりの分布を示しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/b51df28e-7529-46f5-744b-967604f6a8ca.png)

# 論文試験の合格率分布
論文試験は、プロジェクトマネージャ試験(PM)の合格率が年々下がっている以外は、どの試験区分も合格率が16%弱となっていることが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/5ce775e4-d136-17eb-7be6-edbdd9cc4674.png)

# 平均受験者数を見てみると
各試験の過去５回の平均受験者数を見てみます。(単位:1万人)

|試験区分|ST|SA|PM|NW|DB|ES|SM|AU|SC|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|1|0.75|0.83|1.75|1.83|1.68|0.48|0.51|0.41|1.60|
|2|0.56|0.54|0.96|1.26|0.94|0.25|0.30|0.23|1.87|
|3|0.63|0.53|1.01|1.38|1.06|0.27|0.28|0.25|1.72|
|4|0.70|0.56|1.17|1.52|1.23|0.31|0.28|0.27|2.04|
|5(最新)|0.74|0.56|1.21|1.60|1.31|0.25|0.28|0.28|1.95|
|平均受験者数|0.68|0.61|1.22|1.52|1.24|0.31|0.33|0.29|1.84|
|標準偏差|0.064|0.10|0.25|0.17|0.23|0.079|0.080|0.058|0.14|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469079/fa43edf6-6c94-44ed-2edf-213efb011bbd.png)

最も受験者が多いのはSCであり、ここ数年は２万人弱の受験者です。２番手がNW、３番手がDBと続き、１万数千人の受験者が毎回受験していることが分かります。それに対して、論文試験はPMがDBと同じぐらいの受験者数であることを除けば、ほぼ全ての試験が１万人を割る受験者数であることが分かります。従来高度試験最難関と言われているSTの受験者はSCの約3分の１、NWの約半分であることが分かります。試験形式が記述式、論文式と異なっているため、単純に比較は出来ませんが、合格率、受験者数のデータを鑑みると、高度試験最難関は寧ろNWの方かもしれません。。。:scream: :scream_cat: 

# まとめ
高度試験を久方振りに受験するため、近年の合格率の傾向はどうなっているのかと興味を持ち調べてみました。流石は高度試験、合格率は一般に難関試験と言われるレベルの２０％前後で推移しており、一筋縄では行かないことがこのデータを見るだけでもよく分かります。心してDBの受験に臨もうと思います。
【Linux】AlmaLinuxのバージョンを固定してアップデートする

## 目次
[1. はじめに](#1-はじめに)
[2. 環境](#2-環境)
[3. アップデート手順](#3-アップデート手順)

## 1. はじめに
AlmaLinuxのバージョンを固定してアップデートする方法をよく忘れるので備忘がてら記事に残しておく。

## 2. 環境
- AlmaLinux：8

## 3. アップデート手順
##### 3.1. 現行バージョンの確認
```bash
# cat /etc/almalinux-release
AlmaLinux release 8.x
```
##### 3.2. アップデート除外設定の解除
```bash
# cat /etc/dnf/dnf.conf
exclude=kernel* almalinux-release*  ←除外設定があったらコメントアウトしておく
```
##### 3.3. パッケージ最適化（キャッシュを削除して新しく作り直す）
```bash
# dnf clean all
# dnf makecache
```
##### 3.4. リリースパッケージ確認とインストール
```bash
# dnf list almalinux-release
almalinux-release.x86_64 　　　 8.10-1.el8  

# dnf install almalinux-release
```

##### 3.5. バージョンを固定してアップデート（システムリリースに同期させる）
```bash
# dnf upgrade --releasever=8.8 distro-sync
```

##### 3.6. アップデート後のバージョン確認
```bash
# cat /etc/almalinux-release
AlmaLinux release 8.8 
```

##### 3.7. アップデート後の再起動
```bash
# reboot
```
05_Next.jsのチュートリアルに取り組む


# 前回の話

https://qiita.com/ersia/items/d2a77da07844e2e2a90a

よし構築と動作確認ができた！次回はコードをいじっていくぞ！というところでした。

# チュートリアルに取り掛かる

私はNext.jsのことを何も知らない・・・
何も知らなければ何も書けない、そもそもUIのコンポーネントを使ってうんぬんかんぬん、というレベルではない・・・！

英語ではありますが幸いにもチュートリアルが用意されているので、それに取り組んでいます。
更新に日数がかかっているのは、最初記事を書くつもりがなかったのと、5章でつまずいているからです。

チュートリアルはこちら↓

https://nextjs.org/learn/dashboard-app

## chapter1

構築方法が書かれています。今回は割愛します。

## chapter2

スタイルの設定方法

### Global styles

`/app/ui`フォルダにある`global.css`が全体のcssを取り仕切るお偉いさん。
トップレベルのコンポーネントで読み込むのが良い習慣
（予測：配下のコンポーネントでも読み込みされるため？）

### Tailwind

開発を高速化するためあらかじめ作成されている、CSSのフレームワーク。
あらかじめ記述が決められているので、同じフレームワークを導入していればどこでもその記述を使えることが利点だと感じました。
サイトに飛ぶとすぐプレビューが始まる。すごくわかりやすい。

https://tailwindcss.com/

### CSS Modules

TailWindを使用していても、モジュールを作成することで自由にCSSを設定できる。
`/app/ui`に`home.module.css`を作成、CSSスタイルを定義。今回の例では`.shape`
`/app/page.tsx`の上部に`import styles from '@/app/ui/home.module.css';`と記述。
すると、stylesとして`/app/page.tsx`にインポートされる。
使用する際は、`<div className={styles.shape} />`のように、クラス名を記述する

### Using the clsx library to toggle class names

条件に基づいてクラス名を変更することができる。
チュートリアルの例だと、pendingの場合は灰色、paidの場合は緑色に設定する内容でした。
イメージしやすいものだと、Excelの条件付き書式みたいな感じですかね？

https://www.npmjs.com/package/clsx

## Chapter3

フォントと画像の最適化に関するチャプター

### Why optimize fonts?

なぜ最適化するのか？フォントの読み込みで画面の乱れが発生するのであまりよろしくない。
翻訳が「Googleがウェブサイトのパフォーマンスとユーザー体験を評価するために使用する指標です。」なので、SEO的にもよくないんでしょうね。

### Adding a primary font

カスタムGoogleフォントを適用する。
`/app/ui`に`fonts.ts`を作成。後は書かれている通りに実行すればフォントの変更が完了する。
Interとしてnext/font/googleをインポート
インポートしたinter（サブセット：latin）をinterとして定義する。これでinterのlatinを使うことができるようになる。（ややこし～～）
そのあと、`/app/layout.tsx`にinterをインポートして、body要素にinterクラスを使用するよう定義する。
フォントが滑らかになる機能も適用しているらしい・・・！すごい進化

### Practice: Adding a secondary font

セカンダリフォントを追加してみましょうという内容。
/app/ui/fonts.tsにてlusitanaをインポート、定義
page.tsxにてlusitanaをインポート、<p>要素にフォントスタイルを適用。

### Why optimize images?

さまざまな画面サイズ・デバイスへの対応
読み込み時のレイアウトのズレ
閲覧者の画面上で見えていない画像を遅延ロードする（ロード時間の短縮につながる）

### The <Image> component

読み込み時のレイアウトのズレを防ぐ
画面サイズに応じた画像サイズの自動調整（小さい画面に大きな画像を読み込ませないなど）
デフォルトで遅延ロードを有効化する
ブラウザに応じて最新のフォーマットで画像を読み込ませる（WebPやAVIFなど）

### Adding the desktop hero image

Imageコンポーネントの実践。
レイアウトのズレを防ぐために、width と height を設定するようにしましょう。
アスペクト比(縦横の比率)は画像と同じにしよう

ここで追加した画像は、デスクトップ：表示　モバイル：非表示 になっている。

### Practice: Adding the mobile hero image

前項ではモバイル画像を表示しないようにしたので、今度は逆をやってみましょう。
デスクトップ：非表示　モバイル：表示 で追加する。

# チュートリアルに取り組んでみて

英語が一番の壁ですね・・・・翻訳があるってとってもありがたいし、壁も一段階下がってくれます。
またとてもわかりやすく書かれているので、ここまでは大体見たままやっていけばすんなり進むし理解できました。
理解した先のなぜそれをする必要があるかについてはまだ勉強は必要になりますが、ひとまずものを作れるようになることが目標なので、それは追々、ですね。

エルシアでした。ではまた。
GUIよりもCUIが便利な時！はどんな時？

CUI（キャラクターユーザインターフェース）の便利さを理解してもらうために、以下のような事例とコマンドを紹介します。これらは特にGUIでは手間がかかるが、CUIでは簡単に実行できるものです。
Ubuntu22.04で動作確認済み

## 1. フォルダを一度に大量に作成する

**GUIでの手順：**
* 100回新しいフォルダを作成し、それぞれ名前を付ける

**CUIでの手順：**
```bash
mkdir folder_{1..100}
```

## 2. ファイルの一括リネーム

**GUIでの手順：**
* 一つ一つ手動でリネームする

**CUIでの手順：**
```bash
for i in *.txt; do mv "$i" "${i%.txt}.bak"; done
```

## 3. 特定の文字列を含むファイルの検索

**GUIでの手順：**
* 各ファイルを開いて検索する

**CUIでの手順：**
```bash
grep -r "search_string" /path/to/directory
```

## 4. 大量のファイルを一括でコピーする

**GUIでの手順：**
* 複数のファイルを選択し、コピー＆ペーストする

**CUIでの手順：**
```bash
cp /source_directory/*.txt /destination_directory/
```

## 5. 特定のパターンに一致するファイルの削除

**GUIでの手順：**
* 各ファイルを手動で選択して削除する

**CUIでの手順：**
```bash
rm *.bak
```

## 6. ファイルのバックアップと同期

**GUIでの手順：**
* 手動でファイルをコピーし、重複を確認する

**CUIでの手順：**
```bash
rsync -av --delete /source_directory/ /backup_directory/
```

## 7. 複数のコマンドを連続して実行する

**GUIでの手順：**
* 各操作を個別に行う

**CUIでの手順：**
```bash
cd /path/to/directory && tar -czf backup.tar.gz * && mv backup.tar.gz /path/to/backup/
```

## 8. 定期的なタスクの自動実行

**GUIでの手順：**
* 手動でタスクを実行する、または特定のソフトウェアを使用する

**CUIでの手順：**
```bash
(crontab -l; echo "0 0 * * * /path/to/script.sh") | crontab -
```

## 9. 画像ファイルの一括リサイズ

**GUIでの手順：**
* 各画像を開いて手動でリサイズする

**CUIでの手順：**
```bash
mogrify -resize 800x600 *.jpg
```
（ImageMagickを使用）

## 10. 特定の文字列をファイル内で一括置換

**GUIでの手順：**
* 各ファイルを手動で開き、置換を実行する

**CUIでの手順：**
```bash
sed -i 's/old_string/new_string/g' *.txt
```

## 11. ログファイルの監視とリアルタイム表示

**GUIでの手順：**
* ログファイルを手動で開いて確認する

**CUIでの手順：**
```bash
tail -f /var/log/syslog
```

## 12. 大量のデータを効率的にダウンロード

**GUIでの手順：**
* 各URLを手動で開いてダウンロードする

**CUIでの手順：**
```bash
wget -i urls.txt
```

## 13. 大量のファイルを一括で圧縮

**GUIでの手順：**
* 各ファイルを手動で圧縮する

**CUIでの手順：**
```bash
tar -czvf archive.tar.gz /path/to/directory/*
```

## 14. バッチ処理でデータ変換

**GUIでの手順：**
* 各ファイルを手動で開いて変換する

**CUIでの手順：**
```bash
for file in *.csv; do iconv -f SJIS -t UTF-8 "$file" -o "${file%.csv}_utf8.csv"; done
```

## 15. ファイルシステムのバックアップと復元

**GUIでの手順：**
* 手動でファイルをコピーし、復元する

**CUIでの手順：**
```bash
dd if=/dev/sda of=/path/to/backup.img
```

## まとめ

上記のような事例を通して、CUIの便利さを示すことで、以下のポイントを強調することができます：

1. **効率性**：大量の操作を一度に実行できる。
2. **再現性**：同じ操作をスクリプトとして保存し、何度でも再実行できる。
3. **自動化**：定期的なタスクを自動化できる。
4. **精度**：人為的なミスを減らすことができる。
5. **一貫性**：手順が統一されており、一度学べば多くの作業に適用可能。
6. **スクリプト化可能**：複雑な手順をスクリプトとして保存し、再利用可能。
7. **高速化**：手動操作に比べて遥かに高速であることが多い。
8. **柔軟性**：多様なタスクに対応できる。

これらの利点を具体的な例とともに説明することで、CUIの利便性を理解してもらいやすくなります。
また、CUIを使いこなすことで、システム管理者やデベロッパーとしてのスキルアップにもつながります。
何よりCUIのコマンドって変わらないから一度習得すればずっと使えるのもメリットだと思います。

## 注意点

CUIの便利さを実感するためには、基本的なコマンドの使い方や、シェルスクリプトの基礎知識が必要です。初心者の方は、少しずつ学んでいくことをおすすめします。また、実行前に必ずコマンドの意味を理解し、重要なデータには適切なバックアップを取ることを忘れずに。

これらのコマンドを実行してデータが消えたり破損しても責任は負えません。
実験環境でチェックするようにしましょう。

CUIを使いこなすことで、作業効率が大幅に向上し、複雑なタスクも簡単に処理できるようになります。
ぜひ、これらの例を参考に、CUIの世界を探索してみてください！
Do Untilは終了条件

Power Automateで繰り返し処理を行う「Do Until」、編集画面に入力する条件式は
## 終了条件！！！

<br/>
また、判定タイミングは、

## Do Until内最後のアクション！！！

<br/>
編集画面だとDo Until枠の上部にあるため、私はループ継続条件かつ最初に判定と思い込んでハマったので短いですが、共有させていただきます、
スケーラビリティを考慮したクラウドネイティブなスクラム開発の実践


## はじめに

こんにちは、皆さん。今回は、クラウドネイティブなスクラム開発においてスケーラビリティを考慮する方法についてお話しします。クラウドベンダーの多様なサービスを活用しながら、どのようにしてプロダクトのスケーラビリティを確保するかについて、具体的な例を交えて解説します。

## スケーラビリティとは？

まず、スケーラビリティとは何かを簡単におさらいしましょう。スケーラビリティとは、システムが負荷の増加に対してどれだけ効率的に対応できるかを示す指標です。具体的には、ユーザー数やデータ量が増加した際に、システムがどれだけスムーズに動作し続けるかが問われます。

## クラウドサービスの活用

### オートスケーリング

クラウドベンダーの多くは、オートスケーリング機能を提供しています。例えば、AWSのAuto ScalingやGoogle CloudのInstance Groupsを利用することで、負荷に応じて自動的にリソースを増減させることができます。これにより、ピーク時の負荷にも対応でき、コスト効率も向上します。

### サーバーレスアーキテクチャ

サーバーレスアーキテクチャもスケーラビリティを考慮する上で非常に有効です。AWS LambdaやGoogle Cloud Functionsを利用することで、リクエストに応じて自動的にスケールアウトすることができます。これにより、インフラの管理から解放され、開発に集中することができます。

## データベースのスケーラビリティ

### 分散データベース

データベースのスケーラビリティも重要な要素です。クラウドベンダーが提供する分散データベース（例えば、Amazon DynamoDBやGoogle Cloud Spanner）を利用することで、大量のデータを効率的に処理することができます。これにより、データの増加にも柔軟に対応できます。

### キャッシュの活用

データベースの負荷を軽減するために、キャッシュを活用することも有効です。Amazon ElastiCacheやGoogle Cloud Memorystoreを利用することで、頻繁にアクセスされるデータをキャッシュし、データベースへのアクセスを減らすことができます。

## スクラム開発におけるスケーラビリティの考慮

### スプリントプランニング

スプリントプランニングの段階で、スケーラビリティに関するタスクを明確にしておくことが重要です。例えば、オートスケーリングの設定やキャッシュの導入など、スケーラビリティを向上させるためのタスクをスプリントの一部として計画に組み込みます。

### 継続的インテグレーションとデプロイ

継続的インテグレーション（CI）と継続的デプロイ（CD）を活用することで、スケーラビリティに関する変更を迅速に反映することができます。例えば、JenkinsやGitHub Actionsを利用して、コードの変更が自動的にデプロイされるように設定します。

## まとめ

スケーラビリティを考慮したクラウドネイティブなスクラム開発は、プロダクトの成長に不可欠です。オートスケーリングやサーバーレスアーキテクチャ、分散データベースなどのクラウドサービスを活用することで、効率的にスケーラビリティを確保することができます。スクラム開発の各フェーズでスケーラビリティを意識し、継続的に改善していくことが成功の鍵です。

皆さんもぜひ、これらのポイントを参考にして、スケーラブルなプロダクトを開発してみてください！
React SlickでlazyLoadを使おうとしたら型が違うと怒られた

# 初めに

まず、React Slickのsettingsを[こちら](https://react-slick.neostack.com/docs/example/lazy-load)の公式docを参考に以下のように書きました。

```typescript
 const settings = {
    dots: true,
    infinite: true,
    speed: 1000,
    slidesToShow: 1,
    slidesToScroll: 1,
    initialSlide: 0,
    autoplay: true,
    arrows: false,
    
    // ここが原因でエラー
    lazyLoad: true,
}
```

具体的なエラーの内容は型が違うということらしいです。

これが原因でlazyLoadが使用できなかったんですが、何とか解決できたので共有します。

# 解決策

エラー文には以下のように書かれていたので、

```
プロパティ 'lazyLoad' の型に互換性がありません。
型 'boolean' を型 'LazyLoadTypes | undefined' に割り当てることはできません。
```

自分で***LazyLoadTypes***を定義することで解決できました。

具体的なコード例は以下になります。

```typescript
type LazyLoadTypes = "ondemand" | "progressive" | "anticipated";

  const settings = {
    dots: true,
    infinite: true,
    speed: 1000,
    slidesToShow: 1,
    slidesToScroll: 1,
    initialSlide: 0,
    autoplay: true,
    arrows: false,
    // LazyLoadTypesとして割り当てる
    lazyLoad: "ondemand" as LazyLoadTypes,
  };
```

これによって型の不一致がなくなります。

# 終わりに

何とか解決できたんですけど、もっと良い解決策があるような気がします。
こうすると良いよーってのがあれば教えて頂きたいです。

記事が参考になれば嬉しいです！
Bizメール＆ウェブ でメールサーバを、Webサーバが外部にある場合のSPFレコードの設定について

## あらすじ

お客さんから、Gmail宛にメール送っても届かない！という連絡が来ました。
まぁ[最近流行りのアレ](https://support.google.com/a/answer/81126)だろうなと思いつつ調査に乗り出しました。

## 環境

諸々の事情により、構成はなかなかにカオスな状態

ドメイン、ネームサーバ: [お名前.com](https://www.onamae.com/)
WEBサーバ: [Xserver](https://www.xserver.ne.jp/)
メールサーバ: [Bizメール＆ウェブ](https://www.ntt.com/business/services/cloud/rental-server/biz.html) 

## 解決する

[マニュアル](https://bizmw.jp/p-manual/mwpr3_setup/oid0043/)にある記載はこうなってます。

```
"v=spf1 +a include:_spf.mwprem.net ~all"
```

ですが、これはWEBサーバもメールサーバも両方 `Bizメール＆ウェブ` を使う前提の記述方法です。
今回のように Webサーバがすでに外部に引っ越し済みの場合、この記述ではSPFがPASSしません。

解決方法を3つ紹介します。
```
# 変更前の記述
"v=spf1 +a include:_spf.mwprem.net +a:sv***.xserver.jp include:spf.sender.xserver.jp ~all"
```
※ 通常のメールとは別に、システムから送信するメールがXserverから送っているのでその設定が含まれています。

### 解決方法1 ip4 を記述する

SPFの記述の仕方はいくつかありますが、その中にIPv4を直接指定する方法があります。
この記述方法はDNSサーバへのリクエスト数が少ないため、負荷が軽減されます。（実感できるかどうかは・・・）
デメリットとしては、サーバのIPが変更された際に、このレコードも変更しないといけなくなり、人的ミスが懸念されます。（往々にして記憶からさっぱり消え去った頃にこういった事態は起きるものです。）


```
# 記述例: +a を ip4:192.168.1.1 に書き換えています。
"v=spf1 ip4:192.168.1.1 include:_spf.mwprem.net +a:sv***.xserver.jp include:spf.sender.xserver.jp ~all"
```

### 解決方法2 a: を記述する

メールソフトに設定する都合上、 `Bizメール＆ウェブ` のIPもサブドメインなどで設定しているかと思います。
このサブドメインをSPFのレコードに追加してあげます。
この方法は上記のメリットとデメリットを逆転した書き方です。
ただし、ちゃんと正しい送信サーバを設定しているか確認してください。

```
# 記述例: +a を a:smtp.example.com に書き換えています。
"v=spf1 a:smtp.example.com include:_spf.mwprem.net +a:sv***.xserver.jp include:spf.sender.xserver.jp ~all"
```

### 解決方法3 +mx を記述する（おすすめ）

多くの場合、送信サーバと受信サーバは同じだと思います。
その場合、このやり方が一番記述量を少なくできる（≒ミスしにくい）方法です。

```
# 記述例: +a を +mx に書き換えています。
"v=spf1 +mx include:_spf.mwprem.net +a:sv***.xserver.jp include:spf.sender.xserver.jp ~all"
```

## 追加の解説（蛇足）

`+a` という記述は、メールアドレスのドメイン( `taro@exasmple.com` の `example.com` の部分)のAレコードに指定されているIPアドレスを指定するものです。
本来のWebとMailが同じサーバで運用されている場合には問題になりませんが、今回のように別々のサーバで運用している場合には使えません。
なので、他の方法でIPアドレスを指定する必要があります。
そもそもSPFレコードは「このドメインでは、このIPのリストに含まれているIPのいずれかからしか送りませんよ。」という意思表示です。
なのでリストに含まれないIPアドレスからのメールは迷惑メール判定されやすくなります。

## おわりに
実際の案件では、DKIMやDCMARの設定も追加しました。
こちらについては今回は特に罠を踏まなかったため、省略しています。
SPFだけは何も考えずに設定したので、なかなかPASSしてくれず右往左往しました。
ちゃんと確認したらすぐに分かりそうなことなのに・・・戒めのために記事に残します。

よいSPFライフを！
Terminalでカーソルが表示されない場合の解決方法

## はじめに
WSL2/Ubuntu環境でTerminalを使用していてカーソルが所定の位置に表示されない場合があり、その際にカーソルを所定の位置に表示させる方法を紹介します。

**開発環境**
・WSL2/Ubuntu環境

## カーソルが所定の位置に表示されない場合の2つの解決方法

### 1つ目の解決方法：tput cnormを実行

「tputコマンド」は文字を装飾したり、画面をクリアしたりなど多様な機能を持つコマンドです。「tputコマンド」は以下サイトが非常にわかりやすかったので、詳細はこちらをご参考ください。

https://qiita.com/onokatio/items/5d282b72ac5565ae4569

以下コマンドを実行すると、カーソルを所定の位置に表示することが出来ます。
```
$ tput cnorm
```

このコマンドを実行すると、Terminalの上部に過去の表示内容を残した状態で、カーソルを所定の位置に表示できるのが良い点です。

### 2つ目の解決方法：resetを実行

「resetコマンド」はTerminalをリセットするコマンドです。
以下コマンドを実行すると、カーソルを所定の位置に表示することが出来ます。
```
$ reset
```

このコマンドを実行すると、Terminalの上部に過去の表示内容は残りません。


## 参考文献

本記事は以下情報を参考にして執筆しました。

https://qiita.com/onokatio/items/5d282b72ac5565ae4569
ポーカーの基本ルールと確率の重要性

## ポーカーの基本ルール
ポーカーは、多くの異なるバリエーションが存在する人気のカードゲームです。以下は、いくつかの主要なバリエーションの基本ルールです。

### テキサスホールデム
各プレイヤーに2枚のホールカードが配られ、5枚のコミュニティカードがテーブルにオープンされます。
ベットラウンドは4つの段階に分かれており、プレイヤーは最良の5枚のカードの組み合わせを作ることを目指します。

世界的に有名なルールで、[オンラインポーカー](https://poker-choice.com/column/onlinepoker-recommend/ "オンラインポーカー")もだいたいこれです。

### オマハ
各プレイヤーに4枚のホールカードが配られ、5枚のコミュニティカードがテーブルにオープンされます。
プレイヤーは、自分のホールカード2枚とコミュニティカード3枚を使用して最良の5枚の手を作ります。
### スタッド
各プレイヤーに一部が伏せられたカードと一部が表向きにされたカードが配られます。
スタッドポーカーにはコミュニティカードはなく、各プレイヤーのカードだけでハンドを作ります。
## 確率の重要性
ポーカーは確率のゲームです。確率を理解し、利用することで、より有利にプレイすることが可能になります。

勝率の向上: 確率を理解することで、どのハンドでベットをするか、どのハンドでフォールドするかの判断がより正確になります。
リスク管理: 確率を用いることで、リスクを最小限に抑えつつ、最大限のリターンを狙うことができます。
## ポーカーにおける基本的な確率
### 手札の強さの確率
ポーカーでは、各ハンドの強さにはそれぞれ異なる確率があります。

#### ペア
任意のペアの出現確率は約42.3%です。
#### スリーカード
スリーカードの出現確率は約2.1%です。
#### フラッシュ
同じスーツの5枚のカードからなるフラッシュの出現確率は約0.2%です。
### フロップの確率
フロップで特定のカードを引く確率も重要です。

#### ポケットペアがセットになる確率
ポケットペアがフロップでスリーカード（セット）になる確率は約11.8%です。
#### フラッシュドローの確率
2枚の同じスーツのカードを持っている場合、フロップでフラッシュドロー（さらに2枚同じスーツのカードが出る）の確率は約10.9%です。
## ポーカーの確率計算の基礎
#### 基本的な計算方法
確率の基本概念と計算方法を理解することが重要です。

#### アウト
ハンドを改善するために必要なカードの数をアウトと呼びます。
##### パーセントの計算
アウトの数を残りのカードの数で割り、100を掛けることでパーセントを計算します。
ポーカーにおける具体的な確率計算
具体的なシチュエーションで確率を計算する方法を学びましょう。

##### アウトの数え方
例えば、フラッシュドローの場合、残りの同じスーツのカードは9枚あるため、アウトは9です。
##### ポットオッズの計算方法
ポットオッズは、ポットに対するベットの割合を計算します。例えば、ポットに100ドル、ベットが20ドルの場合、ポットオッズは5対1です。
## 各シチュエーションにおける確率
### プリフロップ
プリフロップでは、スタートハンドの確率が重要です。

#### エースのポケットペア
エースのポケットペアを持つ確率は約0.45%です。
#### フロップ後
フロップ後の確率を理解することで、適切な戦略を立てることができます。

#### ストレートドロー
オープンエンドのストレートドローの確率は約31.5%です。
#### ターンとリバー
ターンとリバーでの確率計算も重要です。

ターンでのフラッシュ完成: フラッシュドローがターンで完成する確率は約19.1%です。
リバーでのフラッシュ完成: フラッシュドローがリバーで完成する確率は約19.6%です。
## 確率を利用した戦略
### ベットサイズの決定
確率に基づくベットサイズの最適化を行いましょう。

ポットオッズとインプライドオッズ: ポットオッズに基づいて適切なベットサイズを決定します。インプライドオッズも考慮し、将来的なリターンを見込んだベットを行います。
ブラフとセミブラフ
確率を利用して、効果的なブラフとセミブラフを行う方法を学びます。

#### ブラフのタイミング
相手のレンジやポットオッズを考慮して、ブラフのタイミングを見極めます。
#### セミブラフ
ドローハンドでのセミブラフは、相手を降ろす可能性があり、さらに手が完成するチャンスもあります。
#### リスク管理
確率を利用してリスクを管理する方法を理解します。

#### バンクロール管理
確率を考慮して、適切なバンクロール管理を行い、長期的なプレイを可能にします。
## ポーカー確率に関するツールとリソース
### オンラインツールの紹介
確率計算や戦略立案に役立つオンラインツールを紹介します。

#### ハンドレンジツール
相手のハンドレンジを予測するツールです。
#### ポットオッズ計算機
ポットオッズを計算するためのツールです。
## おすすめの書籍やウェブサイト
確率に関する深い理解を得るためのリソースを提供します。

### 書籍
「The Mathematics of Poker」などのおすすめ書籍。
### ウェブサイト
PokerChoiceや2+2フォーラムなどの有益なウェブサイト。

https://poker-choice.com/
## よくある質問（FAQ）


初心者によくある質問とその回答をまとめます。

### Q: 確率をすぐに計算するのは難しいですか？
A: 練習が必要ですが、慣れることで迅速に計算できるようになります。オンラインツールを活用することもおすすめです。
確率計算のトラブルシューティング
確率計算の際によくある問題とその解決方法を説明します。

###  計算が合わない場合はどうすればいいですか？
A: 再度アウトの数を確認し、計算をやり直してください。複雑な場合はオンラインツールを使用するのも一つの方法です。
## まとめ
確率の重要性の再確認
確率を理解することで、ポーカーにおける判断力と戦略を大幅に向上させることができます。
【デザインパターン】Generation Gapパターン

## はじめに

Spring Boot を触れていた時に先輩から「そのControllerはGeneration Gapパターンです」というアドバイスをいただきました。
Generation Gapパターンについて理解を深めるため、ここでまとめます。

## 要約

- Generation Gapパターン
    - ソース自動生成ツールにはスーパークラスのソースだけを生成させる
    - プログラマはそのサブクラスだけを作る
    - インスタンス化するのはサブクラスだけ
    - サブクラスの方では、スーパークラスのメソッドを継承したり、オーバーライドしたり、新規メソッドを追加したりする
    - 自動生成ツールは中身をいろいろいじるけれど、サブクラスから使うインタフェース(API)は変えない
    - 自動生成ツールはTemplate Methodの部分も変えない。自動生成ツールの存在を前提


## Generation Gapパターン
ソフトウェアを開発する際に「どう作ればいいか悩むなぁ」と感じるときに、「こういう場合はこう作るときれいにできるよ」という設計パターンを、**デザインパターン**といいます。
今回は、そのデザインパターンの中の1つである **Generation Gapパターン** を紹介していきます。

現在、世の中には多くの自動生成ツールが存在します。それは一般にはとても便利なものなのですが、プログラマーが処理を追加するために手を加えると、再度自動生成ツールを使用しにくくなるという問題があります。

Generation Gapパターンは、継承を用いてこの課題を解決します。自動生成ツールは抽象クラスを生成し、プログラマーはその抽象クラスを継承した具象クラスを作成します。

図で表すと以下のような設計となります。

```mermaid
graph TD;
    A(自動生成ツール)--生成-->B(抽象クラス);
    C(具象クラス) -- 継承--> B
```

このアプローチにより、プログラマーが追加の処理を行う際は具象クラスのみを変更すればよいため、自動生成ツールを再実行しても、プログラマーが作成した部分が影響を受ける心配はありません。

## まとめ

本記事ではGeneration Gapパターンの概要を説明しました。
名前だけを聞くと一見複雑に見えるかもしれませんが（私も難しそうに感じました）、抽象クラスと具象クラスの違いを理解していれば、比較的理解しやすいパターンでした。

また、デザインパターンについては理解したつもりでいましたが、まだ知らないパターンが多くあることに気づきました。今後も学習を続けていきたいと思います。

## 参考
- https://www.hyuki.com/dp/dpinfo.html#GenerationGap
markdownで改ページしたい

個人的「質はともかく継続する」34日目です。

## 印刷資料をmarkdownで作る時の悩み

もうここ数年は資料類はほぼmarkdownだけで書くようになりました。PDFでもHTMLでも出力できるし、編集も起動がおもたいワードやExcelと違ってサクサクできるので、ずっと愛用しています。
しかし、たまに資料を印刷する必要があるときに、改ページがうまくいかずに困ることがあります。なんども調べては忘れを繰り返すので、忘れないようの書いておきます。

といっても、これだけです。

```html
<div style="page-break-before:always"></div>
```

このHTMLを改ページしたい場所に書くだけです。
意外とはまりがちなので、同じ悩みの人に届くといいなぁ。
AmplifyでLambda関数を作成する際の仮想環境の注意点と解決策

## 作者メモ
AmplifyでLambda関数を新しく作成した際に出てきたエラーで覚えておきたいので、メモしておきます。

初心者なので、間違えている場合はコメントいただけると嬉しいです。

## 経緯と問題
Amplifyで２個目のLambdaを作成。
コードが出来上がったので、AWSコンソール上に反映させようと、”amplify push"を行いました。

```
# amplify push
```
すると、
```
🛑 Could not find a pipenv site-packages directory at /Users/nnoti/.local/share/virtualenvs/kadailambdaget2/lib/python3.11/site-packages
```
指定されたパスにpipenv仮想環境のsite-packagesディレクトリが見つからないとでてしまいました。

Lambdaを新しく作成する度に仮想環境を構築しないといけないの…？
そんなバカなと思い、丸一日調べて頭を悩ませていました。

## 解決策
１つ目のLamdbaで使用していた仮想環境がターミナルに入ったままだった。

AmplifyでLambda関数を新しく作成した際に、特定の仮想環境（pipenv）がターミナルでアクティブだったため起こったエラーでした。

Lambdaを新しく作成する度に仮想環境を構築しないといけないというめんどくさい事はしなくて大丈夫そうでした。

```
# pipenv --venv
```

仮想環境がアクティブか確認

```
/Users/nnoti/.local/share/virtualenvs/kadailambdaget2
```
返ってきました仮想環境がアクティブになっていました。
```
# exit
```
仮想環境から抜けます。
```
Courtesy Notice: Pipenv found itself running within a virtual environment, so it will automatically use that environment, instead of creating its own for any project. You can set PIPENV_IGNORE_VIRTUALENVS=1 to force pipenv to ignore that environment and create its own instead. You can set PIPENV_VERBOSITY=-1 to suppress this warning.
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
Installing dependencies from Pipfile.lock (3b26c9)...
```
仮想環境にいないので、pipenvから怒られますが、気にしなくても大丈夫です。
```
Deployment state saved successfully.
```
無事にAmplifyにpushできました。

凡ミスでしたが、新人エンジニアあるあるかもしれません。
先輩に相談して気がつきました。

AmplifyでLambdaを作成するときはターミナル上で仮想環境にいないか要確認です。

仮想環境を使用後は忘れずに抜けておきましょう。
[Java]lambdaって【ラムダ】読むんだぜ

# Javaの研修について言いたい
完全に自社の話になりますが、他の企業様はどうなんだろうという興味本位なアレ。

2014年3月にJava8が出てから10年以上も経ってるわけですが、Javaの研修でラムダ式って教えないの？
※今年の新人に聞いたら【調べて使ってもいいよ】って感じだったようで、
　「~~外部研修なのに~~マジで時代おくれてんなぁ、平成か？」ってなったわ。

Javaの研修と言えば、オブジェクト指向から始まって、
class・methods・型（プリミティブ・オブジェクト）などがあり、
if/switchの分岐、for/while/forEachのループ文などの基本構文を覚えた後とかに、
ラムダ式ってやらんのか？（ウチだけ？

そもそも流石に10年も経ってるんだし、
基本構文に含めてもいいんじゃね？位の気持ちでいたんだけど。。。

# じゃあラムダで書くと何がいいんだよ？
例えば、一覧画面でチェックを付けた行だけ一括更新的な処理を想定して、、、
- 画面からのパタメータとしてString配列のidを取得
- 更新先のIDは数値型なのでString→Integer変換が必要
- 更新対象のデータを取得して特定のカラムを変更
みたいな処理が合ったとすると。。。

```java:基本構文だけで書くと。。。
public void delete(String[] hogeIds) {
	if (hogeIds != null && hogeIds.length > 0) {
		List<HogeTable> targetList = new ArrayList<>();
		for(String id : hogeIds) {
			if(NumberUtils.isDigits(id)) {
				HogeTable hoge = hogeTableRep.getOne(Integer.parseInt(id)); // JpaRepositoryを使ってる想定
				if(hoge != null) {
					hoge.setHogeColumn("hogehoge");
					targetList.add(hoge);
				}
			}
		}
		hogeTableRep.saveAll(targetList); // JpaRepositoryを使ってる想定
	}
}
```
ネストが深くてクソみたいな作りだな。。。

```java:ラムダ使って書くと。。。
public void delete(String[] hogeIds) {
	if (hogeIds != null && hogeIds.length > 0) {
		hogeTableRep.saveAll(
			Arrays.stream(hogeIds)
			.filter(id->NumberUtils.isDigits(id))
			.map(id -> mstUserRep.getOne(Integer.parseInt(id)))
			.filter(hoge -> hoge != null)
			.map(hoge -> {
				hoge.setHogeColumn("hogehoge");
				return hoge;
			})
			.collect(Collectors.toList())
		);
	}
}
```

いや、書き手のさじ加減じゃね？っていうのはわかるけど、
やってることが結構明確になったんじゃね？という見解なんだが、
どっちのほうが好まれるのかしら？
ListとかMapとかのコレクション系の操作の時にめっちゃ役に立つよね？

# 要するに。。。
プログラムって【仕様通りにさえ動いてしまえば】別にどんだけネストしようが無駄な分岐が有る書き方だろうと別に正解なわけで、
「一々そんなに拘るなよ、うるせぇなぁ。。。」ってなると思いますが、
どうせ書くんなら【キレイ・サッパリ・エレガント】な感じで書きたいじゃん？

ってなわけで、自分の書き方の幅を広げるためにも是非ともラムダ式覚えて帰っていってほしいです。
「CodeAGI」を使ってみる　〜準備まで〜

# はじめに

こんにちは、エンジニアのkeitaMaxです。

「CodeAGI」の始め方の準備までをやってみようと思います。
(まだAPIKeyがないのでここまでになります。。。。APIKey取得次第続き書く予定です。)

# CodeAGIとは

>AIによる完全なプログラム⾃動⽣成（ノーコード）
を実現するアプリケーションです。AIが企業独⾃の
様々な設計書（フリーフォーマット）を解析し、
これまでIT技術者が設計書や定義書・データ構造を
分析理解し作成してきたプログラムコード・テスト
ケース/データを⼈の数百倍の速度で⾼精度に⽣成
することを可能とします。
(引用：https://www.soppradx.com/download/CodeAGI%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB.pdf)

コードを書かなくても、AIがプログラムを自動生成してくれるアプリケーションのようです。

# 実際に使ってみる

### インストール

まずはダウンロード・インストールが必要なので、以下のURLからダウンロードします。

https://www.soppradx.com/service.html

![スクリーンショット 2024-07-10 21.33.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/8ef89625-2dbd-9a2c-13c3-ae6d175153a6.png)

MACアプリが実行できない時は以下を参考にしてください。



### 登録

ダウンロードしたファイルを開くと以下のような画面が出るので、「アカウント登録」をおします。

![スクリーンショット 2024-07-10 21.57.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/06d58a62-2018-786f-2657-f8fbb15ca66d.png)

各入力欄があるので入力して登録します。

![スクリーンショット 2024-07-10 21.57.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/9e79e455-0319-cc70-728c-fa8ba6a56e6e.png)

登録が終わると以下のような画面になります。

![スクリーンショット 2024-07-10 22.01.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/2d97b902-5875-2338-6074-b21604bc68dd.png)

# API Keyの登録

APIKeyを登録しなくてはならないので、別途APIKeyを取得して入力します。

![スクリーンショット 2024-07-10 22.06.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/ddabd8ff-fe4a-a122-2eb4-f8a13cead78b.png)

- OpenAI
- Azure
- Google

3つのから選べることができます。

APIの使用料に関してはこのCodeAGIとは別途料金がかかるようです。

これを登録すれば準備完了です。

# おわりに

テーブルや画面イメージからコード作成をしてくれるようなので、かなり開発が捗りそうです。

この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。

最後まで読んでいただきありがとうございました！

# 次の記事
TOEICの800点を超えるまでの課題

### はじめに
私は、学生時代にTOEICの点数が430点という壊滅的な点数でした。その後、紆余曲折を得て今は820点を取得しております。それまでに当たった壁とその対応方法をここに残しておきます。

### 目次
+ [800点台の世界](#800点台の世界)
+ [600点の壁を乗り越える](#600点の壁を乗り越える)　目標学習期間：3か月
+ [700点の壁を乗り越える](#700点の壁を乗り越える)　目標学習期間：3か月
+ [800点の壁を乗り越える](#800点の壁を乗り越える)　目標学習期間：1年

## 800点台の世界
最初に、皆さんの記事へのモチベーションを上げるためにTOEIC820点をとれると何ができるのかについて触れておきます。
もちろん個人差は大きくあると思いますが、私は820点を取得してからは以下のようなことができます。

#### [Listening]
+ 英語での日常会話には困らない
+ 英語での会議は6割理解でき、2割文脈から補完して8割理解できる
+ アメリカ大統領候補者スピーチが理解できる（大統領にもよりますが）
+ GCPやAWS等の英語の講習や発表が普通に理解できる
+ BBCニュース(ラジオ)は半分理解できる

#### [Reading]
+ 日本語ほどのスピードではないが、英語メールや英語文献は普通に読める

#### [Others]
+ Speakingの学習効率が速くなる
ListeningとReadingができるだけで、Speakingの向上は段違いです。なぜなら、聞いたことの分構造を理解して真似ることができるからです。
+ TOEICテストが楽しくなる

いまも900点台を目指して奮闘中です。
皆さんも一緒に英語学習頑張りましょう！

## 600点の壁を乗り越える
#### 課題
このレベルの頃、以下のような課題のある方が多いと思います。
1. 英語に苦手意識がある
1. 基本的な英単語も全然覚えてない
1. 基礎的な英文法には自信がある（自信過剰）

#### 対処方法
そこでとった学習方法は以下のような感じです。
1. 毎日30分英語を勉強する
ここでの目的は、学習習慣を身に着けて英語への苦手意識をなくすことです。とりあえず、毎日続けましょう。
1. 基礎的な英単語を覚えなおす
1. 適当な参考書で中学英文法からみっちりやり直す
文法は基礎に返ってしっかりと理解をすることが大事です。例えば、皆さん以下説明できますか？
+ 不定詞と動名詞の違いは？
+ 過去分詞ってどういう分構造をとるの？
+ 仮定法ってどういうときに使うのですか？

説明できるように、中学英文法からしっかりやりな押しましょう！

## 700点の壁を乗り越える
このレベルまで来て、学習の習慣があればこの段階は結構スムーズに突破できます。足を止めずに進めていきましょう！
#### 課題
以下のような課題のある方が多いと思います。
1. 分からない単語が多々ある
1. have p.pとhad p.pの違いなど、紛らわしい文法が難しい。
1. 「get into」みたいなフレーズが苦手
1. リスニング早すぎorz

#### 対処方法
こんな感じで対処していきましょう。
1. TOEIC用の単語帳を片手にコツコツ対策する
スマホの単語アプリで空き時間にコツコツするのがおすすめです。「TOEIC 単語」とかでPlayStoreで検索してみて下さい。
1. 中学文法の参考書を繰り返し何週も勉強する
あいまいな部分がないように、みっちりと学習をしていきましょう。
1. 単語やフレーズの意味とルールを理解する
get into, get on, get inそれぞれ意味が違って難しいですよね。ここは丸暗記で強引に頑張らなくていいです。文脈と一緒に理解をしましょう。Youtubeで解説動画を見て理解するのも良いです。

1. Youtubeで楽しく英語に慣れる
早い！！って気持ちはわかります。でも、実は実践に比べてすごく遅いです。そして、この時期に一番伸びるのはリスニングです。英語のVlogとか実況とかを英字幕付きで見てみましょう。ここで大事なのは、英語への慣れです。理解も4割程度で十分です。雰囲気で動画見ながら、笑ってみましょう。

## 800点の壁を乗り越える
ここまで来たあなたは、英語の基礎力は十分身についているといってよさそうです。ただ、ここからが一番苦しいですね。。。
私はこの壁を乗り越えるのに1年かかりました。でも、ここまで来たあなたならもう理解できますよね。焦らず地道に英語学習をしていきましょう。

#### 課題
考えられる課題は以下のような感じです。
1. まだまだ分からない単語でてくる
1. 長文が時間内に終わらない
1. リスニングが安定しない


#### 対処方法
対処方法は地味です。
1. ネガティブかポジティブかだけ考えてみる
私も知らない単語出てきます。その時は文脈からその語句がポジティブかネガティブかだけ理解して、そのまま突き進んでもたいがいどうにかなります。本番前に練習問題でポジティブかネガティブかを判別する練習をしておきましょう。
1. あきらめる
私も終わりません。あきらめましょう。集中あるのみです。
1. 以下意識して練習してみて下さい
 ①その場にいるつもりでリスニングを聞く
 ②リスニング回答のリズムを作る
 ③ダメな時はあきらめる
 ④「BBC Radio」等の音声コンテンツで更にリスニング力を磨く