import pandas as pd
import plotly.express as px
from typing import Optional
from plotly.graph_objs import Figure
# src/visualization/dashboard.py
def create_missing_values_chart(
dataset_path: str,
title: str = "Missing Values per Column",
height: int = 600,
width: int = 1200,
) -> Optional[Figure]:
"""
Reads a dataset from the given path and creates an interactive Plotly chart
showing missing values per column.
Parameters
----------
def analysis_pie(datapath):
"""
Reads complaint data from a CSV file and generates pie charts:
1. Complaints per Department
2. Complaints per Year
3. Closed vs Open Complaints (All Years Combined)
Returns:
BytesIO buffer containing PNG image
"""
# --- Step 1: Load Data ---
df = pd.read_csv(datapath)
df['DATE'] = pd.to_datetime(df['DATE'])
df['YEAR'] = df['DATE'].dt.year
# --- Step 2: Summaries ---
dept_summary = df.group/**
* @param {string[]} strs
* @return {number}
*/
var minDeletionSize = function(strs) {
const n = strs.length;
const m = strs[0].length;
// sorted[i] = true means strs[i] < strs[i+1] is already determined
const sorted = Array(n - 1).fill(false);
let deletions = 0;
// Scan columns left to right
for (let col = 0; col < m; col++) {
// Check if keeping this column would break lexicographic order
let mustDelete = false;
for (let i = 0; i <# 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 install`や`pnpm install`を実行すると、このレジストリからパッケージをダウンロードする。
### 主なレジストリ
- **npmjs.org**: 公式のパブリックレジストリ(デフォルト)
- **GitHub Packages**: GitHubが提供するレジストリ
- **企業独自のレジストリ**: Verdaccio、JFrog Artifactoryなど
### 仕組み
```
pnpm install react
↓
レジストリに問い合わせ(デフォルト: https://registry.npmjs.org/)
↓
reactパッケージをダウンロード
↓
node_modulesにインストール
```
## プライベートレジストリとは
一般公開されていない、限られたユーザーのみがアクセスできるレジストリ。
### 用途
- 社内専用パッケージの配布
- セキュリティ上公開# Turborepo ドキュメント
## Turborepoとは
**Turborepo**は、JavaScriptおよびTypeScript向けの高性能ビルドシステム。Vercel社が開発し、monorepo(モノリポジトリ)構成に対応している。
### 開発背景
従来のmonorepo構成における課題:
- すべてのパッケージを毎回ビルドする必要があり、ビルド時間が増大
- CI環境での実行時間が長期化
- 同じ作業を繰り返すことによるリソースの無駄
Turborepoはこれらの課題に対処するために開発された。
## 解決する問題
### 1. ビルド時間の削減
- **キャッシング**: タスクの入力をハッシュ化し、同じ入力の場合は以前の出力を再利用
- **並列実行**: 依存関係のないタスクを同時実行
- **増分ビルド**: 変更されたパッケージとその依存関係のみを再ビルド
### 2. チーム全体での効率化
- **リモートキャッシング**: ビルド結果をチームメンバー間で共有
- **CI環境の高速化**: 過去のビルド結果を再利用
### 3. 依# 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)は、フロントエンドとバックエンドの間に配置される中間レイヤーで、バックエンドAPIから取得したデータをフロントエンド向けに最適化して提供するアーキテクチャパターン。
### 簡単に言うと
「フロントエンド専用のカスタムバックエンド」であり、複数のバックエンドサービスからデータを集約・加工して、フロントエンドが使いやすい形で提供する役割を担う。
## なぜBFFが必要なのか
従来のアーキテクチャでは、1つの汎用的なAPIで全てのクライアント(Web、モバイルなど)に対応していた。これには以下の問題があった:
- **データの過剰取得**: モバイルには不要なデータまで返してしまう
- **複数リクエストの必要性**: 1画面表示に複数のAPIコールが必要
- **フロントエンドの複雑化**: データ整形のロジックがフロントエンド側に散在
- **バックエンド側の肥大化**: 全クライアントの要求に応えようとしてAPIが複雑になる
## データの流れ:商品# 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)
* メリット: シンプル、高速、復元が容易、インデックスが効きやす/**
* @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
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@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/**
* @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 # 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