OmniAICreator/Qiita-1.07M huggingface dataset:
ローカルで.gitlab-ci.ymlの検証(validation)する

# プッシュしてCI実行前に、ローカルで.gitlab-ci.ymlの検証(validation)したいよね。。。

## 1. gitlabのcli `glab` をインストール

https://gitlab.com/gitlab-org/cli

```
brew install glab
```

## 2. `.gitlab-ci.yml` の構文チェックを実行

```
% glab ci lint
You must be in a GitLab project repository for this action.
Error: 1 error occurred:
	* kaihei777/sample-gitlab-project: 404 Not Found
```

## 3. `404 Not Found`になるので状況確認

### glab の認証トークンが設定されていない 

```
glab auth status

gitlab.com
  x gitlab.com: API call failed: GET https://gitlab.com/api/v4/user: 401 {message: 401 Unauthorized}
  ✓ Git operations for gitlab.com configured to use ssh protocol.
  ✓ API calls for gitlab.com are made over https protocol.
  ✓ REST API Endpoint: https://gitlab.com/api/v4/
  ✓ GraphQL Endpoint: https://gitlab.com/api/graphql/
  ! No token provided in configuration file.

x could not authenticate to one or more of the configured GitLab instances.
```

## 4. 未認証の場合 は、以下の手順でトークンを設定
- GitLab の アクセストークン発行ページ にアクセス
`Personal access tokens`を追加
`api` スコープを持つアクセストークンを発行
- glab auth login を実行し、発行したトークンを入力

![スクリーンショット 2025-02-21 16.31.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44351/873bf515-102f-4a7b-b51c-ed2840792e06.png)

api
![スクリーンショット 2025-02-21 16.33.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44351/773a9491-074c-44b4-8a4a-c43fc6979d0e.png)

```
glab auth login
? What GitLab instance do you want to log into? gitlab.com
- Logging into gitlab.com
? How would you like to sign in? Token

Tip: generate a personal access token at https://gitlab.com/-/user_settings/personal_access_tokens?scopes=api,write_repository.
The minimum required scopes are 'api' and 'write_repository'.
? Paste your authentication token: **************************
? Choose default Git protocol: SSH
- glab config set -h gitlab.com git_protocol ssh
✓ Configured Git protocol.
- glab config set -h gitlab.com api_protocol https
✓ Configured API protocol.
✓ Logged in as kaihei777
✓ Configuration saved to /Users/kaihei777/.config/glab-cli/config.yml
```

## 5. 再度、`.gitlab-ci.yml` の構文チェックを実行

```
glab ci lint    
Validating...
✓ CI/CD YAML is valid!
```
dnf installで「killed」と出た場合の対処法

dnf installで「killed」と表示された場合、メモリ不足の可能性があります。
いくつか原因と対処法があると思いますが、私は以下の方法で解決しました。

以下のコマンドでスワップ領域を増やすことで、事象が解消する可能性があります。

``` shell
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
```
REST API は レゴブロック


APIについて，何かしらの情報を渡すために使うもの，程度の理解しかなかった．
RestfulなAPIを理解する為に，イメージを重視してAPIから考える．


### API 自体
APIはインターフェイスである．

https://qiita.com/molecular_pool/items/f5b0c267fb9dfad53035

---


### REST API 
REST API（Representational State Transfer API）
HTTPプロトコルを利用してリソース（データ）をやり取りするためのインターフェースである．

RESTfulなAPIは，以下の特徴を持つ．
 - リソース指向
REST APIでは，すべてのエンドポイントがリソース（データの対象）を指し，それらはURL（Uniform Resource Locator）によって一意に識別される．

 - HTTPメソッドの利用
REST APIでは，以下のHTTPメソッドを用いて適切な操作を行う．
GET: リソースの取得
POST: 新しいリソースの作成
PUT: 既存リソースの更新
DELETE: リソースの削除

 - ステートレス
各リクエストが独立しており，サーバー側で状態を保持しないことが原則である．すべての情報はリクエスト内に含まれており，サーバー側でセッションを管理しない．つまり使い捨てである．

 - REST APIとCRUDの関係
CRUD（Create, Read, Update, Delete）は，データの基本操作を表す概念であり，REST APIのHTTPメソッドと一致する．
Create → POST
Read → GET
Update → PUT
Delete → DELETE
REST APIは，HTTPメソッドを用いることでCRUD操作を実現する．そのため，REST APIはCRUD原則に則った設計となる．

 - Webアプリ間の通信とAPI
WebアプリAとBが通信する場合，それぞれにAPIがインターフェースとして存在し，実際の通信はHTTPを介して行われる．例えば，WebアプリAがWebアプリBのAPIを呼び出し，データを取得・更新する．


---


### REST APIの役割と制限
REST APIはCRUDに基づいたデータのやり取りを行うが，単純なデータ操作にとどまらず，認証やデータフィルタリング，集計などの高度な処理も可能である．
REST APIは「基本的なデータのやり取り」のみを行うわけではなく，CRUDを基盤として，より複雑なビジネスロジックを実装することができる．

---

### REST APIの簡単なイメージ
REST APIは，限られた基本操作（CRUD）を組み合わせて，さまざまな機能を構築する「レゴブロック」のようなイメージである．基本的なHTTPメソッドを組み合わせることで，柔軟なシステム設計が可能となる．

---

### APIを自作する方法
#### 設計
- どのデータをどのように提供するかを設計する．
- 例: 「ユーザー情報を取得するAPIを作成する」

#### バックエンドの実装
- APIを提供するためのサーバーを構築する．
- Node.js（Express），Django，Flask などのフレームワークを使用可能．

#### ルーティングの設定
- どのURLにリクエストを送ればどのデータが取得できるかを定義する．

#### レスポンスの設計
- 返却するデータのフォーマットを決める（例: JSON）．

#### エラーハンドリング
- 例: ユーザーが存在しない場合，`404 Not Found` を返す．

---

### API開発時の注意点

#### セキュリティ
- **認証・認可**: APIキーやOAuthを活用する．
- **CORS（Cross-Origin Resource Sharing）**: 不正なアクセスを防ぐ設定が必要．

#### エラーハンドリング
- 適切なエラーメッセージを返す．
- HTTPステータスコードを正しく利用する（例: `200 OK`, `400 Bad Request`）．

#### バージョン管理
- 既存のAPIを壊さないよう，`/v1/` などのバージョンを付与する．

#### ドキュメント作成
- APIの利用者向けに，エンドポイント，リクエスト・レスポンスの形式を明記する．





### 参考文献
 - Fielding, Roy. "Architectural Styles and the Design of Network-based Software Architectures." (2000).
 - "RESTful Web APIs" - Leonard Richardson, Mike Amundsen, Sam Ruby (O'Reilly Media, 2013).
 - "API Design Patterns" - JJ Geewax (Manning Publications, 2021).
 - GraphQL公式ドキュメント: [https://graphql.org/](https://graphql.org/)
 - REST API設計のベストプラクティス: [https://restfulapi.net/](https://restfulapi.net/)
 - WebSocketの基本: [https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API)
 - HTTP/1.1 Specification: [https://www.rfc-editor.org/rfc/rfc2616](https://www.rfc-editor.org/rfc/rfc2616)
inputフォームのカンマ設定処理

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@GetMapping("/search")
public String searchProjects(
        @RequestParam(required = false) String startDate,
        @RequestParam(required = false) String endDate,
        Model model
) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

    LocalDateTime start = (startDate != null && !startDate.isEmpty()) 
                          ? LocalDate.parse(startDate, formatter).atStartOfDay() 
                          : null;

    LocalDateTime end = (endDate != null && !endDate.isEmpty()) 
                        ? LocalDate.parse(endDate, formatter).atTime(23, 59, 59) 
                        : null;

    List<Project> projects = projectService.searchByContractDate(start, end);
    model.addAttribute("projects", projects);
    return "search";
}
APIの基本的な理解

RestfulなAPIについて理解する為に，API自体のイメージをつかむ


### API とは

APIとは，ソフトウェアが別のソフトウェアとデータをやり取りするための仕組みである．
APIを利用することで，情報のやり取りや，外部の機能やデータを自分のアプリケーションに統合することが可能となる．
例えば，PCやスマホでは，天気予報がロック画面に勝手に表示されたりするが，あれは天気予報APIを利用している．
外部の天気情報サービスにリクエストを送り，レスポンスを受け取ることで実現している．

---

### APIを理解するためのポイント
APIを理解するためには，以下の点を押さえておくことが重要である．

1. **リクエストとレスポンス**
   - APIはリクエストを送信し，レスポンスを受け取る仕組みで動作する．
   - リクエストには，主にURLを用いる．レスポンスは多くのプロトコルの選択肢があるが，REST APIではHTTPを用いる．
   - 例: `https://api.example.com/weather?city=Tokyo` にリクエストを送ると， `{ "temperature": 25, "condition": "sunny" }` というレスポンスが返る．

2. **エンドポイント**
   - APIは特定のURL（エンドポイント）を持ち，そこにアクセスすることでデータを取得・送信する．

3. **HTTPメソッド**
   - APIはHTTPメソッドを用いて動作する．代表的なものは以下の通り．
     - `GET`: データ取得
     - `POST`: データ作成
     - `PUT`: データ更新
     - `DELETE`: データ削除

---

### APIを理解する為のイメージ
#### レストランのメニュー
APIをレストランのメニューに例えることができる．  
注文（リクエスト）をウェイター（API）に伝えると，厨房（サーバー）で調理が行われ，料理（レスポンス）が提供される．

#### ATMの操作
銀行のATMもAPIのような仕組みで動作している．  
「お金を引き出したい」というリクエストをATMに伝えると，銀行のシステム（サーバー）が処理を行い，現金が引き出せる．


---

## APIの種類と特徴

| APIの種類    | 特徴 | 主な使用シチュエーション |
|-------------|----------------|------------------|
| REST API    | HTTPを用いたシンプルなAPI | Webアプリ，モバイルアプリ |
| SOAP API    | XMLを用いた高セキュリティなAPI | 金融・医療など厳格なセキュリティが必要なシステム |
| GraphQL API | 必要なデータのみ取得できるAPI | 柔軟なデータ取得が求められる場面 |
| WebSocket API | 双方向通信が可能 | チャット，リアルタイムデータ更新 |
PythonでExcelを画像 (JPGまたはPNG) に変換する

Excelを画像に変換することで、表示されるデータの書式がデバイスやソフトウェアのバージョン、開き方によって変わることがありません。プレゼンテーション、レポート文書、ウェブページのいずれに画像を挿入する場合でも、Excel表の元のスタイルは維持されます。このガイドでは、**Pythonを使ってExcelファイルをJPGやPNG画像に変換する**方法を紹介します。
* [PythonでExcelワークシートを画像に変換する](#pythonでexcelワークシートを画像に変換する)
* [Pythonで指定したセル範囲を画像に変換する]()

## Excelを画像に変換するPythonライブラリ
作業を始める前に、サードパーティライブラリ[Spire.XLS for Python](https://www.e-iceblue.com/Introduce/xls-for-python.html)をインストールする必要があります。ターミナルで以下のコマンドを実行することでインストールできます：
>pip install Spire.XLS

また、以下のリンクから製品パッケージをダウンロードし、ローカルパスからインストールすることもできます。

https://www.e-iceblue.com/Download/Spire-XLS-Python.html


## PythonでExcelワークシートを画像に変換する
**`Worksheet.ToImage()`** メソッドを使用すると、指定したワークシートを直接画像に変換できます。次に、Save() メソッドを使用して、画像を JPG または PNG ファイルに保存できます。
手順は以下のとおりです：
1. ライブラリをインポートします。
1. **`Workbook.LoadFromFile()`** メソッドでExcelファイルをロードする。
1. **`Workbook.Worksheets[index]`** プロパティで指定したワークシートを取得する。
1. **`Worksheet.ToImage()`** メソッドでワークシートを画像に変換する。
1. 指定された形式で画像を保存する。

**Python コード：**
```python
from spire.xls import *
from spire.xls.common import *

# Excelファイルを読み込む
workbook = Workbook()
workbook.LoadFromFile("input.xlsx")

# 最初のワークシートを取得する
sheet = workbook.Worksheets[0]

# ワークシートを画像に保存する
image = sheet.ToImage(sheet.FirstRow, sheet.FirstColumn, sheet.LastRow, sheet.LastColumn)

# 画像をPNGファイルに保存する
image.Save("SheetToImage.png")
workbook.Dispose()
```

## Pythonで指定したセル範囲を画像に変換する
セル範囲を指定して、**`Worksheet.ToImage()`** メソッドで画像に変換することもできます。以下はPythonのコードである：
```python
from spire.xls import *
from spire.common import *

# Excelファイルを読み込む
workbook = Workbook()
workbook.LoadFromFile("input.xlsx")

# 最初のワークシートを取得する
sheet = workbook.Worksheets[0]

# 指定したセル範囲を画像に変換する
image = sheet.ToImage(1, 1, 6, 4)

# 画像をPNGファイルに保存する
image.Save("CellRangeToImage.png", ImageFormat.get_Png())
workbook.Dispose()
```

変換中、Python Excelライブラリはワークシートのページマージンを設定するインターフェースも提供します。
```python
// 余白を0に設定して空白を取り除く
pageSetup = sheet.PageSetup
pageSetup.TopMargin = 0
pageSetup.BottomMargin = 0
pageSetup.LeftMargin = 0
pageSetup.RightMargin = 0
```

ウォーターマークを削除するには、クリックして無料トライアルライセンスをリクエストすることができます。

https://www.e-iceblue.com/TemLicense.html
zkTLSを一記事で理解する：安全な情報伝送、ZKの次なる新たなナラティブ？ [Bitget News翻訳]

![](https://img.bgstatic.com/multiLang/image/social/43237c91e9188e416b7c1ecdedb8a8381726633850665.jpeg)

:::note info
本記事は下記の翻訳となります。
[『Understanding zkTLS in one article: Secure information transmission, the next new narrative of ZK?』](https://www.bitget.com/news/detail/12560604214152)
:::

**ブロックチェーンオラクル：公開データ向けブロックチェーンAPI**

**zkTLS：あらゆるデータ向けのブロックチェーンAPI**

ゼロ知識トランスポート層サービス（zkTLS）は、閉鎖的な企業巨人ネットワークに致命的な打撃を与える可能性があります。新興ネットワークはzkTLSを活用することで、FacebookやAmazonのような巨人と競争する能力を手に入れています。

zkTLSはユーザーがインターネット上の自分のアイデンティティを許可なしに移行することを可能にし、新しいネットワークが既存のものを活用するための強力な方法を提供します。これによりユーザーは、ゼロから始めることなく、異なるプラットフォーム間を自由に切り替えることができます。最も重要なのは、データのプライバシーとセキュリティを損なうことなくこれを実現することです。



私たちは、暗号通貨アプリケーションがzkTLSを創造的な方法で活用している様子を目にしています。

zkPassはユーザーが従来の信用スコアをオンチェーンで検証することを可能にします。OpacityNetworkはUberドライバーが自分の評価をteleportxyzに移行することを可能にします。また、ドライバーやレストランがDoorDashからNoshDeliveryにレビューを移行することも可能にします。

**zkTLSの仕組みは以下の通りです：**

トランスポート層セキュリティ（TLS）はインターネット接続の95%以上を保護しています。これは、ほとんどのURLにある「https」の「s」を表しています。TLS接続は以下を確保します：

サーバー（銀行など）とクライアント（あなたのスマートフォンなど）間の信頼できる相互作用。

+ データの機密性。
    
+ 強力なデータ整合性。
    

![zkTLSを一記事で理解する：安全な情報伝送、ZKの次なる新たなナラティブ？ 画像1](https://img.bgstatic.com/multiLang/image/social/1850097546d3abea322323216272b6ee1726633851051.jpeg)

zkTLSは、セキュリティを損なうことなく、クライアントとサーバー間の通信のセキュリティを検証する第三者の検証者を導入します。検証を達成するための主な2つの方法があります：

**プロキシベース：** プロキシサーバーが仲介者として機能し、暗号化された通信をモニタリングし、部分的に復号化してクライアントの資格情報を検証します。

![zkTLSを一記事で理解する：安全な情報伝送、ZKの次なる新たなナラティブ？ 画像2](https://img.bgstatic.com/multiLang/image/social/297554c0fa1183866f21ed73366465e11726633851126.jpeg)

**マルチパーティ計算（MPC）ベース：** クライアントと検証者がサーバーと相互作用し、サーバーは検証者の存在を認識していない状態で、検証者がメッセージの信頼性を証明できるようにします。

![zkTLSを一記事で理解する：安全な情報伝送、ZKの次なる新たなナラティブ？ 画像3](https://img.bgstatic.com/multiLang/image/social/19b8f07866dc08cb738f15838a3af85d1726633851482.jpg)

プライバシーを維持するために、クライアントはゼロ知識証明を使用して、実際の情報を明かすことなくデータに関する特定の事実を証明します。

例えば、証明は特定の日付に銀行残高が1000ドル以上あったことを証明できますが、具体的な金額ではありません。あるいは、私の名前や生年月日などの他の詳細を明かすことなく、私のウォレットが検証済みのインド市民に属していることを証明できます。

これらの証明はブロックチェーン上に記録され、永続的に存在し、他のアプリケーションがアクセスして検証することができます。

ユーザーのデータを管理することは、インターネット巨人に対する力を持ち、ユーザーをロックインするパーソナライズされた体験に基づいたネットワークを作成することを可能にします。zkTLSは、今日、何十億もの人々を閉じ込めている壁を打ち破り、よりオープンで分散化された未来を創造します。

免責事項：本記事の内容は著者の意見のみを反映しており、いかなる立場でもプラットフォームを代表するものではありません。本記事は投資判断の参考として提供されるものではありません。

---

---

:::note info
【Sunrise とは】
Sunrise は Proof of Liquidity(PoL)と Fee Abstraction（手数料抽象化）を備えたデータ可用性レイヤーです。 私たちは DA の体験を再構築し、多様なエコシステムからのモジュラー型流動性を活用してロールアップを立ち上げています。

- [Sunrise - Specialized DA Layer for Proof of Liquidity](https://sunriselayer.io/)
- [Sunrise / Gluon Docs](https://docs.sunriselayer.io/)

【Social Links】

- [X(旧 Twitter)[英語])](https://twitter.com/SunriseLayer)
- [X(旧 Twitter)[日本語])](https://twitter.com/SunriseLayer)
- [Discord Community](https://discord.com/invite/sunrise)
- [Medium](https://sunriselayer.medium.com/)
- [Github](https://github.com/sunriselayer)
- [Linkedin](https://www.linkedin.com/company/sunriselayer)

【お問合せ】
Sunrise へのお問い合わせはこちらから 👉 [Google Form](https://forms.gle/h8RVahxRtXUvYwnv6)

![1080x360.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839047/8971d83b-3331-4757-dc72-320d28618735.jpeg)

:::
Salesforceのセキュリティモデル

# **Salesforceのオブジェクト・レコード・項目のセキュリティを体系的に理解したい！**

Salesforceでは、ユーザーごとに「どのデータにアクセスできるか」を細かく制御できます。  
この制御は、大きく以下の3つのレベルで考えると理解しやすいです。

1. **オブジェクトレベルのセキュリティ** → 「どのオブジェクトにアクセスできるか」  
2. **レコードレベルのセキュリティ** → 「どのレコードにアクセスできるか」  
3. **項目レベルのセキュリティ** → 「どの項目（フィールド）にアクセスできるか」  

---

# **1. オブジェクトレベルのセキュリティ**
オブジェクト（例：取引先、商談、リードなど）に対するアクセス権限を制御します。  

### **① ライセンス（License）**
- ユーザーがどの機能やオブジェクトにアクセスできるかを決める最上位の設定。  
- 例：「Salesforceライセンスを持っているユーザーは商談（Opportunity）を使えるが、Chatter Freeユーザーは使えない」

### **② プロファイル（Profile）**
- **ユーザーごとに基本の権限を設定するもの**。  
- **オブジェクトの作成（Create）、参照（Read）、編集（Edit）、削除（Delete）などを管理**。  
- 例：「営業担当者は商談オブジェクトを編集できるが、カスタマーサポートは閲覧だけできる」

### **③ 権限セット（Permission Set）**
- **プロファイルに追加で権限を付与するもの**（プロファイルの補助）。  
- 例：「ある営業担当者だけ、特別に商談の削除権限を与えたい」

#### **プロファイル vs 権限セット**
| 機能 | プロファイル | 権限セット |
|------|------------|------------|
| **基本権限** | ユーザーに1つだけ設定可能 | 追加で付与可能（複数設定可） |
| **役割** | そのユーザーの基本ルール | 例外的なアクセスを与える |
| **例** | 営業担当者には「商談の閲覧・編集権限」 | 特定のユーザーだけ「商談の削除権限」 |

---

# **2. レコードレベルのセキュリティ**
オブジェクトにアクセスできるユーザーのうち、**どのレコードを閲覧・編集できるか**を決める設定。  

### **④ レコード所有権（Record Ownership）**
- **Salesforceでは「レコードの所有者」が基本的に編集権限を持つ**。  
- **所有者は1人だけ**（ただし、キューに所有させることは可能）。  
- 例：「商談のレコードを作成した営業担当者が、その商談の所有者になる」

### **⑤ ロール階層（Role Hierarchy）**
- **上位のロールにいるユーザーが、下位のユーザーのデータを参照できる仕組み**。  
- **ただし、参照権限のみで編集権限はつかない**。  
- 例：「部長は営業担当者が所有する商談を参照できるが、編集はできない」

### **⑥ 共有ルール（Sharing Rule）**
- **レコードの共有をルールとして設定するもの**。  
- 「特定の条件を満たすレコードは、特定のユーザー・グループに共有する」  
- 例：「営業チーム全員が同じ業界の取引先情報を見られるようにする」

### **⑦ 共有の直接設定（Manual Sharing）**
- **特定のレコードを個別にユーザーへ共有できる**。  
- 例：「営業担当Aが持つ商談を、特定のマネージャーだけに閲覧権限を与える」

#### **ロール階層 vs 共有ルール vs 直接設定**
| 機能 | ロール階層 | 共有ルール | 直接設定 |
|------|-----------|-----------|-----------|
| **基本動作** | 上位者が下位のデータを参照 | 条件に合うレコードを共有 | 個別のレコードを手動で共有 |
| **適用範囲** | 組織全体の階層に基づく | ルールで設定したグループ | 1つのレコード単位 |
| **例** | 部長が営業担当の商談を参照 | 全営業に特定の業界の取引先を共有 | AさんがBさんに特定の商談を共有 |

---

# **3. 項目レベルのセキュリティ（Field-Level Security, FLS）**
オブジェクトやレコードにアクセスできるユーザーが、**どの項目（フィールド）を参照・編集できるか**を制御する。  

### **⑧ 項目レベルセキュリティ（Field-Level Security, FLS）**
- **特定のフィールドにアクセスできるかを制御する設定**。  
- 例：「営業担当者は取引先の『機密情報』フィールドを閲覧できないが、管理者は閲覧できる」  

**設定方法**  
✅ **プロファイル** → 「このプロファイルのユーザーはこのフィールドを編集できるか？」  
✅ **権限セット** → 「追加でこのフィールドの編集権限を与えたい」  

---

# **試験対策！分かりやすいまとめ**
| セキュリティレベル | 概要 | 設定方法 | 例 |
|----------------|------|------|------|
| **オブジェクトレベル** | どのオブジェクトにアクセスできるか | ライセンス、プロファイル、権限セット | 営業担当者は「商談」オブジェクトにアクセス可能 |
| **レコードレベル** | どのレコードを見たり編集できるか | レコード所有権、ロール階層、共有ルール、直接設定 | 営業担当者Aの商談は、部長も参照可能 |
| **項目レベル** | どのフィールドを見たり編集できるか | 項目レベルセキュリティ（FLS） | 営業担当者は「機密情報」フィールドを見られない |

### **ポイント！**
✅ **プロファイルは「基本権限」、権限セットは「追加の権限」**  
✅ **レコード所有者が基本的に編集権限を持つが、共有ルールやロール階層で他ユーザーに共有可能**  
✅ **項目レベルのセキュリティ（FLS）を設定すれば、データの機密性を高められる**  

これを理解すれば、Salesforceのデータアクセス制御をしっかりマスターできます！ 🚀
スコープ（変数の有効範囲）を理解しよう！ロボット工場のプログラムの秘密

プログラムの中で変数を自由に使えると思ったら大間違い！
実は、変数には「どこで使えるか？」というルールがあります。
これを **スコープ（有効範囲）** と呼びます。

スコープはまるでロボット工場の作業エリアのようなもの。
例えば、組み立てエリアでしか使えない部品があるのに、
検査エリアのロボットが勝手にその部品を使おうとすると、
「エラー！そんな部品、こっちにはないよ！」と怒られるのです。

さらに、スコープを理解せずにプログラムを組むと、
ロボットが「ネジはどこ？！」と混乱し、工場がパニックに陥るかもしれません。
だからこそ、スコープの仕組みをしっかり学ぶことが大切なのです。

さあ、ロボット工場を例にしながら、スコープの仕組みを楽しく学んでいきましょう！


## 1. ローカルスコープ（Local Scope）

ローカルスコープとは、関数の中だけで使える変数のこと。
まるで「ロボットが部品箱の中だけで部品を管理する」ようなものです。

```python
def assemble_robot():
    part = "モーター"
    print(f"ロボットの組み立てに {part} を使用します！")

assemble_robot()
print(part)  # エラー！partは関数の外では使えない
```

:::note info
**ポイント:**

- **part** は **assemble_robot** の中だけで有効。
- 関数の外では **part** を参照できず、エラーになります。
- まるで「ロボットが自分の作業台にある部品しか使えない」ようなイメージ！
:::

さらに、もし `part` が関数の外からも見えてしまうと、
別のロボットが勝手にモーターを持ち去る…なんて事故も起こるかもしれません。
だからこそ、ローカルスコープが重要なのです。


## 2. グローバルスコープ（Global Scope）

グローバルスコープとは、プログラム全体で使える変数のこと。
これはまるで「工場全体で共有される管理システム」のようなもの！

```python
robot_type = "アームロボット"

def show_robot_type():
    print(f"この工場の主力ロボットは {robot_type} です！")

show_robot_type()
print(robot_type)  # これはOK！
```

:::note info
**ポイント:**

- **robot_type** は関数の外で定義されているので、関数の中でも使える。
- ただし、関数の中で変更しようとすると問題が発生することがあります。
- 例えるなら、「工場全体の方針は関数（作業員）にも見えるが、勝手に変更はできない」！

:::

もしロボットたちが勝手に **robot_type** を書き換えてしまったらどうなるでしょう？
自動車製造ロボットだったはずが、突然「スイーツ製造ロボット」に変わるかも？！
そんな混乱を防ぐためにも、グローバルスコープの扱いには注意が必要です。


## 3. グローバル変数とグローバル宣言(Global Variable and Global Declaration)

通常、関数内でグローバル変数を変更しようとするとエラーになります。
変更するには **global** キーワードを使います。

```python
robot_mode = "待機"

def activate_robot():
    global robot_mode
    robot_mode = "稼働中"

print(robot_mode)  # 待機
activate_robot()
print(robot_mode)  # 稼働中
```

:::note warn
**注意点:**

- **global** を使うと、関数内でグローバル変数を変更できる。
- しかし、多用するとコードの可読性が下がるため、できるだけローカル変数を使うのがベスト！
- まるで「工場全体の設定を変えるためには、特別なスイッチを押す必要がある」ようなもの！
:::


## 4. ノンローカル変数とノンローカル宣言(Nonlocal Variable and Nonlocal Declaration)

関数の中に関数を定義することもあります。
その場合、内側の関数から外側の関数の変数を変更するには **nonlocal** を使います。

```python
def control_center():
    status = "メンテナンスモード"
    
    def switch_status():
        nonlocal status
        status = "フル稼働モード"
    
    switch_status()
    print(f"ロボットの状態: {status}")

control_center()
# 出力: ロボットの状態: フル稼働モード
```
:::note info
**ポイント:**

- **nonlocal** を使うと、内側の関数で外側の関数の変数を変更できる。
- **global** のようにプログラム全体に影響を与えないので、適切に管理しやすい。
- 例えるなら「班長（外側の関数）が作業員（内側の関数）に指示を出せるが、工場全体のルールには影響を与えない」！
:::


## まとめ

- **ローカルスコープ:** 関数の中だけで有効な変数（ロボットが作業台で使う部品）。
- **グローバルスコープ:** プログラム全体で有効な変数（工場全体で管理される情報）。
- **グローバル変数を関数内で変更するには `global` を使う（特別なスイッチが必要！）。**
- **関数内の関数で外側の変数を変更するには `nonlocal` を使う（班長が作業員に指示する感じ！）。**

スコープを理解すれば、バグを減らし、スッキリとしたコードを書けるようになります！
優れた推定量の条件について（不偏性、一致性、有効性）

## はじめに
母集団から標本を抽出し、それをもとに母数を推定するのが統計学（推測統計学）である。標本から算出される確率変数を「**統計量**」と呼ぶ。特に母数を推定する統計量をその母数の「**推定量**」と呼ぶ。この推定量が母数推定のために良い性質を持っていれば、それだけ正しい母数の推定が可能になる。

## 母数推定のために良い性質とは
次の**不偏性、一致性、有効性**の３つの性質に集約される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/2c0f0879-5827-4f14-9cb8-89153e1df964.png)

標本平均、不偏分散はこれらの性質をすべて満たしている。そのため、標本平均、不偏分散の２つは推定量として優れているといえる。

## おわりに
ここまで読んでいただきありがとうございます！
SQL Server をSSMSを利用して、ストアドプロシージャを作成してみました。

### 1.きっかけ

個人用のPCにSQL Server環境とSSMSの環境を作成しました。
余り業務で使う機会のない、ストアドプロシージャを作成してみたかったからです。

### 2.前提
PC内にSQL Serverの環境がある。
SSMS(SQL Server Management Studio)がインストールされてデータベースにアクセスできること。

**環境**
SQLServerManagementStudioのバージョンは、20.2.30.0
SQLServer 16.0.1000.6

### 3.注意点

私の環境からでは、ストアドプロシージャを右クリックしても、
新規作成がありませんでした。


### 4.操作方法

SSMSで、SQL Serverへアクセス。

![スクリーンショット 2025-02-21 145753.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3537494/2d52ac29-20dd-4ef0-928d-8a9bf1c169dd.png)

オブジェクトエクスプローラーより、ツリーを展開
データベース　
→データベース名
→プログラミング
→ストアドプロシージャ　を右クリック
![スクリーンショット 2025-02-21 150028.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3537494/3704d03b-7e95-4728-8406-230ce7910990.png)

新規の作成がありませんでした。

以下のSQLを実行して、権限を確認しました。
```
SELECT IS_ROLEMEMBER('db_owner');
SELECT IS_ROLEMEMBER('db_ddladmin');
```
1だと権限ありです。

問題ないと判断し、新たなクエリを作成して、
サンプルのストアドプロシージャを作成しました。

```
USE [TT3A_REPORTS];
--データベース名を入れる
GO

CREATE PROCEDURE DATE_PROCEDURE
--作成するプロシージャ名を入れる
AS
BEGIN
    SET NOCOUNT ON;

    SELECT GETDATE() AS DATE
END;
GO
```

実行後、問題がなければ下記が表示されます。
![スクリーンショット 2025-02-21 151053.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3537494/d91b445f-e1a8-46ae-a7de-32449f51f064.png)

では、作成したストアドプロシージャを新しいクエリで、実行してみましょう。

```
EXECUTE [TT3A_REPORTS].[dbo].DATE_PROCEDURE;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3537494/adf2fedc-4e8d-427b-ae0c-727d771c905b.png)

↑実行結果

上手く実行できたようです。

オブジェクトエクスプローラーも最新に更新すると、
作成したプロシージャが載っています。

![スクリーンショット 2025-02-21 151439.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3537494/a9a9350f-fc72-435b-8a5e-c45a04b859b0.png)


### 5.まとめ
SQL Server Management Studio (SSMS)を利用して、
ストアドプロシージャを作成してみました。

可能であれば、少し複雑なストアドプロシージャを作成してみたいと思います。
推定に関わる用語について

## はじめに
推定に関わる用語についてまとめてみました。

## 表
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/23a18ddf-c786-421b-8cf6-5d9de2478560.png)

## おわりに
ここまで読んでいただきありがとうございます！
dena 南場さんのAI利用法

一応すべて見てみたが、
正直chatgptだけで十分じゃないの？
と思うけどな。

ソースを限定して探す必要あるか？


# 南場さんのAI利用法

https://fullswing.dena.com/archives/100153/

では、勉強させて頂きます。

>実は私のGoogleカレンダーの先週かな先々週のスケジュールなんです。

はい、googleカレンダーを使います。

>「Perplexity」で「その方についての必読記事はなんですか」と聞いて
そのURLをすべて「NotebookLM」にアップします。
その人がYouTubeでも発信している場合は、最近のものは全部URLをコピーして「NotebookLM」に入れます。Xで発信している場合はテキストで入れることもあります。打ち合わせに行くタクシーの中で「NotebookLM」とチャットをしながら「この方はトランプ政権については何か言っていますか」とか、
「スタートアップエコシステムについてはどうでしょうか」と聞くと、「この人はこれについてこんな考えを持っているよ」と答えてくれるので、ピンポイントでもいい情報が集まります。

# Perplexity AIパープレキシティ って何？


リサーチ支援に特化。検索エンジンとAIチャットを組み合わせた信頼性の高い回答を提供


# notebook lm とは
https://qiita.com/ma7ma7pipipi/items/61950018dc73e2c7c1ed
を参考。


ソースを限定して答えさせるんですね。
たしかにnotbooklmならyoutubeの情報も読めそう。

>投資の判断のときは、「Deep Research」でガツガツ情報を集めてミーティングに臨むということもやっています。

はい、DeepReserachで集めます。

>しかも「これが大事だからやってね」というのではなく、自らがツールを使い倒して、この可能性に感激して、興奮して、そしてその興奮を改革のエネルギーに変えて全社を引っ張っていくということが必要になると思っています。

はい、AIが大事と言っても社長が使いこなせないと部下はついてこないということですね。

>そしてAIが指示通りに動いてくれるという未来にも、やはり起点は人間であると思います。

御意。最終的には人。

>一方で日本の教育を考えると、正解を言い当てる、あるいは一律な環境で一律な内容を学習していくという現状の教育システムがまだ変わっていないので、
AI時代に求められる教育に大胆に変えていく必要があるなと思っています。

おい、文部科学省見てるか？
【Linuxコマンド】ファイル間の差分(diff)を取る方法

ローカル環境下でファイル同士に差が生まれていないか、確認したい時があると思います。
そのような場合は下記コマンドで確認ができます。

```
diff [ファイル1] [ファイル2]
```

【first_test.txt と second_test.txt のファイルに差がない場合】
```
% diff first_test.txt second_test.txt
%
```

【first_test.txt と second_test.txt のファイルに差がある場合】
```
% diff first_test.txt second_test.txt
1c1
< テスト
\ No newline at end of file
---
> テストです
\ No newline at end of file
%
```
first_test.txt の1行目は「テスト」と書かれていることに対し、
second_test.txt の1行目は「テストです」と書かれていますよーって感じで差分が出てることが結果からわかりますね。

このような感じでファイルの差分を確認することができました。

最後までご覧いただきありがとうございました。
【2025年版】エンジニアが収入を爆増させる3つの戦略【AI / DX / DevOps】

# 【2025年版】エンジニアが収入を爆増させる3つの戦略【AI / DX / DevOps】

## 📢 はじめに
エンジニアとして収入を最大化するためには、 **「トレンドスキル」×「営業力」** が必須です！  
この記事では、 **AI時代に求められる最強スキルと、案件を取るための戦略** を解説します。

---

## ✅ 1. AI時代に求められる最強スキル
✅ **LLM × クラウド（AWS / GCP / Azure）** → AI活用  
✅ **データ分析 × Python / SQL** → DX推進  
✅ **SRE / DevOps** → システム安定化・自動化  

🔥 **トレンドスキルを押さえれば単価交渉が有利に！**

---

## ✅ 2. 市場価値を高めるポートフォリオ戦略
✅ **技術スタックの羅列ではなく「成果」を伝える**  
✅ **「〇〇の課題を解決し、売上20%UP！」のように具体化**  
✅ **GitHub / Zenn / Qiitaで実績を公開し、信用を獲得**  

🔥 **企業が求めるのは「技術」ではなく「価値」！**

---

## ✅ 3. 高単価案件を獲得する営業のコツ
✅ **価格交渉ではなく「価値提案」**  
✅ **「採用ページ」から直営業でアプローチする**  
✅ **SNS・エージェント・紹介の3ルートを活用する**  

🔥 **これを実践すれば、案件の選択肢が広がる！**

---

🔥 **この戦略を実践すれば、エンジニアとしての市場価値が劇的に向上し、収入を爆増させることができます！**
e-statデータから箱ひげ図の作成

目的：家計調査データの可視化
使用データ：＜品目分類＞1世帯当たり年間の品目別支出金額　都市階級・地方・都道府県庁所在市別（総世帯）
https://www.e-stat.go.jp/stat-search/files?page=1&layout=datalist&toukei=00200561&tstat=000000330001&cycle=7&year=20240&month=0&tclass1=000000330001&tclass2=000000330019&tclass3=000000330020&result_back=1&cycle_facet=tclass1%3Atclass2&tclass4val=0
ファイル名：s11.xls
実行環境：RStudio
前処理：総（りんご～電気冷蔵庫）シート以外削除、縦軸は都道府県庁所在地のみ、横軸は品目のみにしました

# 必要なパッケージのインストール
~~~r
install.packages(c("tidyverse", "showtext", "readr"))
~~~
# CSVデータの読み込み
~~~r
library(tidyverse)
file_path <- "C:\ディレクトリ名\ファイル名.csv" #setwd()で作業ディレクトリを指定する
data <- read_csv(file_path, locale = locale(encoding = "SHIFT-JIS"))
str(data)
~~~
# データの整形
~~~r
data <- data %>%
    mutate(across(where(is.character), ~ as.numeric(gsub(",", "", .)), .names = "converted_{col}"))
~~~
# データをロングフォーマットに変換
~~~r
data_long <- data %>%
    pivot_longer(cols = -location, names_to = "item", values_to = "value") %>%
    drop_na()
head(data_long)
~~~
# 箱ひげ図を作成
~~~r
library(ggplot2)
library(showtext)

# 日本語フォントの設定

font_add("meiryo", "C:/Windows/Fonts/meiryo.ttc")
showtext_auto()

# 今回はこの８市をハイライト

highlight_cities <- c("静岡市", "名古屋市", "津市", 
                      "岐阜市", "大津市", "横浜市", "甲府市", "浜松市")

# PDFの保存先（PCの実際のユーザー名に変更する）
~
pdf_path <- "C:/Users/保存先のディレクトリ/ファイル名.pdf"
pdf(pdf_path, width = 12, height = 8)  # A4サイズのPDF

# 品目ごとの箱ひげ図を作成
~~~r
for (item_name in unique(data_long$item)) {
    p <- ggplot(data_long %>% filter(item == item_name), aes(x = "", y = value)) +
        geom_boxplot(fill = "lightblue") +
        geom_point(data = data_long %>% filter(location %in% highlight_cities, item == item_name),aes(x = "", y = value, color = location), size = 3) +
        stat_summary(fun = mean, geom = "point", shape = 4, size = 4, color = "black") +  # 平均値を✖で表示
        ggtitle(item_name) +
        labs(y = "年間支出額", x = "") +
        theme_minimal() +
        theme(
            text = element_text(family = "meiryo"),  # 日本語フォント適用
            plot.title = element_text(hjust = 0.5, size = 10)
        ) +
        scale_color_manual(values = c("red", "blue", "green", "purple", "orange", "pink", "brown","yellow"))

    print(p)
}

# PDFを閉じる
dev.off()
~~~
![ハンバーグ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3615177/06aec7e6-aba4-439f-bc75-738a787d59eb.png)
notebook lm とは？

# NotebookLMって何なの〜？ 

NotebookLMはね、AIモデル「Gemini」を搭載した、すっごく便利なノートブックツールなのだよ〜！ユーザーさんがアップロードした文書やWeb URLをもとに、要約を作ったり、質問に答えたり、アイデアを整理したりできちゃうんだ♪

## 主な機能

- **指定ソースに基づく回答生成**  
  NotebookLMは、あらかじめ学習されたデータじゃなくて、ユーザーさんがアップロードした資料だけを使って、ぴったりの回答を作るんだよ〜！

- **ノートブック作成**  
  モデルが出した回答をそのまま保存しちゃって、既存のノートブックを使って新しいノートブックも簡単に作れちゃうの！

- **コンテンツ生成**  
  要約、ガイダンス、FAQ、学習ガイドなど、いろんなコンテンツを自動で生成してくれるんだ〜。

- **共同作業**  
  ノートブックを友達や同僚とシェアして、見せたり編集したりできるから、とっても便利なのだ♪

## 主な用途

- **情報収集・調査**  
  いろんなソースから情報を効率よく集めて、要約や分析をしてくれるから、リサーチがとってもスムーズにできるんだ〜！

- **学習サポート**  
  試験対策や新入社員向けのガイダンス、プレゼン資料の作成にも大活躍！

- **議事録・インタビューの要約**  
  たくさんの情報から大事なポイントをピックアップして、簡単にレポートを作っちゃうよ♪

- **専用チャットボットの構築**  
  取扱説明書やマニュアルをアップロードすれば、故障時の対応やFAQ作成にも使えるんだ〜！

## 利用の流れ

1. **公式サイトにアクセス**  
   「Try NotebookLM」をクリックして、Googleアカウントでログインするんだよ〜。

2. **ノートブック作成**  
   トップページで「新しいノートブック」をクリックして、アップロードしたいファイル形式を選ぶのだ♪

3. **自動解析**  
   アップロードすると、NotebookLMが自動で要約や主要なトピックを生成してくれるよ〜。

4. **チャット形式で活用**  
   生成された情報をもとに、チャット形式で質問したり検索したりできるの！

## その他の特徴

- **画像データの認識**  
  テキストだけじゃなく、画像やイラストもバッチリ認識して、内容を解析・要約できちゃうよ♪

- **カスタマイズ性**  
  表示設定、フォントサイズ、行間隔、ダークモード・ライトモードなど、みんなの好みに合わせてカスタマイズできるの！キーボードショートカットも自由自在だよ〜。

- **データのバックアップと復元**  
  ノートブックはPDFやテキスト形式でエクスポートできるから、安心して保存できるよ。アップロードしたデータは30日間サーバーに保存されるから、長期保存したいときはこまめにバックアップしてね♪

## 無料版と有料版の違い

- **無料版**  
  1ノートブックあたりのソース数や単語数（例：50個、50万語）に制限があるの。

- **有料版（NotebookLM Plus）**  
  ソース量が6倍に増えて、作成できるノートブック数も5倍に！もっと大規模なデータ処理が可能になるんだ〜。

## ChatGPTとの違い

- **インターフェース**  
  NotebookLMはノートブック形式で、ChatGPTはチャット形式なんだよ〜。

- **用途**  
  NotebookLMはアップロードした資料に基づいた情報の分析や検索に特化してるけど、ChatGPTは一般的な質問応答や文章生成に強いんだ♪

- **学習データ**  
  NotebookLMはユーザーさんがアップロードした情報だけを使うから、ハルシネーション（不正確な情報を生成するリスク）が少ないの！

---

NotebookLMは、特定の資料やデータに基づいた正確な情報提供や分析が必要なシーンで、とっても役立つツールなのだよ〜！パソコンでの利用がおすすめだけど、スマホからも使えるから、どこでも便利に活用できちゃうの♪
Git LFSで消えない差分が出続けた時の対処法

## 問題
- gitで変更していないファイルの差分が出てしまう
- git reset --hard HEAD しても差分が消えない

上記のような問題が発生し困っていました。

## 解決方法
Git LFSの設定は .gitattributes に記載があります。
こちらに差分のあるファイルの拡張子が記載されていたので、該当行を削除すると、gitの差分が消えました。

1. .gitattributes から差分の出ているファイルの設定を一時的に削除（行頭に#を書くとその行をコメントアウトできます）
1. gitのdiffから消えていることを確認
1. .gitattributes の設定を戻す

一度、差分が消えた後は再度 .gitattributes の設定を元に戻しても差分が出ることはありませんでした。
同じようにGit LFSを使っている方でGitで差分が消えずに困っている方は一度上記の手順を試してみてはいかかでしょうか。
AWS SSM ポートフォワードとは？

# AWS SSM ポートフォワードとは？

## はじめに
AWS で EC2 インスタンスに直接アクセスするには、通常 SSH を使用したり、セキュリティグループでポートを開放する必要があります。しかし、セキュリティを考慮すると、可能な限りポート開放は避けたいものです。

そこで **AWS SSM（AWS Systems Manager）ポートフォワード機能** を活用すると、EC2 のポートを開放せずに、安全にリモート接続できます。本記事では、ポートフォワードの仕組みや設定方法について解説します。

---

## ポートフォワードとは？
![ssm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294049/0d57b3ab-823e-4916-ba57-df0cf8aa100b.png)

ポートフォワードとは、**特定のポートへの通信を、別の場所へ転送する仕組み** です。

例えば、ローカルの `1234` 番ポートにデータを送ると、それが **別のサーバーの `1234` 番ポートに転送される** という動作をします。

### AWS SSM ポートフォワードのイメージ
**AWS SSM を使ったポートフォワード** では、以下のような流れでデータが転送されます。

### 1. ローカルの `1234` 番ポートでデータを送信
```sh
nc -w 3 127.0.0.1 1234 < assets.tar.gz
```
💡 **ローカルの `127.0.0.1:1234` にデータを送っているだけ**

### 2. SSM ポートフォワードの動作
```sh
aws ssm start-session --target ${{ secrets.INSTANCE_ID }} --document-name "AWS-StartPortForwardingSession" --parameters '{
  "portNumber":["1234"],
  "localPortNumber":["1234"]
}' &
```
**このコマンドを実行すると**
- **ローカルの `1234` 番ポートに送ったデータが、自動的に EC2 の `1234` に転送される**

### 3. EC2 側で `nc` がリスン（待機）
```sh
sudo nc -l -p 1234 > /var/www/test/tmp_assets/assets.tar.gz
```
**EC2 側では `nc` が `1234` 番ポートでデータを受け取る準備をしている**
→ 送られたデータが `assets.tar.gz` に保存される

---

## ポートフォワードの具体的な流れ

```
[ ローカル PC ] -----> [ AWS SSM ポートフォワード ] -----> [ EC2 の 1234 番ポート ]
  nc -w 3 127.0.0.1 1234 < assets.tar.gz      sudo nc -l -p 1234 > /var/www/test/tmp_assets/assets.tar.gz
```

---

## なぜポートフォワードが必要？

### 1. EC2 のポート `1234` は開いていない
通常、EC2 のポート `1234` に直接アクセスするには
- **EC2 のセキュリティグループで `1234` を開放**
- **EC2 のパブリック IP に接続**
が必要ですが、**セキュリティ的にリスクがある**

💡 **SSM ポートフォワードを使うと、セキュリティグループを変更せずに安全に転送できる**

### 2. ローカルの `1234` に接続するだけで、EC2 にデータを送れる
```sh
nc -w 3 127.0.0.1 1234 < assets.tar.gz
```
🔹 ローカルでは `127.0.0.1:1234` に送信  
🔹 でも実際には **SSM が裏で EC2 の `1234` に転送してくれる**  
🔹 結果として、EC2 にデータが届く

---

## イメージ図
### **ポートフォワードなし**
❌ 直接 EC2 に送ろうとすると **失敗する**
```
[ ローカル PC ] ----X----> [ EC2 の 1234 番ポート ]
   (セキュリティグループでブロックされる)
```

### **ポートフォワードあり**

✅ **SSM が間に入るので成功**
```
[ ローカル PC ] ---> [ SSM ] ---> [ EC2 の 1234 番ポート ]
   (ローカルの 1234 に送るだけで EC2 に届く)
```

---

## まとめ
✅ **ポートフォワードを使うと、ローカルの `1234` に送るだけで EC2 に転送できる**  
✅ **セキュリティグループの設定変更なしで、安全に通信できる**  
✅ **AWS SSM が SSH トンネルのような役割をする**  

AWS SSM ポートフォワードは、セキュリティを向上させつつ、安全に EC2 との通信を可能にする便利な機能です。是非活用してみてください！
SAS言語のデータセットにおけるヌル値


読み込んだデータセット内に欠損値が存在することはよくあります。今回はヌル値を含んだデータセットを作成した上でその検出を行います。SAS言語上、ヌル値は.（ピリオド）で表されます。

```sas
data example;
  input Name $ Age Height;
  datalines;
John 15 5.5
Mary . 5.7    /* Ageにヌル値 */
James 14 .
Sophia . .    /* AgeとHeightにヌル値 */
;
run;
proc print data=example;
  title 'Original Data with Missing Values';
run;
data check_missing;
  set example;
  /* AgeまたはHeightにヌル値がある場合に検出 */
  if missing(Age) then do;
    Missing_Age = 'Yes';
  end;
  else do;
    Missing_Age = 'No';
  end;
  if missing(Height) then do;
    Missing_Height = 'Yes';
  end;
  else do;
    Missing_Height = 'No';
  end;
run;
proc print data=check_missing;
  title 'Data with Missing Values Detection';
run;
```
出力結果：
![result1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4003689/809dde01-a2fa-4fd7-8311-4980906553e0.png)

<br><br>

[SAS初心者のとき困ったところ戸惑ったところ | Tech Blog | CRESCO Tech Blog](https://www.cresco.co.jp/blog/entry/8420.html) に載っていた情報なのですが、ヌル値は -♾️ 扱いになるとのことです。ヌル値と -♾️ を比較してみます。

```sas
data example;
  input Name $ Age Height;
  datalines;
John 15 5.5
Mary . 5.7    /* Ageにヌル値 */
James 14 .
Sophia . .    /* AgeとHeightにヌル値 */
;
run;

data check_null_is_minus_inf;
  set example;
  /* AgeまたはHeightにヌル値がある場合に検出 */
  if Age=-INF then do;
    null_is_minus_inf = 'Yes';
  end;
  else do;
    null_is_minus_inf = 'No';
  end;

run;

proc print data=check_null_is_minus_inf;
run;
```

出力結果：
![result2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4003689/c32882c0-89d4-4531-b1c3-f4d92fe06bd4.png)


<br><br>

## SAS言語の実行環境

SAS言語の動作環境は[Altair SLC 及び Altair Analytics Workbench](https://www.brainpad.co.jp/services/products/Altair.html)を使用しております。詳細や最新情報は[Altair公式サイト](https://www.altairjp.co.jp/altair-analytics-workbench/)をご覧ください。

## 動作確認を行なった環境
- MacBookPro（2020 M1）
    - RAM 16GB
    - macOS Sonoma 14.4.1
- Altair SLC 2024 (05.24.03.00.001528)
- Altair Analytics Workbench 5.24.3.0.1528-GA-release-2024.2
６、　２進数　①倫理シフト

シフト演算には論理シフトと算術シフトがある。
シフト…ビット列全体を右か左にずらす

**論理シフト**
…符号を考慮せず、最上位のビットも含めて何も考えずにシフトすること。


**☆左論理シフトは元の数の２^n倍**
（nは、ずらしたビット数）
　＿＿００１０１１００　（44）
 
 　００１０１１００← ←　左に２ビットシフトさせる。

 　＿＿１０１１００００　　はみ出たビットは削除して、空になったスペースは０で埋める。
  
↑元の数値４４を２^2（４倍）した１７６の2進数。


 
**☆右倫理シフトは元の数の１/２＾n倍**
００１０１１００（４４）

→　→００１０１１００　右に２ビットシフトさせる。

００００１０１１　空には０を足して、はみ出たところは削除する。

元の数４４を１／２＾２倍（１／４倍）した１１の２進数。

☆左倫理シフトではみ出した場合
オーバーフロー。そのビット数で表せる範囲を超えてしまった。

☆右倫理シフトではみ出した場合
割り算した結果の余り。
中野哲平さんインタビュー：6歳から始めたプログラミングの道のりとフルスタックエンジニアへの成長


**聞き手**：田中くん（大学生）  
**語り手**：中野哲平さん（フルスタックエンジニア）

---

## はじめに

田中：今日はお忙しいところありがとうございます！

中野：こちらこそ、声をかけてくれてありがとう。こうしてプログラミングの学び方について話せるのは嬉しいよ。

田中：早速ですが、中野さんは6歳からプログラミングを始めたとお聞きしました。どうしてそんなに早く？

中野：親がエンジニアで、小さい頃からパソコンが家にあったんだ。それで自然と興味を持った。最初はゲームが好きで、「自分でも作りたい！」って思ったのがきっかけだね。

---

## 小学生編（6歳〜12歳）：プログラミングとの出会い

田中：6歳からだと、どんなことから始めたんですか？

中野：最初は**ビジュアルプログラミング**ツールの「Scratch」だね。ブロックを組み合わせてキャラクターを動かすんだけど、遊び感覚で学べたのが良かった。

田中：遊びながら学べるっていいですね。

中野：そうそう。9歳くらいからは**HTML**と**CSS**を独学で始めた。自分の好きなゲームのファンサイトを作ったりしてたよ。そこから**JavaScript**にも手を出して、簡単なクリックゲームを作ったんだ。

田中：小学生でJavaScriptとは凄い！

中野：当時は「動いた！」ってだけで楽しくて。コードが汚かろうが気にしなかった（笑）。

### 小学生で学んだこと
- **6〜8歳**：Scratchで遊びながらプログラミングの基本概念を学ぶ。
- **9〜10歳**：HTML/CSSで簡単なWebページ作成。
- **11〜12歳**：JavaScriptでインタラクティブなWebサイト作成。

---

## 中学生編（13歳〜15歳）：本格的なコーディングの始まり

田中：中学生になると、どんなことを学びましたか？

中野：本格的に「プログラミング」を意識し始めたのはこの頃。**Python**を使い始めたんだ。最初は簡単な計算ツールやミニゲームを作ってた。

田中：Pythonは人気ですよね。

中野：うん、それに分かりやすい文法だから入りやすかった。その後、**アルゴリズム**や**データ構造**も学び始めて、競技プログラミングにも挑戦したよ。

田中：おお、競技プログラミングも！

中野：うん、特にAtCoderとかを使ってた。あと、**Git**と**GitHub**も中学時代に覚えた。自分のコードを管理したり、オープンソースに貢献したりするのが面白かった。

### 中学生で学んだこと
- **13歳**：Pythonの基本文法、簡単なゲーム制作。
- **14歳**：アルゴリズムとデータ構造、競技プログラミング。
- **15歳**：Git/GitHubを使ったバージョン管理、オープンソース貢献。

---

## 高校生編（16歳〜18歳）：フルスタックへの道

田中：高校生になると、さらにレベルアップしたんでしょうね。

中野：うん。この頃から「フルスタックエンジニア」を目指して勉強した。まずは**バックエンド**を強化したくて、**Node.js**や**Express**を学んだよ。

田中：なるほど、サーバーサイドですね。

中野：そう。**データベース**も扱えるように、**MySQL**や**MongoDB**も学んだ。APIを作って、フロントエンドと繋げるのが楽しかったな。

田中：フロントエンドも並行して？

中野：もちろん。**React**や**Vue.js**を使って、モダンなWebアプリを作ってた。あと、**Docker**や**AWS**にも手を出して、デプロイやインフラの知識もつけた。

田中：高校生でそこまで…すごい！

### 高校生で学んだこと
- **16歳**：Node.js、Expressでバックエンド開発。
- **17歳**：MySQL、MongoDBでデータベース操作。API構築。
- **18歳**：React/Vue.jsでフロントエンド開発。Docker/AWSでデプロイやインフラ構築。

---

## プログラミング学習のコツ

田中：ここまでの学びを振り返って、何か「これが大事だ」って思うことはありますか？

中野：うーん…一番は「**アウトプット重視**」かな。学んだことを実際に使ってみる。例えば、新しい言語を覚えたら、何か簡単なアプリを作るとか。

田中：確かに、実践って大事ですね。

中野：あと、「**楽しく学ぶ**」ことも大切。自分が興味あるテーマで何か作ると、学習が苦にならない。

田中：なるほど。じゃあ、最後にこれからプログラミングを始めたい人に一言お願いします！

中野：失敗を恐れないで、とにかく手を動かしてみてほしい。完璧じゃなくても、作ること自体に意味があるから。プログラミングは「作る楽しさ」を感じるのが一番大事だと思うよ。

田中：素敵な言葉ですね！今日はありがとうございました！

中野：こちらこそ、楽しかったよ。ありがとう！

---

## まとめ

中野哲平さんのインタビューを通じて、「早期学習」の重要性と、「楽しんで学ぶ」ことの大切さを実感しました。6歳から始めたプログラミングの道のりは決して一直線ではなく、試行錯誤を繰り返しながら進んできたことが分かります。

これからエンジニアを目指す皆さんも、ぜひ自分のペースで楽しく学んでいきましょう！
2025-02-21 共有記事ログ

# 技術系
## [GraphQLのエラーレスポンスの設計戦略](https://product.plex.co.jp/entry/graphql-error-response)
GraphQLのエラー設計に関する考察記事です
当社プロダクトにおいても使われているGraphQLですが、エラーについてはあまりちゃんと考えたことなかったと思い、共有いたします！
個人的にはクライアントにエラースキーマを記載させるのはハンドリングのコストが上がりそうなので標準の方法に従うのが良さそうだと思いました！

## [いいコードを書きたければTell, Don't Ask](https://qiita.com/kazunoriboy/items/37ca501c93927199e1fd)
手続き的に書くのではなく宣言的に書くべきという記事です
高凝集と疎結合の例をレストランで表現してくれています
極端な気もしますが、プログラミングの世界では手続き的な記載はやりがちなので、参考例として目を通してみても良いかと思います！


# 共有するほどではないけど興味があったもので読んだもの
* [【エンジニアの日常】これが私の推しツール！〜日々の開発を豊かにするおすすめツール〜 Part2](https://tech.findy.co.jp/entry/2025/02/10/070000)
    * lazygitに興味がわいた
* [ValueObject について、複数の書籍を参考にして学習しました](https://zenn.dev/rescuenow/articles/560913342448f7)
    * 当社でも取り組んでいる内容だけに共感できる
* [SQLの論理的実行順序と物理的実行順序(オプティマイザ)の違い](https://zenn.dev/sun_asterisk/articles/b941c94aa0e492)
    * 論理的順序が理解できていればエイリアンがどのタイミングから利用できるのかも理解できる
* [開発組織における昼食の話題について](https://zenn.dev/fukurou_labo/articles/c6db96b1d76192)
    * 昼食を共にすること自体は良いことと思うが、そうするとほとんどの確率で外食となり食費が増えるのと、食後のお昼寝の時間が取れないという問題を抱えている
[信頼性を保つ方法を考えてたらインシデントレスポンスの改善を進めてた話](https://techblog.hacomono.jp/entry/2025/02/11/110000)
    * 実際に経験してみる事が最初に取り組むべき内容かもしれない
    * 重要性を理解してからシステムでの改善に取り組む方が良さそうかも
* [私が「つよつよエンジニア」になるまでにした７つの習慣](https://qiita.com/kerun8080/items/f0ec5031c7bff530d534)
    * 技術がすぐに身につくとは限らないけど、情報収集と実践を繰り返していけば自然と強くなっていけそう
* [【後編】元ヤフーエンジニア社長が考える、挫折しないためのエンジニアマインド](https://qiita.com/ryoheiiwamoto/items/d8dee347fcf841fa1ef7)
    * エラーやバグ、動作の根拠などは100%答えがあるが、なぜそう書いたか、どうすれば読みやすいコードになるかなどは正解の無い問いな気がする
* [【図解解説】React19の新機能を使って書籍管理アプリを開発するチュートリアル【Hono/TypeScript/TailwindCSS】](https://qiita.com/Sicut_study/items/e19d485078d59cf93282)
    * 機能だけ知りたい場合は前半部分のみみると良い
* [【🔰初心者向け】頼むからホームディレクトリは汚さないでくれ🙏](https://qiita.com/ikemura-ren/items/7e0c4fe00236badce9c0)
    * 設定系ファイルは親を遡る事がおおいから、確かに気を付けなければ
* [C言語を習得する３つの方法](https://qiita.com/kaizen_nagoya/items/84cab0888c193bba429b)
    * Cを真剣に学びたいとなったときにはこの方法をやってみるのも良さそう
    * 個人的にはコンパイラを実際に作ってみたいと思った（仕事と関係なさすぎて優先度は低いがw）
* [「可視化」ってなんや](https://qiita.com/zazen_inu/items/69e9a78bf673c227911f)
    * グラフを作るときの考え方の参考になりそう
* [Platform Engineeringは自由のめまい](https://speakerdeck.com/nwiizo/platform-engineeringhazi-you-nomemai)
    * Sreake を使って土台作りを手伝ってもらうのもありなのかもしれない
* [エンジニアとしてプロジェクトマネジメントについて学んでみた](https://zenn.dev/vs_blog/articles/e7f6586a275924)
    * プロジェクトマネジメントを学ぶことで見えることも多そう
* [GitHub Actionsでプルリクの確認漏れを防ぐ！](https://tech.iimon.co.jp/entry/2025/02/12/162253)
    * chatworkでも使えるなら使い道結構ありそう
paiza Qiita コラボ S問題 思い出の屋上


https://qiita.com/official-events/efe957f155af900604b3

Swiftでやりました。

# 問題概要

マス状のエリアがある。陣取っているものがすでにいる。空いているできるだけ広い領域を調べる。領域のサイズはマンハッタン距離で決定される。サイズが4のときは中心からマンハッタン距離が4以内のマスが陣地になる。

# やり方

答になる空き領域をE、そのサイズをSとする。Eはどこかの領域(R)と接する。そのRをS+1だけ広げるとEの中心を覆う。
よって、すでに陣取っているものの領域を1つずつ広くしていくと、空きが徐々になくなっていって、最後にEの中心がRによって覆われる。
空きマスの数を管理しておいて、0になるまで行う。
正解と判断されたがちょっと自信がないw

```
func readInt() -> Int {
    Int(readLine()!)!
}

func readInts() -> [Int] {
    readLine()!.split(separator: " ").map { Int(String($0))! }
}

let hwm = readInts()
let h = hwm[0]
let w = hwm[1]
let m = hwm[2]

var field = [[Bool]](repeating: [Bool](repeating: false, count: w), count: h)
var counter = h * w

func draw(r: Int, c: Int, s: Int) {
    if s == 0 {
        if field[r][c] == false {
            field[r][c] = true
            counter -= 1
        }
    } else {
        for (bR, bC, mR, mC) in [(-1, 0, 1, 1), (0, 1, 1, -1), (1, 0, -1, -1), (0, -1, -1, 1)] {
            //b:base m:move
            for m in 0..<s {
                let drawR = r + bR * s + mR * m
                let drawC = c + bC * s + mC * m
                if drawR >= 0 && drawR <= h - 1 && drawC >= 0 && drawC <= w - 1 {
                    if field[drawR][drawC] == false {
                        field[drawR][drawC] = true
                        counter -= 1
                    }
                }
            }
        }
    }
}

var center: [(Int, Int, Int)] = []
for _ in 1...m {
    let rcs = readInts()
    let r = rcs[0] - 1
    let c = rcs[1] - 1
    let s = rcs[2]
    center.append((r, c, s))
    for i in 0...s {
        draw(r: r, c: c, s: i)
    }
}

if counter == 0 {
    print(-1)
} else {
    var current = 0
    var expand = 0
    while true {
        expand += 1
        for c in center {
            draw(r: c.0, c: c.1, s: c.2 + expand)
        }
        if counter == 0 {
            print(current)
            break
        }
        current += 1
    }
}


```

計算量が問題になる場合、必要ないところを削る処理を加えていくとよいでしょう。たとえば、ある領域を広げても空き領域を潰すことがない場合は、その領域はもう必要ないと判断できます。
selenium で firefox on ubuntu

## snap　でインストールされている ubuntu の firefox
今週書いた記事でも言及しましたが snap でインストールされていると、Profileの場所も違うのですが、そもそも TMPDIRの設定が selenium/geckodriver で食い違ってくるということが判明したので書いておきます。

## profileが作れない？？

Selenium は 自動化ということもあり、通常はゲストに準じた起動状態です。個人のアカウントに紐付けるような設定は出来るのですが、認証テストに失敗しすぎてaka-BAN状態にされると個人的には苦労しますので、テストアカウントを作るくらいなら「匿名ログイン」即時profileによるテストになります。

![Profile_missing.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91470/aeb9b6a7-dc82-4116-bdc3-26ca981dcdd5.png)

## TMPDIR を設定・定義しよう

* github で：
https://github.com/mozilla/geckodriver/issues/2010

* stackoverflow :
https://stackoverflow.com/questions/72092807/selenium4-and-snap-install-of-firefox-with-geckodriver-v31-times-out

* 暫定： "~/tmp" 作って、TMPDIR環境変数を設定する

で解決するようです。

![geckodriver.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/91470/08ff0754-d897-4f60-bd23-c7e11f1a802d.png)

# ProfileManager なしにはやっぱり動かない・・・
```python
import tempfile
from selenium import webdriver

# Set the path to the GeckoDriver executable
custom_gecko_path = '/snap/bin/geckodriver'

# Set the path using the executable_path argument in FirefoxOptions
custom_profile_path = tempfile.mkdtemp(prefix="selenium_custom_profile_")

```
いろいろ動かないというので、上のようなサンプルコードを探してきましたが、

```
selenium.common.exceptions.InvalidArgumentException: Message: binary is not a Firefox executable
```
* snap での PATH は定義すればいい。
```
firefox_bin = "/snap/firefox/current/usr/lib/firefox/firefox"
firefoxdriver_bin = "/snap/firefox/current/usr/lib/firefox/geckodriver"
```
from:  https://github.com/SeleniumHQ/selenium/issues/13252#issuecomment-1845021270

## 本日のハンティング終了
* これ以外の定形業務は適当にこなれて・・・
GoDoc 入門：初心者向けの使い方と活用方法解説

## はじめに

**GoDoc** は、Go 言語のコードにコメントを追加することで、自動的にドキュメントを生成するツールです。  
公式の Go パッケージのドキュメントはすべて GoDoc を使って生成されています。

---

## GoDoc とは？

GoDoc は、以下の特徴を持つドキュメント生成ツールです。

- **コードのコメント** をもとに、自動的にドキュメントを生成する。
- 関数、構造体、インターフェース、パッケージの説明を Markdown 形式で記述可能。
- HTML ページとして出力し、Web ブラウザで確認できる。

### **GoDoc のメリット**
- コードの変更に合わせてドキュメントを自動更新できる。  
- コードリーディングの際に、関数や構造体の意図を理解しやすくなる。  
- HTML ドキュメントとして公開できる。  

---

## GoDoc の基本ルール

### **1. コメントの記述ルール**
- 関数、構造体、インターフェース、パッケージの上にコメントを記述する。
- コメントは **`//`** で始め、対象の名前から始める。

```go
// Add は、2つの整数を加算して返します。
func Add(a int, b int) int {
    return a + b
}
```

### **2. パッケージコメント**
- パッケージの先頭に、そのパッケージ全体の説明を書く。

```go
// Package calculator は、簡単な計算機能を提供します。
package calculator
```

### **3. 関数コメント**
- 関数の説明には、**関数名から始める**。

```go
// Subtract は、2つの整数を減算して返します。
func Subtract(a int, b int) int {
    return a - b
}
```

### **4. 構造体コメント**
- 構造体の説明には、**構造体名から始める**。

```go
// User は、ユーザー情報を表す構造体です。
type User struct {
    Name string // ユーザーの名前
    Age  int    // ユーザーの年齢
}
```

---

## 実際に GoDoc を使ってみよう

### **1. GoDoc のインストール**

Go の最新バージョンでは、`godoc` コマンドは標準で含まれています。  
もしインストールされていない場合は、以下のコマンドでインストールできます。

```sh
go install golang.org/x/tools/cmd/godoc@latest
```

### **2. GoDoc の確認**

ターミナルで以下のコマンドを実行することで、ローカルサーバーを起動し、GoDoc を確認できます。

```sh
godoc -http=:6060
```

Web ブラウザで以下の URL にアクセスしてください。
```
http://localhost:6060
```

- `localhost:6060` にアクセスすると、`$GOPATH` 以下にあるパッケージのドキュメントを確認できます。

---

### **3. コード例：GoDoc の書き方と生成**

**calculator.go**
```go
// Package calculator は、基本的な計算機能を提供します。
package calculator

// Add は、2つの整数を加算して返します。
func Add(a int, b int) int {
    return a + b
}

// Subtract は、2つの整数を減算して返します。
func Subtract(a int, b int) int {
    return a - b
}
```

以下のコマンドを実行すると、ターミナル上にドキュメントを確認できます。
```sh
godoc calculator Add
```

---

## HTML ドキュメントの生成

`godoc` を使って、HTML ドキュメントを生成することも可能です。

```sh
godoc -html calculator > doc.html
```

- `doc.html` が生成され、ブラウザで開くことで、HTML ドキュメントとして確認できます。

---

## まとめ

| 概念 | 説明 |
|------|------|
| **GoDoc** | コメントから自動でドキュメントを生成するツール |
| **記述ルール** | 関数・構造体の上にコメントを書く。対象の名前から始める。 |
| **確認方法** | `godoc -http=:6060` でローカルサーバーを起動 |

コードの可読性が向上し、メンテナンスがしやすくなります。  
少しずつ中級者くらいにはレベルアップしたいな〜
Cline + VS Code LM API でAIエージェントのコストを大幅削減!?

# はじめに
AIエージェントの登場により、我々エンジニアの開発効率的は爆上がりの予感。
しかし、一方でAIエージェントではそのコストがネック。
まだ手探りでAIエージェントを使っていきたいのに料金を気にしてしまう。

そんな中、Cline + VS Code LM APIの登場で状況が変わるかも！？


# 結論:Cline + VS Code LM APIを組み合わせろ！
普段Github Copilotの有料プラン(ビジネスプランも含む)を使っているのであれば選択モデルはVS Code LM APIがいい。

## Clineとは？

ClineはAIエージェントツールの一種で、VS Codeの拡張機能として利用可能。
コード補完、生成、編集、テストなどを支援し、開発効率を向上させる。

https://www.ai-souken.com/article/what-is-cline#cline%E3%81%A8%E3%81%AF

https://qiita.com/noshut/items/0c1de89c766106b204a8


### 選択できるモデルは様々
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342722/62956795-d11a-4e2b-a315-8ea97aee3f07.png)

ClineではdeepseekからOpenAIなど様々なモデルを選択できる。
ただし、各モデルを利用するには料金がかかってしまう。
料金比較は下記記事を参考。

https://zenn.dev/flyingv/articles/20250130_price_comparison_deepseek?utm_source=chatgpt.com

## VS Code LM APIを選択しよう

***ところで、Github Copilotはもう使ってますよね？***

今や多くのエンジニアがCopilotを導入し、コード補完や提案の恩恵を受けています。
しかし、実はCopilotには「VS Code LM API」という隠れた機能があるのをご存知でしょうか？

### VS Code LM APIとは？
VS Code LM APIは、GitHub Copilotの一部として提供されるAI補完API。
通常、AIエージェントはOpenAI APIやClaude APIなどを利用し、その度にAPIコストが発生。
しかし、VS Code LM APIを活用すれば、Copilotのサブスクリプションだけでコード補完をエージェントに統合できる可能性がある！

### ClineでVS Code LM APIを使うメリット
Clineでは、補完エンジンとして「VS Code LM API」を選択できる

✅ 追加のAPIコスト不要 → OpenAI APIのような従量課金が発生しない
✅ Copilotの契約内でエージェントが動作 → 既存のCopilotユーザーならすぐ利用可能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342722/277c9b98-d75e-4a7b-9d5b-7e1b83f526bd.png)

色々なモデルが使えるぞ！！


### (おまけ)o3-miniを解除する方法
そのままだとo3-miniが使えないかもしれない。
`400 Bad Request Only for ACT MODE, PLAN MODE is working`

https://github.com/cline/cline/issues/1579?utm_source=chatgpt.com

モデルを有効化すればOK(ビジネスプランであれば管理者に有効化してもらう)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/342722/0a6b28cd-e43b-427f-b192-b8e9f1429a41.png)
Excelで指数表記を解除する

以下のステップで、Excelで指数表記を解除できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/467d88db-2700-e130-4ab0-8cd0e5dd5aef.png)

① 指数表記されているセルを選択します。

② ホーム > 数値 から、表示形式を「数値」に変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/b11b290d-ede3-ecdf-484e-33fceee8f864.png)

③ ホーム > 数値 から、小数点以下の表示桁数を調整します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105859/aa34a5b5-818f-6b05-1980-c4d503008e90.png)

**環境情報**

- Microsoft® Excel® for Microsoft 365 MSO (バージョン 2410 ビルド 16.0.18129.20200) 64 ビット
統計学で用いられる記号について

## はじめに
統計学で用いられる記号について、まとめてみました。

## 表
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/8c58972b-1ea6-4e53-880f-d7097a2e0579.png)

## おわりに
ここまで読んでいただきありがとうございます！
iTerm2でポートフォワードを設定する


# はじめに

- iTerm2のプロファイル設定からもポートフォワードは設定可能ですが、ここでは .ssh/config を用いた設定方法をご紹介します。
- ※ 本記事ではサンプルとしてSSH鍵認証やその他のオプションは省略しています。実際の運用時は必要に応じて適切なオプションを追加してください。
- ※ 記載しているIPアドレスやユーザー名はサンプル用にマスキングしています。

# .ssh/config の設定例

- 下記の例では、踏み台サーバを経由して複数のサーバに接続するための設定を記載しています。

```
# 踏み台サーバ
Host humidai_server
       HostName xx.xx.xx.xx
       User user_name
       IdentityFile ~/.ssh/your_private_key
       ForwardAgent yes

# ポートフォワード設定1
Host server_1
       HostName xx.xx.xx.xa
       User user_name
       IdentityFile ~/.ssh/your_private_key
       ProxyJump humidai_server
       LocalForward 1111 aa.aa.aa.aa:8080

# ポートフォワード設定2
Host server_2
       HostName xx.xx.xx.xb
       User user_name
       IdentityFile ~/.ssh/your_private_key
       ProxyJump humidai_server
       LocalForward 1112 bb.bb.bb.bb:8081
```

# セキュリティ上の注意
- ForwardAgent yes は、踏み台サーバ経由で接続先に認証情報が転送されるため、信頼できるサーバに対してのみ有効にする。

# LocalForward に記載する内容例

SSHコマンドでポートフォワードを指定する場合、以下の部分が該当します。

例: `1111:aa.aa.aa.aa:8080`
これをコマンドで実行する場合は、次のようになります。

`ssh -L 1111:aa.aa.aa.aa:8080 -J humidai_server user_name@xx.xx.xx.xx`

このコマンドは、ローカルのポート 1111 をリモートの aa.aa.aa.aa:8080 に転送し、接続は踏み台サーバ humidai_server を経由する設定になっている。

# 設定情報の意味

- ForwardAgent
    - SSHエージェントフォワーディングを有効にし、踏み台サーバ経由でもローカルの認証情報を利用できるようにします。
    - ※ 利便性が向上する一方、セキュリティリスクも伴うため、使用するサーバの信頼性を確認する。

- LocalForward
    - ローカルポートとリモートホスト・ポート間でトラフィックを転送する設定。
    - 例では、ローカルポート 1111 から aa.aa.aa.aa:8080、ローカルポート 1112 から bb.bb.bb.bb:8081 に接続します。

- ProxyJump
    - 踏み台サーバ（ジャンプサーバ）を経由して目的のサーバへ接続するための設定。
    - これにより、直接アクセスできないサーバへのセキュアな接続が可能になる。
[Linux][command] イベント（システムログ）確認_dmesg, cat, journalctl -k, journalctl --dmesg

# dmesgコマンド
~~~terminal:
$ dmesg [オプション]
~~~
| オプション | 英語の由来 | 説明 |
|:--|:--|:--|
|  | default | カーネルリングバッファの内容を標準出力に表示 |
| `-C`<br>`--clear` | clear | カーネルリングバッファの内容をクリア |
| `-T` | timestamp | 出力に人間が読みやすいタイムスタンプを付与 |
| `-L` | color | カラー表示を有効にする |
| `-k` | kernel | カーネルメッセージのみを表示 |
| `-n` | level | 表示するログレベルを変更 |

# catコマンド
~~~terminal:
$ cat [オプション] ファイル
~~~
| オプション | 英語の由来 | 説明 |
|:--|:--|:--|
| | default | 指定したファイルの内容を標準出力に表示 |
| `-n` | number | 各行に行番号を付与 |
| `-b` | number non-blank | 空白行を除いて行番号を付与 |
| `-s` | squeeze | 連続する空白行を1行にまとめる |
| `-E` | end-of-line | 行末に `$` を表示 |
| `-T` | tab | タブを `^I` で表示 |

# journalctlコマンド
~~~terminal:
$ journalctl -k [オプション]
~~~
~~~terminal:
$ journalctl --dmesg [オプション]
~~~

| オプション | 英語の由来 | 説明 |
|:--|:--|:--|
| `-k` | kernel | カーネルメッセージのみを表示 |
| `--dmesg` | diagnostic messages | カーネルメッセージのみを表示 |

# Ping-t
- [3006_dmesg](https://mondai.ping-t.com/question_subjects/31/question_sessions/30553580/progressing_questions/468115710)
- [3342_dmesg --clear](https://mondai.ping-t.com/question_subjects/31/question_sessions/30871191/progressing_questions/472932402)
- [3342_journalctl -k,journalctl --dmesg](https://mondai.ping-t.com/question_subjects/31/question_sessions/30974595/progressing_questions/474609663)
- [3703_journalctl](https://mondai.ping-t.com/question_subjects/31/question_sessions/31719854/progressing_questions/486088051)
- [3712_journalctl -k, --dmesg](https://mondai.ping-t.com/question_subjects/31/question_sessions/31585258/progressing_questions/483986850)