quick git reference

# Switch to main branch
git checkout main

# Get latest changes from remote
git pull origin main

# Create new feature branch
git checkout -b feature/<issue-number>-short-description

# Stage specific file (recommended)
git add filename.cs

# OR stage all changes (use carefully)
git add .

#⃣ Check what will be committed
git status

#⃣ Commit with clear message
git commit -m "feat: short clear description"

#⃣ Push branch (first time)
git push -u origin feature/<issue-number>-short-description

Lambdaの関数は処理ごとに分離しない方がコストが安い

# Lambda Nano-functions アンチパターン

## 概要

1処理1Lambdaに細分化する設計パターン。通称 "Lambda per method" / "Nano-functions"。
通常のプログラミングにおける関数分割をそのままLambda分割に持ち上げる構成。

## 問題点

### 1. レイテンシの劣化

- Lambda間呼び出しでは、コールドスタート(実行環境が未起動の状態からランタイムの初期化・コードのロードを行う時間。Java: 数百ms〜数s、Python/Node: 100〜500ms程度)が各Lambdaで発生しうる
- プロセス内関数呼び出しのオーバーヘッドはμs単位。Lambda間呼び出しはネットワークホップ(Lambda AがLambda Bを呼ぶ際に経由するネットワーク通信の1区間)を含むためms〜s単位
- 3段チェーン(Lambda A → Lambda B → Lambda Cのように3つのLambdaが直列に呼び出し合う構成)の場合、最悪ケースでコールドスタートが3回直列に発生し、合計レイテンシが数秒に達する

###

Lambdaの関数は処理ごとに分離しない方がコストが安い

# Lambda Nano-functions アンチパターン

## 概要

1処理1Lambdaに細分化する設計パターン。通称 "Lambda per method" / "Nano-functions"。
通常のプログラミングにおける関数分割をそのままLambda分割に持ち上げる構成。

## 問題点

### 1. レイテンシの劣化

- Lambda間呼び出しでは、コールドスタート(実行環境が未起動の状態からランタイムの初期化・コードのロードを行う時間。Java: 数百ms〜数s、Python/Node: 100〜500ms程度)が各Lambdaで発生しうる
- プロセス内関数呼び出しのオーバーヘッドはμs単位。Lambda間呼び出しはネットワークホップ(Lambda AがLambda Bを呼ぶ際に経由するネットワーク通信の1区間)を含むためms〜s単位
- 3段チェーン(Lambda A → Lambda B → Lambda Cのように3つのLambdaが直列に呼び出し合う構成)の場合、最悪ケースでコールドスタートが3回直列に発生し、合計レイテンシが数秒に達する

###

HTTPOnlyCookieの注意点

# httpOnly Cookie の誤解 ― 「読めない」は「悪用できない」ではない

## よくある誤解

> 「Cookie を httpOnly にすれば JavaScript から読めないので安全」

半分正しく、半分間違い。httpOnly 属性は `document.cookie` 経由での読み取りを防ぐが、**Cookie を読めなくても悪用できる**という点が見落とされがち。

---

## 何が起きるのか ― CSRF(Cross-Site Request Forgery)

ブラウザには「リクエスト送信時に、対象ドメインの Cookie を自動的に付与する」という仕様がある。`credentials: "include"` を指定した fetch API も例外ではない。

攻撃者はこの仕様を利用して、**Cookie の中身を一切知らないまま**、被害者のブラウザに正規リクエストを送信させることができる。

### 攻撃の流れ

```
1. 被害者が target-site.com にログイン済み
   → セッション Cookie がブラウザに保存されてい

不審なアクセスがスクレイピングかどうかの判断基準と対応方法

# スクレイピング検知のためのログ分析手法と対策

## 1. 分析対象のログ種別

| ログ種別 | 主な記録内容 | 取得元の例 |
|---|---|---|
| Webサーバーアクセスログ | IP、タイムスタンプ、リクエストURI、ステータスコード、User-Agent、Referer | Apache `access.log`、Nginx `access.log` |
| WAF / CDNログ | リクエストヘッダ全体、レート情報、ブロック履歴 | Cloudflare、AWS WAF、Akamai |
| アプリケーションログ | セッションID、認証状態、API呼び出し回数 | 各アプリケーションフレームワーク |

---

## 2. スクレイピングを示唆するログパターン

### 2.1 リクエスト頻度の異常

**確認方法:** 同一IPアドレスからの単位時間あたりのリクエスト数を集計する。

```bash
# 1分間あたりのIPごとのリクエスト数を集計(Apacheの combined 形式)
awk '{print $1, substr($4,2,17)

ログアウト処理をGETで実装してはいけない

# ログアウト処理を GET で構築してはいけない理由(PHP)

## 結論

ログアウトは `session_destroy()` によるセッション破棄、すなわちサーバー側の状態変更操作である。HTTP の仕様上、状態変更操作には **POST**(または DELETE)を使用する。GET で実装した場合、以下の具体的な問題が発生する。

---

## 1. CSRF(クロスサイトリクエストフォージェリ)攻撃が成立する

GET リクエストは `<img>` タグの `src` 属性に URL を指定するだけで発火する。

```html
<!-- 攻撃者のサイトに設置されたコード -->
<img src="https://example.com/logout.php" style="display:none" />
```

ブラウザはこの `<img>` タグを解釈した時点で `https://example.com/logout.php` に GET リクエストを送信し、`PHPSESSID` を含む Cookie も自動的に付与する。結果として `session_des

gpt oss 120b nividia responses

import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: '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',
  baseURL: 'https://integrate.api.nvidia.com/v1',
});

async function main() {
  const response = await openai.responses.create({
    model: "openai/gpt-oss-120b",
    input: "",
    max_output_tokens: 4096,
    top_p: 1,
    temperature: 1,
    stream: true
  });

  
  let reasoningDone = false;
  for await (const chunk of response) {

gpt oss 120b nvidia

import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: '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',
  baseURL: 'https://integrate.api.nvidia.com/v1',
})
 
async function main() {
  const completion = await openai.chat.completions.create({
    model: "openai/gpt-oss-120b",
    messages: [{"role":"user","content":""}],
    temperature: 1,
    top_p: 1,
    max_tokens: 4096,
    stream: true
  })
   
  for await (const chunk of completion) 

gpt-oss-120b-nvidia

from openai import OpenAI

client = OpenAI(
  base_url = "https://integrate.api.nvidia.com/v1",
  api_key = "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"
)

completion = client.chat.completions.create(
  model="openai/gpt-oss-120b",
  messages=[{"role":"user","content":""}],
  temperature=1,
  top_p=1,
  max_tokens=4096,
  stream=True
)

for chunk in completion:
  if not getattr(chunk, "choices", None):
    continue
  reasoning = getattr(chunk.choice

kimi-2.5

import axios from 'axios';
import { readFile } from 'node:fs/promises';

const invokeUrl = "https://integrate.api.nvidia.com/v1/chat/completions";
const stream = true;

const headers = {
  "Authorization": "Bearer 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",
  "Accept": stream ? "text/event-stream" : "application/json"
};


const payload = {
  "model": "moonshotai/kimi-k2.5",
  "messages": [{"role":"user","content":""}],
  "max_tokens": 16384,
  "tempe

z-ai nemotron

import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: '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',
  baseURL: 'https://integrate.api.nvidia.com/v1',
})
 
async function main() {
  const completion = await openai.chat.completions.create({
    model: "z-ai/glm5",
    messages: [{"role":"user","content":""}],
    temperature: 1,
    top_p: 1,
    max_tokens: 16384,
    chat_template_kwargs: {"enable_thinking":true,"clear_thinking":false},
  

z.ai

from openai import OpenAI
import os
import sys

_USE_COLOR = sys.stdout.isatty() and os.getenv("NO_COLOR") is None
_REASONING_COLOR = "\033[90m" if _USE_COLOR else ""
_RESET_COLOR = "\033[0m" if _USE_COLOR else ""

client = OpenAI(
  base_url = "https://integrate.api.nvidia.com/v1",
  api_key = "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"
)


completion = client.chat.completions.create(
  model="z-ai/glm5",
  messages=[{"role":"user","content":""}],
 

cats slugs

SELECT
--     pst.name AS segment_type,
    MAX(CASE WHEN psi.lang_id = 1 THEN psi.name END) AS name_lang_1,
    MAX(CASE WHEN psi.lang_id = 2 THEN psi.name END) AS name_lang_2,
    MAX(CASE WHEN psi.lang_id = 1 THEN psi.slug END) AS slug_lang_1,
    MAX(CASE WHEN psi.lang_id = 2 THEN psi.slug END) AS slug_lang_2
FROM products_segments ps
JOIN products_segments_type pst ON pst.id = ps.type
JOIN products_segments_i18n psi ON psi.product_category_id = ps.id
WHERE pst.name IN ('category', 'subcateg

cats slugs

SELECT
--     pst.name AS segment_type,
    MAX(CASE WHEN psi.lang_id = 1 THEN psi.name END) AS name_lang_1,
    MAX(CASE WHEN psi.lang_id = 2 THEN psi.name END) AS name_lang_2,
    MAX(CASE WHEN psi.lang_id = 1 THEN psi.slug END) AS slug_lang_1,
    MAX(CASE WHEN psi.lang_id = 2 THEN psi.slug END) AS slug_lang_2
FROM products_segments ps
JOIN products_segments_type pst ON pst.id = ps.type
JOIN products_segments_i18n psi ON psi.product_category_id = ps.id
WHERE pst.name IN ('category', 'subcateg