csvの書き方

# CSV形式の説明 - ECサイト商品データ例

## サンプルCSVデータ

```csv
商品id,商品名,価格,カテゴリー,タグ
1,ワイヤレスイヤホン,8980,オーディオ,Bluetooth|ワイヤレス|防水
2,スマートウォッチ,15800,ウェアラブル,健康管理|通知機能|防水
3,モバイルバッテリー,3280,アクセサリー,大容量|急速充電|軽量
4,USB-Cケーブル,980,アクセサリー,USB-C|1m|高耐久
5,ノイズキャンセリングヘッドホン,24800,オーディオ,ノイズキャンセリング|ワイヤレス|高音質
```

## このCSVの構造説明

### 1行目:ヘッダー行

```
商品id,商品名,価格,カテゴリー,タグ
```

- 各列が何のデータかを示す「列名」
- これがあることで、プログラムが自動的にデータをオブジェクトに変換できる

### 2行目以降:データ行

```
1,ワイヤレスイヤホン,8980,オーディオ,Bluetooth|ワイヤレス|防水
```

- 実際の商品データ
- 各値が**カンマ(,)で区切られている** ← これ

npmレジストリとプライベートパッケージの基礎

# npmレジストリとプライベートパッケージの基礎

## レジストリとは

npmパッケージが保管されているサーバー・リポジトリのこと。`npm install`や`pnpm install`を実行すると、このレジストリからパッケージをダウンロードする。

### 主なレジストリ

- **npmjs.org**: 公式のパブリックレジストリ(デフォルト)
- **GitHub Packages**: GitHubが提供するレジストリ
- **企業独自のレジストリ**: Verdaccio、JFrog Artifactoryなど

### 仕組み

```
pnpm install react
    ↓
レジストリに問い合わせ(デフォルト: https://registry.npmjs.org/)
    ↓
reactパッケージをダウンロード
    ↓
node_modulesにインストール
```

## プライベートレジストリとは

一般公開されていない、限られたユーザーのみがアクセスできるレジストリ。

### 用途

- 社内専用パッケージの配布
- セキュリティ上公開

TurboRepo導入

# Turborepo ドキュメント

## Turborepoとは

**Turborepo**は、JavaScriptおよびTypeScript向けの高性能ビルドシステム。Vercel社が開発し、monorepo(モノリポジトリ)構成に対応している。

### 開発背景

従来のmonorepo構成における課題:
- すべてのパッケージを毎回ビルドする必要があり、ビルド時間が増大
- CI環境での実行時間が長期化
- 同じ作業を繰り返すことによるリソースの無駄

Turborepoはこれらの課題に対処するために開発された。

## 解決する問題

### 1. ビルド時間の削減
- **キャッシング**: タスクの入力をハッシュ化し、同じ入力の場合は以前の出力を再利用
- **並列実行**: 依存関係のないタスクを同時実行
- **増分ビルド**: 変更されたパッケージとその依存関係のみを再ビルド

### 2. チーム全体での効率化
- **リモートキャッシング**: ビルド結果をチームメンバー間で共有
- **CI環境の高速化**: 過去のビルド結果を再利用

### 3. 依

OAuthアクセストークン検証時の注意点

# OAuth Cross API Vulnerability メモ

## NGとなる状況(作ってはいけない状態)

### システム構成上の前提
- 複数のサービス(例:サービスA、サービスB)が存在する
- 各サービスは別々のAPI(リソースサーバ)を持つ
- 認可基盤として同一のOAuth/OIDCプロバイダ(例:同一Auth0テナント)を使用している
- 各APIは Bearer Access Token(JWT)を受け取って認可を行う

### NGな状態の定義
- API(リソースサーバ)が以下の条件でアクセストークンを受理する状態
  - トークンの署名検証は行っている
  - トークンの発行元(issuer)が信頼できることのみを確認している
  - **aud(audience)が自API向けであることを検証していない**

---

## 問題が実際に発生する手順

1. ユーザがサービスBにログインする  
   - OAuth/OIDC認証フローにより、認可サーバから
     サービスBのAPI向けアクセストークンが発行される
   - このトークンには以下

BFF(Backend For Frontend)とは

# BFF(Backend For Frontend)とは

## 概要

BFF(Backend For Frontend)は、フロントエンドとバックエンドの間に配置される中間レイヤーで、バックエンドAPIから取得したデータをフロントエンド向けに最適化して提供するアーキテクチャパターン。

### 簡単に言うと
「フロントエンド専用のカスタムバックエンド」であり、複数のバックエンドサービスからデータを集約・加工して、フロントエンドが使いやすい形で提供する役割を担う。

## なぜBFFが必要なのか

従来のアーキテクチャでは、1つの汎用的なAPIで全てのクライアント(Web、モバイルなど)に対応していた。これには以下の問題があった:

- **データの過剰取得**: モバイルには不要なデータまで返してしまう
- **複数リクエストの必要性**: 1画面表示に複数のAPIコールが必要
- **フロントエンドの複雑化**: データ整形のロジックがフロントエンド側に散在
- **バックエンド側の肥大化**: 全クライアントの要求に応えようとしてAPIが複雑になる

## データの流れ:商品

SSG/SSR/CSR/ISRの使い分けガイド

# SSG/SSR/CSR/ISRの使い分けガイド

## 各レンダリング方式の概要

### SSG (Static Site Generation)
ビルド時に静的ファイルを生成する方式。

**特徴:**
- ビルド時にページごとのHTMLを生成
- CSS、JavaScriptはビルド成果物として出力
- リクエスト時のサーバーサイド処理が不要
- 検索エンジンがHTMLを直接読み取り可能

**適しているケース:**
- ブログ記事、マーケティングサイト、ドキュメントサイト、ランディングページ、企業サイト、ポートフォリオサイト
- コンテンツの更新頻度が低い場合
- 全ユーザーに同じコンテンツを表示する場合
- リクエスト時のサーバーリソースを消費したくない場合

**制約:**
- ページ数が多いとビルド時間が増加
- コンテンツ更新には再ビルドが必要

### SSR (Server-Side Rendering)
リクエストごとにサーバーでHTMLを生成する方式。

**特徴:**
- リクエスト時にサーバーでHTMLをレンダリング
- リクエストごとにサーバーリソース

物理削除・論理削除・削除フラグ・削除テーブルの使い分け

<?php
/**
 * データベース削除の4つのアプローチ
 * MySQL + PHP サンプルコード
 */

// ========================================
// 各アプローチの比較と使い分け
// ========================================

/**
 * 1. 論理削除(deleted_at)
 *    メリット: 復元が容易、削除履歴が残る、誤削除に強い、削除日時が分かる
 *    デメリット: データ量が増える、クエリが複雑になる
 *    用途: ユーザーアカウント、重要なマスターデータ、監査証跡が必要な場合
 * 
 * 2. 物理削除
 *    メリット: データベースがシンプル、ストレージ節約、完全にデータを消去できる
 *    デメリット: 復元不可、履歴が残らない
 *    用途: 一時データ、セッション情報、キャッシュ、個人情報の完全削除
 * 
 * 3. 削除フラグ(is_deleted)
 *    メリット: シンプル、高速、復元が容易、インデックスが効きやす

944. Delete Columns to Make Sorted

You are given an array of n strings strs, all of the same length. The strings can be arranged such that there is one on each line, making a grid. For example, strs = ["abc", "bce", "cae"] can be arranged as follows: abc bce cae You want to delete the columns that are not sorted lexicographically. In the above example (0-indexed), columns 0 ('a', 'b', 'c') and 2 ('c', 'e', 'e') are sorted, while column 1 ('b', 'c', 'a') is not, so you would delete column 1. Return the number of columns that you will delete.
/**
 * @param {string[]} strs
 * @return {number}
 */
var minDeletionSize = function(strs) {
    // Number of rows (strings)
    const n = strs.length;
    // Number of columns (length of each string)
    const m = strs[0].length;

    let deletions = 0;

    // We check each column independently
    for (let col = 0; col < m; col++) {
        // For each column, scan down the row
        for (let row = 1; row < n; row++) {
            // Compare current row with previous row
            // If s

Legit WU Transfer Bug MoneyGram Transfer CC Fullz PayPal Transfer CashApp Transfer Apple Pay Transfer Skrill Transfer..



Scattered Spider (and allied group Scattered LAPSUS$ Hunters) 🌎 


VERIFIED CARDER SELLING WU,BANK,PAYPAL,CASHAPP,SKRILL TRANSFER BANK LOGS,DUMPS+PIN,CLONED CARDS

Telegram: JeansonTooL SELL CCV CANADA FULLZ FRESH SSN DOB WITH DL LIVE MAIL PASSWORD OFFICE365 PAYPAL

Telegram: JeansonTooL CVV,Fullz,Dumps,PayPal Debit/Credit Card,CashApp, Western Union, Transfer,ATM Clone Cards!!

Telegram: JeansonTooL SELL CVV FULLZ INFO GOOD USA-UK-CA-AU-INTER,PASS VBV/BIN/DOB

Telegram: JeansonTooL : Sell Dum

FastAPI

@app.get("/dataset_info")
def get_dataset_info():
    """Get basic dataset information"""
    try:
        if not os.path.exists(dataset_path):
            raise HTTPException(status_code=404, detail="Dataset file not found")
        
        df = pd.read_excel(dataset_path)
        
        return {
            "dataset_path": dataset_path,
            "rows": int(df.shape[0]),
            "columns": int(df.shape[1]),
            "column_names": df.columns.tolist(),
            "d

2092. Find All People With Secret

You are given an integer n indicating there are n people numbered from 0 to n - 1. You are also given a 0-indexed 2D integer array meetings where meetings[i] = [xi, yi, timei] indicates that person xi and person yi have a meeting at timei. A person may attend multiple meetings at the same time. Finally, you are given an integer firstPerson. Person 0 has a secret and initially shares the secret with a person firstPerson at time 0. This secret is then shared every time a meeting takes place with a person that has the secret. More formally, for every meeting, if a person xi has the secret at timei, then they will share the secret with person yi, and vice versa. The secrets are shared instantaneously. That is, a person may receive the secret and share it with people in other meetings within the same time frame. Return a list of all the people that have the secret after all the meetings have taken place. You may return the answer in any order.
/**
 * @param {number} n
 * @param {number[][]} meetings
 * @param {number} firstPerson
 * @return {number[]}
 */
// Function to find all people connected to the first person
var findAllPeople = function(n, meetings, firstPerson) {
    // Initialize an array to keep track of connections
    const connected = new Array(n).fill(-1);

    // Function to find the parent of a person
    const find = (person) => connected[person] < 0 ? person : find(connected[person]);

    // Function to connect two 

Streamlit Components

# Show the dashboard title directly
st.title(dashboard_type)

# ---------------- Analysis Dashboard ----------------
if dashboard_type == "📈 Analysis Dashboard":
    st.markdown("### Dashboard Content")
    tab1, tab2, tab3 = st.tabs(["📈 Visualizations", "📋 Data Table", "📊 Summary"])

    with tab1:
        st.write("Charts and graphs will be displayed here")

    with tab2:
        st.write("Raw data table will be displayed here")

    with tab3:
        st.write("Summary statist

Serial console: connect to router via USB-to-Serial (screen)

# Serial console: connect to router via USB-to-Serial (screen)

This is a quick reference for connecting to a router's serial console from different machines.
The serial device path varies per OS and per adapter, so the main goal is to reliably find the correct
`/dev/...tty...` (or `/dev/serial/by-id/...`) and then connect.

## Connect (screen)

```bash
sudo screen <SERIAL_DEVICE> 115200

Generate Dummy File

fallocate -l 1G /home/ubuntu/downloads/test-egress-1gb.bin

3652. Best Time to Buy and Sell Stock using Strategy

You are given two integer arrays prices and strategy, where: prices[i] is the price of a given stock on the ith day. strategy[i] represents a trading action on the ith day, where: -1 indicates buying one unit of the stock. 0 indicates holding the stock. 1 indicates selling one unit of the stock. You are also given an even integer k, and may perform at most one modification to strategy. A modification consists of: Selecting exactly k consecutive elements in strategy. Set the first k / 2 elements to 0 (hold). Set the last k / 2 elements to 1 (sell). The profit is defined as the sum of strategy[i] * prices[i] across all days. Return the maximum possible profit you can achieve. Note: There are no constraints on budget or stock ownership, so all buy and sell operations are feasible regardless of past actions.
/**
 * Calculates the maximum profit achievable by applying a strategy
 * and replacing a window of size `k` with a new profit calculation.
 *
 * @param {number[]} prices - Array of prices over time.
 * @param {number[]} strategy - Strategy multipliers applied to each price.
 * @param {number} k - Size of the window to adjust.
 * @returns {number} Maximum profit achievable.
 */
var maxProfit = function(prices, strategy, k) {
    const n = prices.length;
    let maxProfit = 0;

    // Prefix sums