Snippets Collections
¡Perfecto! Ahora entiendo lo que necesitas. Quieres una base completa y fácil de memorizar para crear proyectos Laravel rápidamente, combinando:

Comandos de Laravel que ya existen para generar código

Submódulos de Git para reutilizar tus propios bloques

Vamos a crear un sistema en 3 niveles que podrás memorizar fácilmente:

📚 NIVEL 1: BASE LARAVEL (Comandos que YA existen)
Crear proyecto nuevo (2 formas)
bash
# Opción 1: Con composer (la más universal)
composer create-project laravel/laravel nombre-proyecto

# Opción 2: Con installer (más interactivo)
laravel new nombre-proyecto
Comandos CRUCIALES para generar código (MEMORIZA ESTOS)
bash
# 1. Modelo + Migración + Factory + Seeder + Controlador (¡TODO EN UNO!)
php artisan make:model Post -mfs --api

# -m  → migration
# -f  → factory  
# -s  → seeder
# --api → controlador API

# 2. Solo controlador (con recursos)
php artisan make:controller PostController --api --model=Post

# 3. Solo migración
php artisan make:migration create_posts_table

# 4. Solo seeder
php artisan make:seeder PostSeeder

# 5. Solo factory
php artisan make:factory PostFactory --model=Post

# 6. Middleware
php artisan make:middleware AdminMiddleware

# 7. Request (validación)
php artisan make:request StorePostRequest
¿Ves? Con UNA línea creas 5 archivos relacionados. Esto es lo que Laravel ya te da gratis.

🧱 NIVEL 2: TU BASE REUTILIZABLE (Lo que construyes UNA VEZ)
Estructura de tus repositorios base
Crea estos repositorios en GitHub (solo una vez en tu vida):

text
tus-repos-base/
├── base-core/              # 🌟 SIEMPRE lo usas
├── base-auth/              # 🔐 Si necesita login
├── base-admin/             # 🎛️ Si necesita panel
├── base-api/                # 🔌 Si es API
└── base-theme/              # 🎨 Si tiene vistas
Contenido de base-core (el más importante)
Este repositorio lo usarás en TODOS tus proyectos. Contiene:

text
base-core/
├── app/
│   ├── Traits/
│   │   ├── ApiResponseTrait.php    # Respuestas JSON estandarizadas
│   │   ├── UploadTrait.php          # Subida de archivos
│   │   └── UuidTrait.php            # UUIDs en lugar de IDs
│   ├── Interfaces/
│   │   └── RepositoryInterface.php
│   └── Helpers/
│       └── helpers.php
├── app/Base/
│   ├── BaseController.php           # Con métodos success(), error()
│   ├── BaseModel.php                 # Con timestamps, softDeletes
│   ├── BaseRepository.php            # CRUD genérico
│   └── BaseService.php                # Lógica de negocio
├── config/
│   └── core.php
└── composer.json
Ejemplo de BaseController.php (para que veas el poder)
php
<?php
namespace Core\Base;

use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;

abstract class BaseController extends Controller
{
    protected $service;
    protected $resource;
    
    public function index(): JsonResponse
    {
        $items = $this->service->all();
        return $this->success($items);
    }
    
    public function show($id): JsonResponse
    {
        $item = $this->service->find($id);
        return $this->success($item);
    }
    
    public function store(Request $request): JsonResponse
    {
        $data = $request->validate($this->rules());
        $item = $this->service->create($data);
        return $this->success($item, 'Creado con éxito', 201);
    }
    
    protected function success($data, $message = 'OK', $code = 200): JsonResponse
    {
        return response()->json([
            'success' => true,
            'message' => $message,
            'data' => $data
        ], $code);
    }
    
    protected function error($message, $code = 400): JsonResponse
    {
        return response()->json([
            'success' => false,
            'message' => $message
        ], $code);
    }
    
    abstract protected function rules(): array;
}
🚀 NIVEL 3: FLUJO DE TRABAJO (Lo que haces en CADA proyecto)
Fase 1: Crear proyecto nuevo (2 minutos)
bash
# 1. Crear proyecto Laravel
composer create-project laravel/laravel mi-nuevo-proyecto
cd mi-nuevo-proyecto
git init
git add .
git commit -m "Laravel base"

# 2. Añadir tu core (siempre)
git submodule add https://github.com/tu-usuario/base-core.git core

# 3. Añadir otros módulos según necesidad
git submodule add https://github.com/tu-usuario/base-auth.git auth  # ¿Login?
git submodule add https://github.com/tu-usuario/base-api.git api    # ¿API?
git submodule add https://github.com/tu-usuario/base-theme.git theme # ¿Vistas?

# 4. Configurar composer.json
Fase 2: Configurar composer.json (editar una vez)
json
{
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Core\\": "core/app/",
            "Auth\\": "auth/app/",
            "Api\\": "api/app/",
            "Theme\\": "theme/app/"
        },
        "files": [
            "core/app/Helpers/helpers.php"
        ]
    }
}
bash
composer dump-autoload
Fase 3: Crear PRIMER modelo (usando tu base)
bash
# 1. Generar modelo con Laravel
php artisan make:model Product -mfs --api

# 2. Editar el modelo para que use tu BaseModel
php
// app/Models/Product.php
<?php

namespace App\Models;

use Core\Base\BaseModel;  // 🎯 En lugar de usar Model

class Product extends BaseModel  // 🎯 Extiende de tu base
{
    protected $fillable = ['name', 'price', 'description'];
    
    // ¡Ya tienes timestamps, softDeletes, UUIDs si los configuraste!
}
Fase 4: Crear controlador (2 líneas)
bash
# 1. Generar controlador
php artisan make:controller ProductController --api --model=Product
php
// app/Http/Controllers/ProductController.php
<?php

namespace App\Http\Controllers;

use Core\Base\BaseController;  // 🎯 Tu base
use App\Models\Product;
use App\Services\ProductService;
use App\Http\Resources\ProductResource;

class ProductController extends BaseController  // 🎯 Extiende de tu base
{
    public function __construct(ProductService $service)
    {
        $this->service = $service;
        $this->resource = ProductResource::class;
    }
    
    // No necesitas escribir index, show, store...
    // ¡Ya los heredas de BaseController!
    
    protected function rules(): array
    {
        return [
            'name' => 'required|string|max:255',
            'price' => 'required|numeric|min:0',
            'description' => 'nullable|string'
        ];
    }
}
Fase 5: Usar en rutas
php
// routes/api.php
Route::apiResource('products', ProductController::class);
¡Ya tienes CRUD completo con 0 líneas de lógica!

📋 RESUMEN PARA MEMORIZAR (Lo ÚNICO que necesitas recordar)
DÍA 1: Preparar tus bases (hacerlo UNA VEZ)
bash
# Crear repos base en GitHub
mkdir base-core && cd base-core
# ... crear estructura
git init && git add . && git commit -m "Core"
git remote add origin https://github.com/tu-org/base-core.git
git push

# Repite para: base-auth, base-api, base-theme...
CADA NUEVO PROYECTO (lo que repites)
bash
# 1. Crear proyecto
composer create-project laravel/laravel mi-proyecto
cd mi-proyecto

# 2. Git init
git init
git add .
git commit -m "Base Laravel"

# 3. Añadir submódulos (¡Solo 3 comandos!)
git submodule add https://github.com/tu-org/base-core.git core
git submodule add https://github.com/tu-org/base-auth.git auth  # si toca
git submodule add https://github.com/tu-org/base-api.git api    # si toca

# 4. Configurar autoload (editar composer.json)
# Añadir "Core\\": "core/app/" etc.

composer dump-autoload

# 5. ¡A programar!
php artisan make:model Product -mfs --api
# Editas modelo para extender BaseModel
# Editas controlador para extender BaseController
# ¡Listo!
Comandos de Laravel que SIEMPRE usas
bash
# Para crear cosas nuevas
php artisan make:model Nombre -mfs --api     # ¡EL REY!
php artisan make:controller Nombre --api --model=Nombre
php artisan make:migration crear_tabla
php artisan make:seeder NombreSeeder
php artisan make:middleware Nombre

# Para correr
php artisan serve
php artisan migrate
php artisan db:seed
php artisan make:cast  # Para tipos personalizados
Comandos de Git que SIEMPRE usas
bash
# Al empezar proyecto
git submodule add URL carpeta

# Al clonar proyecto con submódulos
git clone URL
git submodule update --init --recursive

# Para actualizar submódulos
git submodule foreach git pull origin main
🎯 EJEMPLO COMPLETO RÁPIDO
Imagina que hoy te piden hacer una API de tareas:

bash
# 1. Crear proyecto
composer create-project laravel/laravel task-api
cd task-api

# 2. Git y submódulos
git init
git add . && git commit -m "Base"
git submodule add https://github.com/tu-org/base-core.git core
git submodule add https://github.com/tu-org/base-api.git api

# 3. Editar composer.json (añadir Core\ y Api\)
# "Core\\": "core/app/",
# "Api\\": "api/app/",

composer dump-autoload

# 4. Crear modelo Task
php artisan make:model Task -mfs --api

# 5. Editar app/Models/Task.php
# use Core\Base\BaseModel;
# class Task extends BaseModel

# 6. Editar migrations (añadir campos)
# $table->string('title');
# $table->text('description')->nullable();
# $table->boolean('completed')->default(false);

# 7. Crear controlador
php artisan make:controller TaskController --api --model=Task

# 8. Editar app/Http/Controllers/TaskController.php
# use Core\Base\BaseController;
# class TaskController extends BaseController

# 9. Definir reglas de validación
# protected function rules() { return ['title' => 'required']; }

# 10. Rutas
# routes/api.php: Route::apiResource('tasks', TaskController::class);

# 11. Migrar
php artisan migrate

# ¡API lista! Con index, show, store, update, delete funcionando
¿Ves? En menos de 10 minutos tienes una API completa gracias a:

Laravel: Genera modelos, controladores, migraciones

Tus submódulos: Aportan la lógica base (respuestas JSON, CRUD genérico)

📝 TU HOJA DE TRUCO (Para imprimir y pegar en la pared)
text
🚀 NUEVO PROYECTO LARAVEL EN 5 PASOS:

1. composer create-project laravel/laravel nombre
2. cd nombre && git init
3. git submodule add URL_CORE core
4. git submodule add URL_AUTH auth  (si toca)
5. composer dump-autoload

🏗️ CREAR NUEVO RECURSO:

1. php artisan make:model Recurso -mfs --api
2. Editar modelo → extiende BaseModel
3. Editar migración → añadir campos
4. php artisan make:controller RecursoController --api --model=Recurso
5. Editar controller → extiende BaseController
6. php artisan migrate

🔄 ACTUALIZAR SUBMÓDULOS:

git submodule foreach git pull origin main

📋 COMANDOS ÚTILES:

php artisan serve
php artisan tinker
php artisan route:list
php artisan make:middleware
php artisan make:request
php artisan make:cast
¿Tiene más sentido ahora? La clave está en:

Laravel te da los comandos make:model, make:controller, etc.

Tus submódulos te dan las clases base (BaseController, BaseModel)

Tú solo conectas ambas cosas (extender tus bases y definir reglas)
import jenkins.model.*

instance = Jenkins.getInstance()
globalNodeProperties = instance.getGlobalNodeProperties()

myParam = 'Not Set'

globalNodeProperties.each {
  envVars = it.getEnvVars()
  if (envVars.get('ENV_VAR_NAME') != null) {
    myParam = envVars.get('ENV_VAR_NAME');
  }
}


if (myParam) {
    // Assuming the environment variable is a comma-separated string like "option1,option2,option3"
    return myParam.split(',').collect{ it.trim() }
} else {
    return ["Environment variable not set or empty"]
}
import cv2
import numpy as np
from PIL import Image

# ==========================
# CONFIG
# ==========================
ROOM_IMAGE  = r"E:\xampp\htdocs\python\jan_jatra_improvement\Gemini_Generated_Image_rct6syrct6syrct6.png"
TILE_IMAGE  = r"E:\xampp\htdocs\python\jan_jatra_improvement\img_002.jpg"
OUTPUT      = "final_grid_engine.png"
GROUT_WIDTH = 3
GROUT_COLOR = (160, 160, 160)

# ==========================
# GLOBALS
# ==========================
original_img     = None
room_img         = None
tile_img         = None

vertical_lines   = []
horizontal_lines = []
obstacles        = []

current_points   = []
obstacle_points  = []
mouse_pos        = None
mode             = "vertical"
show_grid        = True
grout_on         = True
tile_cols        = 5     # user adjustable with +/-
tile_rows_offset = 0     # fine-tune rows with [ / ]


# ==========================
# IMAGE LOADING
# ==========================
def load_image(path):
    pil = Image.open(path).convert("RGB")
    return cv2.cvtColor(np.array(pil), cv2.COLOR_RGB2BGR)


# ==========================
# LINE MATH
# ==========================
def line_intersect(l1, l2):
    x1, y1, x2, y2 = map(float, l1)
    x3, y3, x4, y4 = map(float, l2)
    denom = (x1-x2)*(y3-y4) - (y1-y2)*(x3-x4)
    if abs(denom) < 1e-8:
        return None
    px = ((x1*y2 - y1*x2)*(x3-x4) - (x1-x2)*(x3*y4 - y3*x4)) / denom
    py = ((x1*y2 - y1*x2)*(y3-y4) - (y1-y2)*(x3*y4 - y3*x4)) / denom
    return (int(round(px)), int(round(py)))


def extend_line(line, scale=10000):
    x1, y1, x2, y2 = line
    dx, dy = x2 - x1, y2 - y1
    L = max(np.hypot(dx, dy), 1e-6)
    ux, uy = dx / L, dy / L
    return (int(x1 - ux*scale), int(y1 - uy*scale),
            int(x2 + ux*scale), int(y2 + uy*scale))


def sort_vertical(lines, img_h):
    def x_at_mid(l):
        x1, y1, x2, y2 = l
        if abs(y2 - y1) < 1e-6: return (x1 + x2) / 2
        t = (img_h / 2 - y1) / (y2 - y1)
        return x1 + t * (x2 - x1)
    return sorted(lines, key=x_at_mid)


def sort_horizontal(lines, img_w):
    def y_at_mid(l):
        x1, y1, x2, y2 = l
        if abs(x2 - x1) < 1e-6: return (y1 + y2) / 2
        t = (img_w / 2 - x1) / (x2 - x1)
        return y1 + t * (y2 - y1)
    return sorted(lines, key=y_at_mid)


# ==========================
# CORNER ORDERING (from reference code — prevents stretching)
# ==========================
def order_points_perspective(pts):
    """
    Order 4 points as: TL, TR, BR, BL
    Same method as reference code — guaranteed correct ordering.
    """
    pts = np.array(pts, dtype=np.float32)
    rect = np.zeros((4, 2), dtype=np.float32)
    s = pts.sum(axis=1)          # x + y
    d = np.diff(pts, axis=1)[:, 0]  # x - y
    rect[0] = pts[np.argmin(s)]  # top-left     (smallest x+y)
    rect[2] = pts[np.argmax(s)]  # bottom-right (largest x+y)
    rect[1] = pts[np.argmax(d)]  # top-right    (largest x-y)
    rect[3] = pts[np.argmin(d)]  # bottom-left  (smallest x-y)
    return rect


# ==========================
# GRID FROM LINES
# ==========================
def compute_line_grid():
    """Compute intersection grid from drawn lines (for visualization)."""
    h, w = original_img.shape[:2]
    v_sorted = sort_vertical(vertical_lines, h)
    h_sorted = sort_horizontal(horizontal_lines, w)
    grid = []
    for hl in h_sorted:
        row = []
        for vl in v_sorted:
            pt = line_intersect(vl, hl)
            if pt is not None:
                row.append(pt)
        grid.append(row)
    return grid


def get_outer_corners():
    """Extract and properly order the 4 outer corners from grid."""
    grid = compute_line_grid()
    if not grid or len(grid) < 2:
        return None
    n_cols = min(len(row) for row in grid)
    if n_cols < 2:
        return None

    tl = grid[0][0]
    tr = grid[0][n_cols - 1]
    br = grid[-1][n_cols - 1]
    bl = grid[-1][0]

    # KEY FIX: use reference code's ordering method
    return order_points_perspective(np.float32([tl, tr, br, bl]))


# ==========================
# TILE COUNT COMPUTATION (aspect-ratio preserving)
# ==========================
def compute_tile_counts(corners):
    """
    Auto-compute num_rows so tiles maintain their aspect ratio.
    num_cols = user-set tile_cols
    num_rows = computed from floor proportions + tile aspect ratio
    """
    h_t, w_t = tile_img.shape[:2]

    # Measure floor quad dimensions in screen space
    top_w    = np.linalg.norm(corners[1] - corners[0])
    bottom_w = np.linalg.norm(corners[2] - corners[3])
    left_h   = np.linalg.norm(corners[3] - corners[0])
    right_h  = np.linalg.norm(corners[2] - corners[1])

    avg_w = (top_w + bottom_w) / 2
    avg_h = (left_h + right_h) / 2

    num_cols = max(1, tile_cols)

    # KEY: auto-compute rows to preserve tile aspect ratio
    # We want: (num_cols * w_t) / (num_rows * h_t) ≈ avg_w / avg_h
    # → num_rows = num_cols * w_t * avg_h / (h_t * avg_w)
    num_rows = max(1, int(round(
        num_cols * (avg_h / max(avg_w, 1)) * (w_t / max(h_t, 1))
    )))

    # Apply user fine-tune offset
    num_rows = max(1, num_rows + tile_rows_offset)

    return num_cols, num_rows


# ==========================
# TILE PLACEMENT (reference code's place_grid method)
# ==========================
def apply_tiles():
    """
    Exact same approach as reference code's place_grid():
    1. Build rectangular tiled texture at NATIVE tile resolution
    2. Single perspective warp to floor quad
    3. Mask + composite
    """
    global room_img

    corners = get_outer_corners()
    if corners is None:
        print("  ⚠  Need at least 2 vertical + 2 horizontal lines!")
        return

    h, w = original_img.shape[:2]
    h_t, w_t = tile_img.shape[:2]
    result = original_img.copy()

    num_cols, num_rows = compute_tile_counts(corners)
    print(f"  Tiles: {num_cols} cols × {num_rows} rows = {num_cols * num_rows}")
    print(f"  Tile size: {w_t}×{h_t}px")

    # ── Step 1: Build tiled texture (reference code style) ──
    width_rect  = num_cols * w_t
    height_rect = num_rows * h_t

    tiled = np.zeros((height_rect, width_rect, 3), dtype=np.uint8)
    for row in range(num_rows):
        for col in range(num_cols):
            tiled[row * h_t : (row + 1) * h_t,
                  col * w_t : (col + 1) * w_t] = tile_img

    # ── Step 1b: Bake grout lines into texture ──
    if grout_on and GROUT_WIDTH > 0:
        gw = max(1, GROUT_WIDTH)
        for r in range(1, num_rows):
            y = r * h_t
            tiled[max(0, y - gw):min(height_rect, y + gw), :] = GROUT_COLOR
        for c in range(1, num_cols):
            x = c * w_t
            tiled[:, max(0, x - gw):min(width_rect, x + gw)] = GROUT_COLOR

    # ── Step 2: Perspective warp (EXACTLY like reference code) ──
    src_pts = np.float32([
        [0,          0          ],   # TL
        [width_rect, 0          ],   # TR
        [width_rect, height_rect],   # BR
        [0,          height_rect]    # BL
    ])

    M = cv2.getPerspectiveTransform(src_pts, corners)

    warped = cv2.warpPerspective(
        tiled, M, (w, h),
        flags=cv2.INTER_LANCZOS4,
        borderMode=cv2.BORDER_CONSTANT,
        borderValue=(0, 0, 0)
    )

    # ── Step 3: Mask (floor quad minus obstacles) ──
    mask = np.zeros((h, w), dtype=np.uint8)
    cv2.fillPoly(mask, [corners.astype(np.int32).reshape(-1, 1, 2)], 255)

    for obs in obstacles:
        if len(obs) >= 3:
            cv2.fillPoly(mask, [np.array(obs, np.int32).reshape(-1, 1, 2)], 0)

    # ── Step 4: Composite (same as reference) ──
    mask3 = cv2.merge([mask, mask, mask])
    room_img = np.where(mask3 == 255, warped, result).astype(np.uint8)

    print(f"  ✓  Done! No stretch — tile aspect ratio preserved.")


# ==========================
# TILE PREVIEW GRID (computed from transform matrix)
# ==========================
def compute_tile_preview():
    """
    Show where tiles will ACTUALLY go (not grid line intersections).
    Uses the perspective transform matrix to project tile boundaries.
    """
    corners = get_outer_corners()
    if corners is None:
        return None

    h_t, w_t = tile_img.shape[:2]
    num_cols, num_rows = compute_tile_counts(corners)

    width_rect  = num_cols * w_t
    height_rect = num_rows * h_t

    src_pts = np.float32([
        [0, 0], [width_rect, 0],
        [width_rect, height_rect], [0, height_rect]
    ])
    M = cv2.getPerspectiveTransform(src_pts, corners)

    # Project each tile corner through the transform
    preview = []
    for r in range(num_rows + 1):
        row = []
        for c in range(num_cols + 1):
            pt = np.float64([c * w_t, r * h_t, 1.0])
            t = M @ pt
            if abs(t[2]) > 1e-8:
                t /= t[2]
                row.append((int(t[0]), int(t[1])))
            else:
                row.append(None)
        preview.append(row)
    return preview, num_cols, num_rows


# ==========================
# MOUSE
# ==========================
def mouse_cb(event, x, y, flags, param):
    global current_points, mouse_pos, obstacle_points

    if event == cv2.EVENT_MOUSEMOVE:
        mouse_pos = (x, y)

    elif event == cv2.EVENT_LBUTTONDOWN:
        if mode in ("vertical", "horizontal"):
            current_points.append((x, y))
            if len(current_points) == 2:
                line = (*current_points[0], *current_points[1])
                if mode == "vertical":
                    vertical_lines.append(line)
                    print(f"  + V-line #{len(vertical_lines)}")
                else:
                    horizontal_lines.append(line)
                    print(f"  + H-line #{len(horizontal_lines)}")
                current_points = []
        elif mode == "obstacle":
            obstacle_points.append((x, y))

    elif event == cv2.EVENT_RBUTTONDOWN:
        current_points  = []
        obstacle_points = []


# ==========================
# OVERLAY
# ==========================
def draw_overlay():
    img  = room_img.copy()
    h, w = img.shape[:2]

    # ── V lines (green) ──
    for l in vertical_lines:
        el = extend_line(l)
        cv2.line(img, (el[0],el[1]), (el[2],el[3]), (0,140,0), 1, cv2.LINE_AA)
        cv2.line(img, (l[0],l[1]), (l[2],l[3]), (0,255,0), 2, cv2.LINE_AA)
        cv2.circle(img, (l[0],l[1]), 5, (255,255,255), -1)
        cv2.circle(img, (l[2],l[3]), 5, (255,255,255), -1)

    # ── H lines (orange) ──
    for l in horizontal_lines:
        el = extend_line(l)
        cv2.line(img, (el[0],el[1]), (el[2],el[3]), (140,60,0), 1, cv2.LINE_AA)
        cv2.line(img, (l[0],l[1]), (l[2],l[3]), (255,120,0), 2, cv2.LINE_AA)
        cv2.circle(img, (l[0],l[1]), 5, (255,255,255), -1)
        cv2.circle(img, (l[2],l[3]), 5, (255,255,255), -1)

    # ── Tile preview grid (where tiles ACTUALLY go) ──
    if show_grid and len(vertical_lines) >= 2 and len(horizontal_lines) >= 2:
        result = compute_tile_preview()
        if result:
            preview, nc, nr = result
            for i in range(len(preview) - 1):
                for j in range(len(preview[i]) - 1):
                    quad = [preview[i][j],   preview[i][j+1],
                            preview[i+1][j+1], preview[i+1][j]]
                    if all(p is not None for p in quad):
                        pts = np.array(quad, np.int32)
                        cv2.polylines(img, [pts], True,
                                      (0, 255, 255), 1, cv2.LINE_AA)

            # Corner dots
            for row in preview:
                for pt in row:
                    if pt and -50 <= pt[0] < w+50 and -50 <= pt[1] < h+50:
                        cv2.circle(img, pt, 4, (0,255,255), -1)
                        cv2.circle(img, pt, 4, (0,0,0), 1)

            # Highlight 4 outer corners
            corners = get_outer_corners()
            if corners is not None:
                for i, c in enumerate(corners):
                    ci = (int(c[0]), int(c[1]))
                    cv2.circle(img, ci, 8, (0,0,255), 2)
                    labels = ["TL","TR","BR","BL"]
                    cv2.putText(img, labels[i], (ci[0]+12, ci[1]-5),
                                cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,255), 2)

    # ── Live line preview ──
    if len(current_points) == 1 and mouse_pos:
        c = ((0,255,0) if mode == "vertical"
             else (255,120,0) if mode == "horizontal"
             else (0,0,255))
        cv2.line(img, current_points[0], mouse_pos, c, 2, cv2.LINE_AA)
        cv2.circle(img, current_points[0], 5, (255,255,255), -1)

    # ── Finished obstacles ──
    for obs in obstacles:
        ov = img.copy()
        cv2.fillPoly(ov, [np.array(obs, np.int32)], (0,0,180))
        img = cv2.addWeighted(ov, 0.25, img, 0.75, 0)
        cv2.polylines(img, [np.array(obs, np.int32)], True,
                      (0,0,255), 2, cv2.LINE_AA)

    # ── Obstacle in progress ──
    if obstacle_points:
        for p in obstacle_points:
            cv2.circle(img, p, 4, (0,0,255), -1)
        if len(obstacle_points) > 1:
            cv2.polylines(img, [np.array(obstacle_points)],
                          False, (0,0,255), 2)
        if mouse_pos:
            cv2.line(img, obstacle_points[-1], mouse_pos,
                     (0,0,200), 1, cv2.LINE_AA)

    # ── Tile thumbnail ──
    thumb_h = 80
    th_o, tw_o = tile_img.shape[:2]
    thumb_w = int(thumb_h * tw_o / th_o)
    thumb = cv2.resize(tile_img, (thumb_w, thumb_h), interpolation=cv2.INTER_AREA)
    tx, ty = w - thumb_w - 10, 10
    if tx > 0:
        img[ty:ty+thumb_h, tx:tx+thumb_w] = thumb
        cv2.rectangle(img, (tx-1, ty-1),
                      (tx+thumb_w, ty+thumb_h), (255,255,255), 1)
        cv2.putText(img, f"{tw_o}x{th_o}", (tx, ty+thumb_h+16),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.4, (255,255,255), 1)

    # ── HUD ──
    ov = img.copy()
    cv2.rectangle(ov, (0, 0), (540, 95), (30, 30, 30), -1)
    img = cv2.addWeighted(ov, 0.7, img, 0.3, 0)

    mc = {"vertical":(0,255,0), "horizontal":(255,120,0), "obstacle":(0,0,255)}
    cv2.putText(img, f"Mode: {mode.upper()}", (10, 22),
                cv2.FONT_HERSHEY_SIMPLEX, 0.65, mc[mode], 2)

    # Tile count info
    corners = get_outer_corners()
    if corners is not None:
        nc, nr = compute_tile_counts(corners)
        info = (f"V:{len(vertical_lines)}  H:{len(horizontal_lines)}  "
                f"Tiles:{nc}x{nr}={nc*nr}  "
                f"Cols(+/-):{tile_cols}  RowAdj([/]):{tile_rows_offset:+d}")
    else:
        info = f"V:{len(vertical_lines)}  H:{len(horizontal_lines)}  (need 2V + 2H)"

    cv2.putText(img, info, (10, 48),
                cv2.FONT_HERSHEY_SIMPLEX, 0.38, (220, 220, 220), 1)
    cv2.putText(img,
        f"Grid:{'ON' if show_grid else 'OFF'}  "
        f"Grout:{'ON' if grout_on else 'OFF'}  "
        f"|  ENTER=place  +/-=cols  [/]=rows",
        (10, 72), cv2.FONT_HERSHEY_SIMPLEX, 0.38, (180, 180, 180), 1)

    return img


# ==========================
# MAIN
# ==========================
def main():
    global original_img, room_img, tile_img, mode
    global current_points, obstacle_points, obstacles
    global vertical_lines, horizontal_lines
    global show_grid, grout_on, tile_cols, tile_rows_offset

    original_img = load_image(ROOM_IMAGE)
    room_img     = original_img.copy()
    tile_img     = load_image(TILE_IMAGE)

    cv2.namedWindow("GRID ENGINE", cv2.WINDOW_NORMAL)
    cv2.resizeWindow("GRID ENGINE", 1200, 800)
    cv2.setMouseCallback("GRID ENGINE", mouse_cb)

    print("""
  ╔════════════════════════════════════════════════════╗
  ║     TILE GRID ENGINE v4  (No-Stretch Edition)      ║
  ╠════════════════════════════════════════════════════╣
  ║  V            → Vertical-line mode                 ║
  ║  H            → Horizontal-line mode               ║
  ║  O            → Obstacle mode                      ║
  ║  Click ×2     → Add line (auto)                    ║
  ║  Right-click  → Cancel current drawing             ║
  ║  C            → Close obstacle polygon             ║
  ║  Z            → Undo last action                   ║
  ║  X            → Clear all                          ║
  ║  R            → Reset image (keep lines)           ║
  ║  G            → Toggle grid preview                ║
  ║  T            → Toggle grout                       ║
  ║  + / -        → Adjust tile COLUMNS                ║
  ║  [ / ]        → Fine-tune tile ROWS                ║
  ║  ENTER        → Place tiles (no stretch!)          ║
  ║  S            → Save result                        ║
  ║  ESC          → Exit                               ║
  ╚════════════════════════════════════════════════════╝
    """)

    while True:
        display = draw_overlay()
        cv2.imshow("GRID ENGINE", display)
        key = cv2.waitKey(20) & 0xFF

        if key == 27:
            break

        elif key == ord('v'):
            mode = "vertical"; current_points = []
            print("  → Vertical-line mode")

        elif key == ord('h'):
            mode = "horizontal"; current_points = []
            print("  → Horizontal-line mode")

        elif key == ord('o'):
            mode = "obstacle"; current_points = []
            print("  → Obstacle mode  (click pts, C to close)")

        elif key == ord('c'):
            if mode == "obstacle" and len(obstacle_points) >= 3:
                obstacles.append(obstacle_points.copy())
                obstacle_points = []
                print(f"  ✓ Obstacle #{len(obstacles)} closed")

        elif key == ord('z'):
            if mode == "vertical" and vertical_lines:
                vertical_lines.pop(); print("  ↩ Undid V-line")
            elif mode == "horizontal" and horizontal_lines:
                horizontal_lines.pop(); print("  ↩ Undid H-line")
            elif mode == "obstacle":
                if obstacle_points: obstacle_points.pop()
                elif obstacles: obstacles.pop(); print("  ↩ Undid obstacle")

        elif key == ord('x'):
            vertical_lines.clear(); horizontal_lines.clear()
            obstacles.clear(); obstacle_points.clear(); current_points.clear()
            room_img = original_img.copy()
            tile_rows_offset = 0
            print("  ✗ Cleared all")

        elif key == ord('r'):
            room_img = original_img.copy()
            print("  ↻ Image reset (lines kept)")

        elif key == ord('g'):
            show_grid = not show_grid
            print(f"  Grid: {'ON' if show_grid else 'OFF'}")

        elif key == ord('t'):
            grout_on = not grout_on
            print(f"  Grout: {'ON' if grout_on else 'OFF'}")

        elif key in (ord('+'), ord('=')):
            tile_cols = min(tile_cols + 1, 50)
            print(f"  Cols: {tile_cols}")

        elif key in (ord('-'), ord('_')):
            tile_cols = max(tile_cols - 1, 1)
            print(f"  Cols: {tile_cols}")

        elif key == ord(']'):
            tile_rows_offset += 1
            print(f"  Row offset: {tile_rows_offset:+d}")

        elif key == ord('['):
            tile_rows_offset -= 1
            print(f"  Row offset: {tile_rows_offset:+d}")

        elif key == 13:  # ENTER
            print("  Placing tiles …")
            apply_tiles()

        elif key == ord('s'):
            cv2.imwrite(OUTPUT, room_img)
            print(f"  💾 Saved → {OUTPUT}")

    cv2.destroyAllWindows()


if __name__ == "__main__":
    main()
print("--- MY BMI CALCULATOR ---")
print(" 1 for Kilograms and Meters")
print("2 for Pounds and Inches")
unit_type = input("Choose 1 or 2: ")
if unit_type == "1":
    w = float(input("place your weight in kg: "))
    h = float(input("place your height in meters: "))
    result = w / (h * h)
if unit_type == "2":
    w = float(input("Enter weight in lbs: "))
    h = float(input("Enter height in inches: "))
    result = (w / (h * h)) * 703
print("Your BMI is:")
print(result)
if result < 18.5:
    print("Status: Stick man.com")
elif result < 25:
    print("Status:majembe")
elif result < 30:
    print("Status: nicocado avocado")
else:
    print("Status: you are huge")
Generar CRUD

# 1. Instalar
composer require ibex/crud-generator --dev

# 2. Publicar
php artisan vendor:publish --tag=crud

# 3. Generar CRUD
php artisan make:crud NombreModelo --fields="campo1:tipo, campo2:tipo"

# 4. Migrar
php artisan migrate

# 5. Servir
php artisan serve

# 6. Visitar
http://localhost:8000/nombre-modelos

Cabe decir que no crea las rutas del proyecyo y hay que agregarlas a mano y que hay una opcion para personalizar las plantillas:
php artisan vendor:publish --tag=crud

Generar el diagrama ER

Instalacion:

1- instalar el siguiente programa
sudo apt-get install graphviz

2-(IMPORTANTE) Ejecutar el siguiente comando dentro del proyecto para instalar la extension por composer:
composer require beyondcode/laravel-er-diagram-generator --dev

3-Dentro del proyecto ejecutar el siguiente comando para generar el graph.png el cual sera el diagrama modelo entidad relacion:
php artisan generate:erd

Generar Migrations
1️⃣ kitloong/laravel-migrations-generator (recomendado)


Genera solo migraciones a partir de una base de datos existente.
_____________________________
Compatible con Laravel 10+.

Detecta:

Columnas y tipos

Índices (unique, index)

Foreign keys

Tablas pivote
______________________________
1.
Instalación
composer require --dev kitloong/laravel-migrations-generator
______________________________
2.
Uso básico
php artisan migrate:generate


Esto genera todas las migraciones de tu DB en database/migrations/.
______________________________
OPCIONAL
Opcional: solo algunas tablas:

php artisan migrate:generate users,posts,comments


Ignorar tablas:

php artisan migrate:generate --ignore-tables=migrations,failed_jobs
tapiceria-odami/
├── app/
│   ├── Console/
│   │   └── Commands/
│   │       ├── BackupAutomatico.php
│   │       ├── ComprimirFotosAntiguas.php
│   │       ├── VerificarEspacioDisco.php
│   │       └── LimpiarRespaldosAntiguos.php
│   ├── Exceptions/
│   │   ├── BackupException.php
│   │   ├── FacturacionException.php
│   │   └── FotoException.php
│   ├── Http/
│   │   ├── Controllers/
│   │   │   ├── Auth/
│   │   │   │   ├── LoginController.php
│   │   │   │   ├── RegisterController.php
│   │   │   │   └── ProfileController.php
│   │   │   ├── Admin/
│   │   │   │   ├── DashboardController.php
│   │   │   │   ├── UserController.php
│   │   │   │   └── SystemController.php
│   │   │   ├── BackupController.php
│   │   │   ├── ClienteController.php
│   │   │   ├── FacturaController.php
│   │   │   ├── FotoTrabajoController.php
│   │   │   ├── MaterialController.php
│   │   │   ├── PagoController.php
│   │   │   ├── ReporteController.php
│   │   │   ├── TrabajoController.php
│   │   │   └── ClausulaController.php
│   │   ├── Middleware/
│   │   │   ├── CheckRole.php
│   │   │   ├── CheckFacturaStatus.php
│   │   │   └── LogBackupActivity.php
│   │   └── Requests/
│   │       ├── ClienteRequest.php
│   │       ├── TrabajoRequest.php
│   │       ├── FacturaRequest.php
│   │       ├── FotoTrabajoRequest.php
│   │       ├── PagoRequest.php
│   │       ├── MaterialRequest.php
│   │       └── BackupRequest.php
│   ├── Models/
│   │   ├── User.php
│   │   ├── Role.php
│   │   ├── BackupLog.php
│   │   ├── Cliente.php
│   │   ├── ControlFactura.php
│   │   ├── Factura.php
│   │   ├── FotoTrabajo.php
│   │   ├── Trabajo.php
│   │   ├── Material.php
│   │   ├── Clausula.php
│   │   ├── Pago.php
│   │   └── Configuracion.php
│   ├── Services/
│   │   ├── BackupService.php
│   │   ├── FacturacionService.php
│   │   ├── FotoService.php
│   │   ├── ReporteService.php
│   │   ├── EstadisticaService.php
│   │   ├── PagoService.php
│   │   ├── CompresionService.php
│   │   └── EspacioDiscoService.php
│   ├── Traits/
│   │   ├── GeneraNumeroFactura.php
│   │   ├── ManejaFotos.php
│   │   ├── CalculaCostos.php
│   │   └── BackupTrait.php
│   ├── Observers/
│   │   ├── FacturaObserver.php
│   │   ├── TrabajoObserver.php
│   │   └── FotoTrabajoObserver.php
│   ├── Providers/
│   │   ├── AppServiceProvider.php
│   │   ├── AuthServiceProvider.php
│   │   └── BackupServiceProvider.php
│   └── Rules/
│       ├── NumeroFacturaUnico.php
│       ├── EspacioDiscoSuficiente.php
│       └── FormatoSerieFactura.php
├── config/
│   ├── app.php
│   ├── auth.php
│   ├── database.php
│   ├── filesystems.php
│   ├── backup.php
│   ├── facturacion.php
│   ├── roles.php
│   └── compresion.php
├── database/
│   ├── migrations/
│   │   ├── 2014_10_12_000000_create_users_table.php
│   │   ├── 2014_10_12_100000_create_password_reset_tokens_table.php
│   │   ├── 2014_10_12_200000_create_roles_table.php
│   │   ├── 2014_10_12_300000_create_role_user_table.php
│   │   ├── 2024_01_01_000000_create_clientes_table.php
│   │   ├── 2024_01_01_000001_create_trabajos_table.php
│   │   ├── 2024_01_01_000002_create_materiales_table.php
│   │   ├── 2024_01_01_000003_create_facturas_table.php
│   │   ├── 2024_01_01_000004_create_clausulas_table.php
│   │   ├── 2024_01_01_000005_create_fotos_trabajos_table.php
│   │   ├── 2024_01_01_000006_create_backup_logs_table.php
│   │   ├── 2024_01_01_000007_create_control_facturas_table.php
│   │   ├── 2024_01_01_000008_create_pagos_table.php
│   │   ├── 2024_01_01_000009_create_configuraciones_table.php
│   │   └── 2024_01_01_000010_create_trabajo_material_table.php
│   ├── seeders/
│   │   ├── DatabaseSeeder.php
│   │   ├── RolesSeeder.php
│   │   ├── UsersSeeder.php
│   │   ├── ClientesSeeder.php
│   │   ├── TrabajosSeeder.php
│   │   ├── MaterialesSeeder.php
│   │   ├── FacturasSeeder.php
│   │   ├── FotosTrabajosSeeder.php
│   │   ├── ClausulasSeeder.php
│   │   ├── PagosSeeder.php
│   │   └── ConfiguracionesSeeder.php
│   └── factories/
│       ├── UserFactory.php
│       ├── ClienteFactory.php
│       ├── TrabajoFactory.php
│       ├── FacturaFactory.php
│       └── FotoTrabajoFactory.php
├── resources/
│   ├── views/
│   │   ├── layouts/
│   │   │   ├── app.blade.php
│   │   │   ├── auth.blade.php
│   │   │   └── admin.blade.php
│   │   ├── auth/
│   │   │   ├── login.blade.php
│   │   │   ├── register.blade.php
│   │   │   └── verify.blade.php
│   │   ├── admin/
│   │   │   ├── dashboard.blade.php
│   │   │   ├── users/
│   │   │   │   ├── index.blade.php
│   │   │   │   ├── create.blade.php
│   │   │   │   ├── edit.blade.php
│   │   │   │   └── show.blade.php
│   │   │   └── system/
│   │   │       ├── configuracion.blade.php
│   │   │       └── estadisticas.blade.php
│   │   ├── clientes/
│   │   │   ├── index.blade.php
│   │   │   ├── create.blade.php
│   │   │   ├── edit.blade.php
│   │   │   ├── show.blade.php
│   │   │   └── partials/
│   │   │       ├── search.blade.php
│   │   │       └── filtros.blade.php
│   │   ├── trabajos/
│   │   │   ├── index.blade.php
│   │   │   ├── create.blade.php
│   │   │   ├── edit.blade.php
│   │   │   ├── show.blade.php
│   │   │   └── tipos/
│   │   │       ├── silla.blade.php
│   │   │       ├── sofa.blade.php
│   │   │       └── personalizado.blade.php
│   │   ├── facturas/
│   │   │   ├── index.blade.php
│   │   │   ├── create.blade.php
│   │   │   ├── edit.blade.php
│   │   │   ├── show.blade.php
│   │   │   ├── pdf/
│   │   │   │   └── factura.blade.php
│   │   │   └── series/
│   │   │       ├── serie-a.blade.php
│   │   │       ├── serie-b.blade.php
│   │   │       └── serie-c.blade.php
│   │   ├── pagos/
│   │   │   ├── index.blade.php
│   │   │   ├── create.blade.php
│   │   │   ├── edit.blade.php
│   │   │   └── show.blade.php
│   │   ├── fotos/
│   │   │   ├── index.blade.php
│   │   │   ├── create.blade.php
│   │   │   ├── show.blade.php
│   │   │   └── galeria.blade.php
│   │   ├── materiales/
│   │   │   ├── index.blade.php
│   │   │   ├── create.blade.php
│   │   │   ├── edit.blade.php
│   │   │   └── show.blade.php
│   │   ├── clausulas/
│   │   │   ├── index.blade.php
│   │   │   ├── create.blade.php
│   │   │   ├── edit.blade.php
│   │   │   └── show.blade.php
│   │   ├── backups/
│   │   │   ├── index.blade.php
│   │   │   ├── logs.blade.php
│   │   │   └── crear.blade.php
│   │   ├── reportes/
│   │   │   ├── facturacion.blade.php
│   │   │   ├── trabajos.blade.php
│   │   │   ├── pagos.blade.php
│   │   │   └── clientes.blade.php
│   │   └── components/
│   │       ├── alertas.blade.php
│   │       ├── sidebar.blade.php
│   │       ├── navbar.blade.php
│   │       ├── buscador.blade.php
│   │       ├── filtros.blade.php
│   │       └── paginacion.blade.php
│   ├── js/
│   │   ├── app.js
│   │   ├── dashboard.js
│   │   ├── facturacion.js
│   │   ├── fotos.js
│   │   ├── buscador.js
│   │   └── componentes/
│   │       ├── Modal.js
│   │       ├── UploadFotos.js
│   │       └── CalculadoraCostos.js
│   ├── css/
│   │   ├── app.css
│   │   ├── dashboard.css
│   │   ├── facturas.css
│   │   ├── galeria.css
│   │   └── responsive.css
│   └── lang/
│       └── es/
│           ├── auth.php
│           ├── pagination.php
│           ├── passwords.php
│           ├── validation.php
│           └── messages.php
├── routes/
│   ├── web.php
│   ├── api.php
│   ├── auth.php
│   ├── admin.php
│   └── console.php
├── storage/
│   ├── app/
│   │   ├── backups/
│   │   │   ├── automaticos/
│   │   │   ├── manuales/
│   │   │   └── logs/
│   │   ├── fotos/
│   │   │   ├── originales/
│   │   │   ├── comprimidas/
│   │   │   ├── miniaturas/
│   │   │   └── temporales/
│   │   ├── facturas/
│   │   │   └── pdf/
│   │   └── public/
│   │       ├── documentos/
│   │       └── reportes/
│   ├── framework/
│   └── logs/
├── public/
│   ├── index.php
│   ├── .htaccess
│   ├── css/
│   ├── js/
│   ├── images/
│   └── storage -> ../storage/app/public
├── tests/
│   ├── Unit/
│   │   ├── Models/
│   │   ├── Services/
│   │   └── Traits/
│   ├── Feature/
│   │   ├── Auth/
│   │   ├── Clientes/
│   │   ├── Trabajos/
│   │   ├── Facturas/
│   │   ├── Fotos/
│   │   └── Backups/
│   └── TestCase.php
├── app/
│   └── Console/
│       └── Kernel.php
├── config/
├── database/
├── resources/
├── routes/
├── storage/
├── tests/
├── vendor/
├── .env
├── .env.example
├── composer.json
├── package.json
├── artisan
└── README.md

Características Organizadas en Orden Lógico Ascendente
1. Infraestructura Base del Sistema
✅ Sistema de autenticación con roles admin, tapicero, cliente
✅ Interfaz moderna, responsive y amigable con colores y iconos alucivos a tapiceria
✅ Dashboard con estadísticas

2. Gestión Central de Datos
✅ Directorio completo de clientes con buscador
✅ Gestión completa de clientes con buscador
✅ Búsqueda y filtros avanzados

3. Núcleo del Negocio - Trabajos
✅ Sistema completo de gestión de trabajos
✅ Sistema de trabajos con múltiples tipos
✅ Gestión de materiales y costos
✅ Cláusulas y términos legales

4. Documentación Visual
✅ Sistema completo de fotos (antes, durante, después)
✅ Gestión de fotos de trabajos
✅ Sistema completo de gestión de fotos
✅ Subida múltiple de fotos con compresión
✅ Miniaturas automáticas
✅ Marcar fotos como principales

5. Sistema Financiero
✅ Sistema completo de pagos
✅ Sistema de facturación completo
✅ Sistema de facturación
✅ Sistema de facturación con números únicos y correlativos
✅ Control automático de numeración
✅ Múltiples series de facturación (A, B, C)
✅ Múltiples facturas por cliente
✅ Gestión de estados de factura
✅ Historial de facturas por cliente
✅ Cancelación de facturas

6. Análisis y Reportes
✅ Reportes de facturación
✅ Estadísticas y reportes
✅ Estadísticas de uso de espacio

7. Optimización y Mantenimiento
✅ Compresión automática de fotos antiguas
✅ Verificación de espacio en disco

8. Seguridad y Respaldo
✅ Respaldos en seeders con facil importación/exportación
✅ Respaldos también en archivo físico en ruta específica
✅ Respaldos programados
✅ Logs de respaldos y restauraciones
✅ Logs detallados de respaldos
✅ Limpieza automática de respaldos antiguos

armado: 

Plan de Desarrollo Paso a Paso - Sistema de Tapicería Odami
Te proporcionaré un orden lógico para desarrollar el proyecto, dividido en fases manejables:

FASE 1: INFRAESTRUCTURA BASE (Semana 1)
Paso 1: Configuración Inicial
1. Configurar .env y conexión a base de datos
2. Instalar dependencias: composer install, npm install
3. Configurar archivos básicos de configuración
   - config/app.php
   - config/auth.php
   - config/database.php
   - config/filesystems.php
Paso 2: Sistema de Autenticación y Roles

4. Crear migración de roles (2014_10_12_200000_create_roles_table.php)
5. Crear migración role_user (2014_10_12_300000_create_role_user_table.php)
6. Crear modelos: Role.php y User.php
7. Crear seeder: RolesSeeder.php (admin, tapicero, cliente)
8. Crear seeder: UsersSeeder.php
9. Configurar AuthServiceProvider.php con Gates/Policies
10. Crear middleware: CheckRole.php
11. Configurar rutas de autenticación: routes/auth.php
Paso 3: Layouts y Vistas Base

12. Crear layouts:
    - resources/views/layouts/app.blade.php
    - resources/views/layouts/admin.blade.php
    - resources/views/layouts/auth.blade.php
13. Crear componentes comunes:
    - resources/views/components/sidebar.blade.php
    - resources/views/components/navbar.blade.php
    - resources/views/components/alertas.blade.php
FASE 2: GESTIÓN DE DATOS BÁSICOS (Semana 2)
Paso 4: Sistema de Clientes

14. Crear migración de clientes (2024_01_01_000000_create_clientes_table.php)
15. Crear modelo: Cliente.php
16. Crear request: ClienteRequest.php
17. Crear controlador: ClienteController.php
18. Crear vistas clientes (index, create, edit, show)
19. Crear factory: ClienteFactory.php
20. Crear seeder: ClientesSeeder.php
Paso 5: Sistema de Materiales

21. Crear migración de materiales (2024_01_01_000002_create_materiales_table.php)
22. Crear modelo: Material.php
23. Crear request: MaterialRequest.php
24. Crear controlador: MaterialController.php
25. Crear vistas materiales
26. Crear seeder: MaterialesSeeder.php
FASE 3: NÚCLEO DEL NEGOCIO (Semana 3)
Paso 6: Sistema de Trabajos

27. Crear migración trabajos (2024_01_01_000001_create_trabajos_table.php)
28. Crear migración trabajo_material (tabla pivote)
29. Crear modelo: Trabajo.php (con relaciones)
30. Crear request: TrabajoRequest.php
31. Crear controlador: TrabajoController.php
32. Crear trait: CalculaCostos.php
33. Crear vistas trabajos
34. Crear vistas de tipos específicos (silla, sofa, personalizado)
35. Crear observer: TrabajoObserver.php
Paso 7: Sistema de Fotos

36. Crear migración fotos_trabajos (2024_01_01_000005_create_fotos_trabajos_table.php)
37. Crear modelo: FotoTrabajo.php
38. Crear request: FotoTrabajoRequest.php
39. Crear controlador: FotoTrabajoController.php
40. Crear trait: ManejaFotos.php
41. Crear servicio: FotoService.php
42. Crear vistas fotos
43. Configurar almacenamiento de fotos
FASE 4: SISTEMA FINANCIERO (Semana 4)
Paso 8: Sistema de Facturación

44. Crear migración facturas (2024_01_01_000003_create_facturas_table.php)
45. Crear migración control_facturas (2024_01_01_000007_create_control_facturas_table.php)
46. Crear modelo: Factura.php
47. Crear modelo: ControlFactura.php
48. Crear request: FacturaRequest.php
49. Crear controlador: FacturaController.php
50. Crear trait: GeneraNumeroFactura.php
51. Crear reglas: NumeroFacturaUnico.php, FormatoSerieFactura.php
52. Crear servicio: FacturacionService.php
53. Crear vistas facturas
54. Crear vistas series (serie-a, serie-b, serie-c)
55. Crear plantilla PDF
Paso 9: Sistema de Pagos

56. Crear migración pagos (2024_01_01_000008_create_pagos_table.php)
57. Crear modelo: Pago.php
58. Crear request: PagoRequest.php
59. Crear controlador: PagoController.php
60. Crear servicio: PagoService.php
61. Crear vistas pagos
Paso 10: Cláusulas Legales

62. Crear migración clausulas (2024_01_01_000004_create_clausulas_table.php)
63. Crear modelo: Clausula.php
64. Crear controlador: ClausulaController.php
65. Crear vistas clausulas
FASE 5: ADMINISTRACIÓN Y REPORTES (Semana 5)
Paso 11: Dashboard y Estadísticas

66. Crear controlador: DashboardController.php
67. Crear servicio: EstadisticaService.php
68. Crear vista dashboard.blade.php
69. Crear JS dashboard.js
70. Crear CSS dashboard.css
Paso 12: Sistema de Reportes
text
71. Crear controlador: ReporteController.php
72. Crear servicio: ReporteService.php
73. Crear vistas reportes
74. Configurar gráficos y estadísticas
Paso 13: Gestión de Usuarios

75. Crear controlador: UserController.php (en Admin)
76. Crear vistas de usuarios
77. Configurar permisos y roles
FASE 6: SEGURIDAD Y RESPALDOS (Semana 6)
Paso 14: Sistema de Backups

78. Crear migración backup_logs (2024_01_01_000006_create_backup_logs_table.php)
79. Crear modelo: BackupLog.php
80. Crear controlador: BackupController.php
81. Crear servicio: BackupService.php
82. Crear trait: BackupTrait.php
83. Crear middleware: LogBackupActivity.php
84. Crear vistas backups
85. Configurar archivo: config/backup.php
Paso 15: Comandos Programados

86. Crear comando: BackupAutomatico.php
87. Crear comando: ComprimirFotosAntiguas.php
88. Crear comando: VerificarEspacioDisco.php
89. Crear comando: LimpiarRespaldosAntiguos.php
90. Configurar Kernel.php para programar tareas
FASE 7: OPTIMIZACIÓN Y SERVICIOS (Semana 7)
Paso 16: Servicios Avanzados

91. Crear servicio: CompresionService.php
92. Crear servicio: EspacioDiscoService.php
93. Crear excepciones personalizadas
94. Crear observers adicionales
95. Crear reglas personalizadas
Paso 17: Configuración del Sistema

96. Crear migración configuraciones (2024_01_01_000009_create_configuraciones_table.php)
97. Crear modelo: Configuracion.php
98. Crear seeder: ConfiguracionesSeeder.php
99. Crear controlador: SystemController.php
100. Crear vista de configuración
FASE 8: PRUEBAS Y DEPURACIÓN (Semana 8)
Paso 18: Testing

101. Crear tests unitarios para modelos
102. Crear tests de feature para módulos principales
103. Crear tests para servicios
104. Configurar entorno de testing
Paso 19: Optimización Final

105. Optimizar consultas de base de datos
106. Implementar caché donde sea necesario
107. Optimizar assets (CSS/JS)
108. Configurar .htaccess y optimizaciones
109. Crear documentación básica
RECOMENDACIONES DE DESARROLLO:
Orden Priorizado por Dependencias:
Primero: Modelos y Migraciones (base de datos)

Segundo: Controladores y Lógica de Negocio

Tercero: Vistas y Frontend

Cuarto: Servicios y Funcionalidades Avanzadas

Quinto: Seguridad y Backups

Módulos que Pueden Desarrollarse en Paralelo:
Autenticación + Roles

Clientes + Materiales

Trabajos + Fotos

Facturación + Pagos

Backups + Comandos

Archivos Críticos que Necesitan Atención Temprana:
DatabaseSeeder.php - Configurar orden de seeders

AppServiceProvider.php - Configurar bindings

Kernel.php - Programar tareas automáticas

.env - Variables de configuración

Checklist de Progreso Diario:
Migraciones creadas y probadas

Modelos con relaciones definidas

Controladores con métodos CRUD

Vistas básicas funcionando

Validaciones implementadas

Permisos y roles configurados

Pruebas básicas funcionando

#include "DIPs.h"

#include "Constants.h"

#include "Image.h"



#include <string.h>

#include <stdlib.h>

#include <time.h>

#include <stdio.h>

#include <assert.h>




/* hw2 FILTERS                                  */



/* Black & White */

IMAGE *BlackNWhite(IMAGE *image) {

    assert(image);



    for (int y = 0; y < ImageHeight(image); y++) {

        for (int x = 0; x < ImageWidth(image); x++) {

            int gray = (GetPixelR(image, x, y) +

                        GetPixelG(image, x, y) +

                        GetPixelB(image, x, y)) / 3;



            SetPixelR(image, x, y, gray);
            SetPixelG(image, x, y, gray);
            SetPixelB(image, x, y, gray);

        }

    }

    return image;

}



/* Negative */

IMAGE *Negative(IMAGE *image) {

    assert(image);



    for (int y = 0; y < ImageHeight(image); y++) {

        for (int x = 0; x < ImageWidth(image); x++) {

            SetPixelR(image, x, y, MAX_PIXEL - GetPixelR(image, x, y));

            SetPixelG(image, x, y, MAX_PIXEL - GetPixelG(image, x, y));

            SetPixelB(image, x, y, MAX_PIXEL - GetPixelB(image, x, y));

        }

    }

    return image;

}



/* Color Filter */

IMAGE *ColorFilter(IMAGE *image, int target_r, int target_g, int target_b,

                    int threshold, int replace_r, int replace_g, int replace_b) {

    assert(image);



    for (int y = 0; y < ImageHeight(image); y++) {

        for (int x = 0; x < ImageWidth(image); x++) {

            if (abs(GetPixelR(image, x, y) - target_r) <= threshold &&

                abs(GetPixelG(image, x, y) - target_g) <= threshold &&

                abs(GetPixelB(image, x, y) - target_b) <= threshold) {



                SetPixelR(image, x, y, replace_r);
                SetPixelG(image, x, y, replace_g);
                SetPixelB(image, x, y, replace_b);

            }

        }

    }

    return image;

}



/* Edge Detection */

IMAGE *Edge(IMAGE *image) {

    assert(image);



    int width = ImageWidth(image);

    int height = ImageHeight(image);



    IMAGE *tmp = CopyImage(image);

    assert(tmp);



    for (int y = 1; y < height - 1; y++) {

        for (int x = 1; x < width - 1; x++) {



            int sumR = 8 * GetPixelR(tmp, x, y)

                - GetPixelR(tmp, x-1, y-1) - GetPixelR(tmp, x, y-1) - GetPixelR(tmp, x+1, y-1)

                - GetPixelR(tmp, x-1, y)   - GetPixelR(tmp, x+1, y)

                - GetPixelR(tmp, x-1, y+1) - GetPixelR(tmp, x, y+1) - GetPixelR(tmp, x+1, y+1);



            int sumG = 8 * GetPixelG(tmp, x, y)

                - GetPixelG(tmp, x-1, y-1) - GetPixelG(tmp, x, y-1) - GetPixelG(tmp, x+1, y-1)

                - GetPixelG(tmp, x-1, y)   - GetPixelG(tmp, x+1, y)

                - GetPixelG(tmp, x-1, y+1) - GetPixelG(tmp, x, y+1) - GetPixelG(tmp, x+1, y+1);



            int sumB = 8 * GetPixelB(tmp, x, y)

                - GetPixelB(tmp, x-1, y-1) - GetPixelB(tmp, x, y-1) - GetPixelB(tmp, x+1, y-1)

                - GetPixelB(tmp, x-1, y)   - GetPixelB(tmp, x+1, y)

                - GetPixelB(tmp, x-1, y+1) - GetPixelB(tmp, x, y+1) - GetPixelB(tmp, x+1, y+1);



            sumR = (sumR > 255) ? 255 : (sumR < 0 ? 0 : sumR);

            sumG = (sumG > 255) ? 255 : (sumG < 0 ? 0 : sumG);

            sumB = (sumB > 255) ? 255 : (sumB < 0 ? 0 : sumB);



            SetPixelR(image, x, y, sumR);
            SetPixelG(image, x, y, sumG);
            SetPixelB(image, x, y, sumB);

        }

    }



    DeleteImage(tmp);

    return image;

}



/* Vertical Mirror */

IMAGE *VMirror(IMAGE *image) {

    assert(image);



    int height = ImageHeight(image);



    for (int y = 0; y < height / 2; y++) {

        for (int x = 0; x < ImageWidth(image); x++) {

            int yy = height - 1 - y;



            unsigned char r = GetPixelR(image, x, y);

            unsigned char g = GetPixelG(image, x, y);

            unsigned char b = GetPixelB(image, x, y);



            SetPixelR(image, x, y, GetPixelR(image, x, yy));

            SetPixelG(image, x, y, GetPixelG(image, x, yy));

            SetPixelB(image, x, y, GetPixelB(image, x, yy));



            SetPixelR(image, x, yy, r);
            SetPixelG(image, x, yy, g);
            SetPixelB(image, x, yy, b);

        }

    }

    return image;

}




/* PART 2: ASSIGNMENT 3  */



/* Shuffle */

IMAGE *Shuffle(IMAGE *image) {

    assert(image);



    int width = ImageWidth(image);

    int height = ImageHeight(image);

    int block_width = width / SHUFF_WIDTH_DIV;

    int block_height = height / SHUFF_HEIGHT_DIV;



    srand(time(NULL));



    for (int i = 0; i < SHUFF_NUM; i++) {

        int block1 = rand() % (SHUFF_WIDTH_DIV * SHUFF_HEIGHT_DIV);

        int block2 = rand() % (SHUFF_WIDTH_DIV * SHUFF_HEIGHT_DIV);



        int x1 = (block1 % SHUFF_WIDTH_DIV) * block_width;

        int y1 = (block1 / SHUFF_WIDTH_DIV) * block_height;



        int x2 = (block2 % SHUFF_WIDTH_DIV) * block_width;

        int y2 = (block2 / SHUFF_WIDTH_DIV) * block_height;



        for (int y = 0; y < block_height; y++) {

            for (int x = 0; x < block_width; x++) {

                unsigned char r = GetPixelR(image, x1 + x, y1 + y);

                unsigned char g = GetPixelG(image, x1 + x, y1 + y);

                unsigned char b = GetPixelB(image, x1 + x, y1 + y);



                SetPixelR(image, x1 + x, y1 + y, GetPixelR(image, x2 + x, y2 + y));

                SetPixelG(image, x1 + x, y1 + y, GetPixelG(image, x2 + x, y2 + y));

                SetPixelB(image, x1 + x, y1 + y, GetPixelB(image, x2 + x, y2 + y));



                SetPixelR(image, x2 + x, y2 + y, r);
                SetPixelG(image, x2 + x, y2 + y, g);
                SetPixelB(image, x2 + x, y2 + y, b);

            }

        }

    }



    return image;

}



/* Add Border */

IMAGE *AddBorder(IMAGE *image, char color[SLEN], int border_width) {

    assert(image);



    int r = 0, g = 0, b = 0;



    if (strcmp(color, "black") == 0)       { r = g = b = 0;   }

    else if (strcmp(color, "white") == 0)  { r = g = b = 255; }

    else if (strcmp(color, "red") == 0)    { r = 255; g = 0;   b = 0;   }

    else if (strcmp(color, "green") == 0)  { r = 0;   g = 255; b = 0;   }

    else if (strcmp(color, "blue") == 0)   { r = 0;   g = 0;   b = 255; }

    else if (strcmp(color, "yellow") == 0) { r = 255; g = 255; b = 0;   }

    else if (strcmp(color, "cyan") == 0)   { r = 0;   g = 255; b = 255; }

    else if (strcmp(color, "pink") == 0)   { r = 255; g = 0;   b = 255; }



    for (int y = 0; y < ImageHeight(image); y++) {

        for (int x = 0; x < ImageWidth(image); x++) {

            if (x < border_width || x >= ImageWidth(image) - border_width ||

                y < border_width || y >= ImageHeight(image) - border_width) {

                SetPixelR(image, x, y, r);
                SetPixelG(image, x, y, g);
                SetPixelB(image, x, y, b);

            }

        }

    }



    return image;

}
#include "Image.h"
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>

/* Function to create a new image */
Image *NewImage(unsigned int Width, unsigned int Height) {
    // Allocate memory for the main Image struct
    Image *image = malloc(sizeof(Image));
    
    // Check if malloc worked
    if (image == NULL) {
        return NULL;
    }

    // Set the width and height
    image->W = Width;
    image->H = Height;

    // Allocate memory for Red, Green, and Blue arrays
    // Each one needs Width * Height amount of space
    image->R = malloc(sizeof(unsigned char) * Width * Height);
    image->G = malloc(sizeof(unsigned char) * Width * Height);
    image->B = malloc(sizeof(unsigned char) * Width * Height);

    // If any of the color arrays failed, we need to clean up and exit
    if (image->R == NULL || image->G == NULL || image->B == NULL) {
        DeleteImage(image);
        return NULL;
    }

    return image;
}

/* Function to free all the memory we used */
void DeleteImage(Image *image) {
    // Make sure the image actually exists before freeing
    if (image != NULL) {
        // Free the color arrays first
        if (image->R != NULL) {
            free(image->R);
        }
        if (image->G != NULL) {
            free(image->G);
        }
        if (image->B != NULL) {
            free(image->B);
        }

        // Set pointers to NULL so we don't use them by accident
        // (This is required for the assignment)
        image->R = NULL;
        image->G = NULL;
        image->B = NULL;

        // Finally free the image struct itself
        free(image);
    }
}

/* Get and Set functions for RED */
unsigned char GetPixelR(const Image *image, unsigned int x, unsigned int y) {
    assert(image != NULL);
    assert(x < image->W);
    assert(y < image->H);
    // Formula for 1D index: x + (y * Width)
    int index = x + (y * image->W);
    return image->R[index];
}

void SetPixelR(Image *image, unsigned int x, unsigned int y, unsigned char r) {
    assert(image != NULL);
    assert(x < image->W);
    assert(y < image->H);
    int index = x + (y * image->W);
    image->R[index] = r;
}

/* Get and Set functions for GREEN */
unsigned char GetPixelG(const Image *image, unsigned int x, unsigned int y) {
    assert(image != NULL);
    assert(x < image->W);
    assert(y < image->H);
    int index = x + (y * image->W);
    return image->G[index];
}

void SetPixelG(Image *image, unsigned int x, unsigned int y, unsigned char g) {
    assert(image != NULL);
    assert(x < image->W);
    assert(y < image->H);
    int index = x + (y * image->W);
    image->G[index] = g;
}

/* Get and Set functions for BLUE */
unsigned char GetPixelB(const Image *image, unsigned int x, unsigned int y) {
    assert(image != NULL);
    assert(x < image->W);
    assert(y < image->H);
    int index = x + (y * image->W);
    return image->B[index];
}

void SetPixelB(Image *image, unsigned int x, unsigned int y, unsigned char b) {
    assert(image != NULL);
    assert(x < image->W);
    assert(y < image->H);
    int index = x + (y * image->W);
    image->B[index] = b;
}

/* Functions to get Width and Height */
unsigned int ImageWidth(const Image *image) {
    assert(image != NULL);
    return image->W;
}

unsigned int ImageHeight(const Image *image) {
    assert(image != NULL);
    return image->H;
}
.grid {
  columns: 18rem;
  gap: 1rem;
  counter-reset: grid;
}

.item + .item {
  margin-top: 1rem;
}

.item {
  break-inside: avoid;
  aspect-ratio: 4 / 3;
  background: pink;
  padding: 1rem;
  border-radius: 0.75rem;
}

.item::before {
  counter-increment: grid;
  content: counter(grid);
}

.item:nth-child(3n) {
  aspect-ratio: 1;
  background: lavender;
}

.item:nth-child(3n - 1) {
  aspect-ratio: 2 / 3;
  background: lightblue;
}
Looking to build a scalable app like Amazon? 75way Technologies delivers performance-driven Amazon Clone app development services, built on a secure architecture, with an intuitive UX, and advanced vendor management. Our solution is optimized for startups and enterprises targeting global growth.  Partner with 75way Technologies for your next Amazon Clone app.
import readline from 'readline'
function input(question){
  return new Promise((resolve) => {
    const rl = readline.createInterface({
      input: process.stdin,
      output: process.stdout
    })
    rl.question(question, (ans) => {
      rl.close();
      resolve(ans)
    })
  })
}

const name = await input("what's the name? ")
console.log("Hello: "+name)
Enhance any space with advanced Active LED wall panels in India, designed for brilliant clarity, high brightness, and immersive visual impact.
-- RISK339 : oc220_p2p_collect_decline
-- DROP TABLE team_kingkong.tpap_risk339_breaches; 

CREATE TABLE team_kingkong.tpap_risk339_breaches AS 
-- INSERT INTO team_kingkong.tpap_risk339_breaches
SELECT txnid
, regexp_replace(cast(json_extract(request, '$.evaluationType') as varchar), '"', '') AS upi_subtype
, regexp_replace(cast(json_extract(request, '$.requestPayload.payeeType') AS varchar),'"','') AS payee_type
, json_extract_scalar(request, '$.requestPayload.txnType') as txnType
, CAST(json_extract_scalar(request, '$.requestPayload.amount') AS DOUBLE) as txn_amt 
, dl_last_updated as txn_date 
, createdon as txn_time
, 'oc220_p2p_collect_decline' as rule_name
, 'payee_type = PERSON & txnType = COLLECT' as breach_reason
FROM tpap_hss.upi_switchv2_dwh_risk_data_snapshot_v3
WHERE DATE(dl_last_updated) = DATE(CURRENT_DATE - INTERVAL '1' DAY)
AND json_extract_scalar(response, '$.action_recommended') <> 'BLOCK'
AND regexp_replace(cast(json_extract(request, '$.requestPayload.payeeType') AS varchar),'"','') = 'PERSON'
AND regexp_replace(cast(json_extract(request, '$.evaluationType') as varchar), '"', '') = 'UPI_TRANSACTION'
AND json_extract_scalar(request, '$.requestPayload.txnType') = 'COLLECT'
-- RISK334 : oc56_uod_p2p_restrict_check
-- DROP TABLE team_kingkong.tpap_risk334_breaches
CREATE TABLE team_kingkong.tpap_risk334_breaches AS
-- INSERT INTO team_kingkong.tpap_risk334_breaches
SELECT A.txn_id, A.scope_cust_id, A.payer_vpa, A.payee_vpa, A.txn_date, A.txn_amount, A.txn_time, A.payer_account_type, C.category, D.upi_subtype, D.payee_type,
'oc56_uod_p2p_restrict_check' as rule_name, 'payer_acc_type = UOD & payee_type = PERSON' as breach_reason
FROM 
    (SELECT txn_id, scope_cust_id, 
    MAX(CASE WHEN participant_type = 'PAYER' THEN account_type END) AS payer_account_type,
    MAX(CASE WHEN participant_type = 'PAYER' THEN vpa END) AS payer_vpa,
    MAX(CASE WHEN participant_type = 'PAYEE' THEN vpa END) AS payee_vpa,
    MAX(DATE(created_on)) as txn_date,
    MAX(amount) AS txn_amount,
    MAX(created_on) AS txn_time
    FROM switch.txn_participants_snapshot_v3
    WHERE DATE(dl_last_updated) BETWEEN DATE'2026-01-01' AND DATE'2026-02-10'
    AND DATE(created_on) BETWEEN DATE'2026-01-01' AND DATE'2026-02-10'
    GROUP BY 1,2)A 
inner join
    (select txn_id, category
    from switch.txn_info_snapshot_v3
    where DATE(dl_last_updated) BETWEEN DATE'2026-01-01' AND DATE'2026-02-10'
    and DATE(created_on) BETWEEN DATE'2026-01-01' AND DATE'2026-02-10'
    and upper(status) = 'SUCCESS') C
on A.txn_id = C.txn_id
INNER JOIN
    (SELECT txnid
    , regexp_replace(cast(json_extract(request, '$.evaluationType') as varchar), '"', '') AS upi_subtype
    , regexp_replace(cast(json_extract(request, '$.requestPayload.payeeType') AS varchar),'"','') AS payee_type
    FROM tpap_hss.upi_switchv2_dwh_risk_data_snapshot_v3
    WHERE DATE(dl_last_updated) BETWEEN DATE'2026-01-01' AND DATE'2026-02-10'
    AND json_extract_scalar(response, '$.action_recommended') <> 'BLOCK'
    AND regexp_replace(cast(json_extract(request, '$.requestPayload.payeeType') AS varchar),'"','') = 'PERSON'
    AND regexp_replace(cast(json_extract(request, '$.evaluationType') as varchar), '"', '') = 'UPI_TRANSACTION')D 
ON A.txn_id = D.txnid
WHERE A.payer_account_type = 'UOD'
-- RISK323 oc76c_share_pay_p2p
-- DROP TABLE team_kingkong.tpap_risk323_breaches; 

-- CREATE TABLE team_kingkong.tpap_risk323_breaches AS 
INSERT INTO team_kingkong.tpap_risk323_breaches
SELECT txnid
, regexp_replace(cast(json_extract(request, '$.evaluationType') as varchar), '"', '') AS upi_subtype
, regexp_replace(cast(json_extract(request, '$.requestPayload.payeeType') AS varchar),'"','') AS payee_type
, json_extract_scalar(request, '$.requestPayload.txnType') as txnType
, CAST(json_extract_scalar(request, '$.requestPayload.amount') AS DOUBLE) as txn_amt 
, dl_last_updated as txn_date 
, createdon as txn_time
, json_extract_scalar(request,'$.requestPayload.extendedInfo.entryPoint') AS entry_point
, 'oc76c_share_pay_p2p' as rule_name
, 'payee_type = PERSON & entryPoint = upi_qr_scan_gallery_p2p and amt > 2k' as breach_reason
FROM tpap_hss.upi_switchv2_dwh_risk_data_snapshot_v3
WHERE DATE(dl_last_updated) BETWEEN DATE'2026-01-01' AND DATE'2026-01-31'
AND json_extract_scalar(response, '$.action_recommended') <> 'BLOCK'
AND regexp_replace(cast(json_extract(request, '$.evaluationType') as varchar), '"', '') = 'UPI_TRANSACTION'
AND json_extract_scalar(request,'$.requestPayload.extendedInfo.entryPoint') = 'upi_qr_scan_gallery_p2p'
AND regexp_replace(cast(json_extract(request, '$.requestPayload.payeeType') AS varchar),'"','') = 'PERSON'
AND CAST(json_extract_scalar(request, '$.requestPayload.amount') AS DOUBLE) > 2000
-- RISK324: oc76c_share_pay_p2m
-- DROP TABLE team_kingkong.tpap_risk324_breaches ; 

-- CREATE TABLE team_kingkong.tpap_risk324_breaches AS 
INSERT INTO team_kingkong.tpap_risk324_breaches
SELECT txnid
, regexp_replace(cast(json_extract(request, '$.evaluationType') as varchar), '"', '') AS upi_subtype
, regexp_replace(cast(json_extract(request, '$.requestPayload.payeeType') AS varchar),'"','') AS payee_type
, CAST(json_extract_scalar(request, '$.requestPayload.amount') AS DOUBLE) as txn_amt 
, dl_last_updated as txn_date 
, createdon as txn_time
, json_extract_scalar(request,'$.requestPayload.extendedInfo.entryPoint') AS entry_point
, COALESCE(json_extract_scalar(request, '$.requestPayload.merchantGenre'),
    json_extract_scalar(request, '$.requestPayload.extendedInfo.merchantGenre')) AS merchant_genre
, CAST(json_extract_scalar(request, '$.requestPayload.isVerifiedMerchant') AS BOOLEAN) AS is_verified_merchant
, 'oc76c_share_pay_p2m' as rule_name
, 'payee_type = ENTITY & entryPoint = upi_qr_scan_gallery_p2p & amt>2k & mx genre = offline' as breach_reason
FROM tpap_hss.upi_switchv2_dwh_risk_data_snapshot_v3
WHERE DATE(dl_last_updated) BETWEEN DATE'2026-02-01' AND DATE'2026-02-10'
AND json_extract_scalar(response, '$.action_recommended') <> 'BLOCK'
AND regexp_replace(cast(json_extract(request, '$.evaluationType') as varchar), '"', '') = 'UPI_TRANSACTION'
AND json_extract_scalar(request,'$.requestPayload.extendedInfo.entryPoint') = 'upi_qr_scan_gallery_p2m'
AND regexp_replace(cast(json_extract(request, '$.requestPayload.payeeType') AS varchar),'"','') = 'ENTITY'
AND CAST(json_extract_scalar(request, '$.requestPayload.amount') AS DOUBLE) > 2000
AND COALESCE(json_extract_scalar(request, '$.requestPayload.merchantGenre'),
    json_extract_scalar(request, '$.requestPayload.extendedInfo.merchantGenre')) = 'OFFLINE' 
AND CAST(json_extract_scalar(request, '$.requestPayload.isVerifiedMerchant') AS BOOLEAN) = FALSE
https://developer.chrome.com/docs/extensions/samples?authuser=1
substring filter
https://developer.chrome.com/docs/extensions/samples?authuser=1#main-content
https://developer.chrome.com/
https://developer.chrome.com/docs?authuser=1
https://developer.chrome.com/docs/web-platform?authuser=1
https://developer.chrome.com/docs/capabilities?authuser=1
https://developer.chrome.com/docs/chromedriver?authuser=1
https://developer.chrome.com/docs/extensions?authuser=1
https://developer.chrome.com/docs/webstore?authuser=1
https://developer.chrome.com/docs/chromium?authuser=1
https://developer.chrome.com/docs/android?authuser=1
https://developer.chrome.com/origintrials/?authuser=1
https://developer.chrome.com/release-notes?authuser=1
https://developer.chrome.com/docs/devtools?authuser=1
https://developer.chrome.com/docs/lighthouse?authuser=1
https://developer.chrome.com/docs/crux?authuser=1
https://developer.chrome.com/docs/accessibility?authuser=1
https://developer.chrome.com/docs/workbox?authuser=1
https://developer.chrome.com/docs/puppeteer?authuser=1
https://developer.chrome.com/docs/ai?authuser=1
https://developer.chrome.com/docs/performance?authuser=1
https://developer.chrome.com/docs/css-ui?authuser=1
https://developer.chrome.com/docs/identity?authuser=1
https://developer.chrome.com/docs/payments?authuser=1
https://developer.chrome.com/docs/privacy-security?authuser=1
https://web.dev/baseline?authuser=1
https://web.dev/?authuser=1
https://pagespeed.web.dev/?authuser=1
https://developers.google.com/privacy-sandbox?authuser=1
https://developer.chrome.com/docs/iwa?authuser=1
https://developer.chrome.com/case-studies?authuser=1
https://developer.chrome.com/blog?authuser=1
https://developer.chrome.com/new?authuser=1
https://developer.chrome.com/docs/extensions/samples?authuser=1
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=de
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=es-419
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=fr
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=id
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=it
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=nl
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=pl
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=pt-br
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=vi
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=tr
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=ru
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=he
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=ar
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=fa
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=hi
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=bn
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=th
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=zh-cn
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=zh-tw
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=ja
https://developer.chrome.com/docs/extensions/samples?authuser=1&hl=ko
https://developer.chrome.com/docs/extensions/samples?authuser=1#
https://myaccount.google.com/?utm_source=OGB&amp;utm_medium=act
https://developer.chrome.com/_d/signin?continue=https%3A%2F%2Fdeveloper.chrome.com%2Fdocs%2Fextensions%2Fsamples&prompt=select_account
https://developer.chrome.com/_d/signout?continue=https%3A%2F%2Fdeveloper.chrome.com%2Fdocs%2Fextensions%2Fsamples
https://myaccount.google.com/privacypolicy
https://myaccount.google.com/termsofservice
https://developer.chrome.com/docs/extensions/get-started?authuser=1
https://developer.chrome.com/docs/extensions/develop?authuser=1
https://developer.chrome.com/docs/extensions/how-to?authuser=1
https://developer.chrome.com/docs/extensions/ai?authuser=1
https://developer.chrome.com/docs/extensions/reference?authuser=1
https://developer.chrome.com/docs/extensions/reference/api?authuser=1
https://developer.chrome.com/docs/extensions/reference/permissions-list?authuser=1
https://developer.chrome.com/docs/extensions/reference/manifest?authuser=1
https://developer.chrome.com/docs/webstore/prepare?authuser=1
https://developer.chrome.com/docs/webstore/publish?authuser=1
https://developer.chrome.com/docs/webstore/program-policies?authuser=1
https://developer.chrome.com/docs
https://developer.chrome.com/docs/extensions
https://developer.chrome.com/docs/extensions/get-started
https://developer.chrome.com/docs/extensions/develop
https://developer.chrome.com/docs/extensions/how-to
https://developer.chrome.com/docs/extensions/ai
https://developer.chrome.com/docs/extensions/reference
https://developer.chrome.com/docs/extensions/samples
https://developer.chrome.com/docs/webstore
https://developer.chrome.com/case-studies
https://developer.chrome.com/blog
https://developer.chrome.com/new
https://developer.chrome.com/docs/web-platform
https://developer.chrome.com/docs/capabilities
https://developer.chrome.com/docs/chromedriver
https://developer.chrome.com/docs/chromium
https://developer.chrome.com/docs/android
https://developer.chrome.com/origintrials/
https://developer.chrome.com/release-notes
https://developer.chrome.com/docs/devtools
https://developer.chrome.com/docs/lighthouse
https://developer.chrome.com/docs/crux
https://developer.chrome.com/docs/accessibility
https://developer.chrome.com/docs/workbox
https://developer.chrome.com/docs/puppeteer
https://developer.chrome.com/docs/ai
https://developer.chrome.com/docs/performance
https://developer.chrome.com/docs/css-ui
https://developer.chrome.com/docs/identity
https://developer.chrome.com/docs/payments
https://developer.chrome.com/docs/privacy-security
https://web.dev/baseline
https://web.dev/
https://pagespeed.web.dev/
https://developers.google.com/privacy-sandbox
https://developer.chrome.com/docs/iwa
https://developer.chrome.com/docs/extensions/reference/api
https://developer.chrome.com/docs/extensions/reference/permissions-list
https://developer.chrome.com/docs/extensions/reference/manifest
https://developer.chrome.com/docs/webstore/prepare
https://developer.chrome.com/docs/webstore/publish
https://developer.chrome.com/docs/webstore/program-policies
https://developer.chrome.com/?authuser=1
https://github.com/GoogleChrome/chrome-extensions-samples
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/ai.gemini-on-device-alt-texter
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/ai.gemini-on-device-audio-scribe
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/ai.gemini-on-device-calendar-mate
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.optional_permissions
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/ai.gemini-on-device
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/ai.gemini-on-device-summarization
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/identity
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.permissions-addhostaccessrequest
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.mole-game/mole
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.mole-game/controller
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.push
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/libraries-xhr-in-sw
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/ai.gemini-in-the-cloud
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.custom-cursor
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.sidepanel-global
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.open-api-reference
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.sidepanel-multiple
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.theme
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.webgpu
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.sidepanel-dictionary
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.terminate-sw/test-extension
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/privacy
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/userScripts
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/power
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/nativeMessaging/extension
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/readingList
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/topSites/basic
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.geolocation-popup
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.wasm-helloworld-print-nomodule
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/richNotification
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/override/blank_ntp
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.offscreen-dom
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/devtools/panels
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/history/showHistory
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/reference.mv3-content-scripts
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.tabcapture-recorder
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/contextMenus/basic
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/devtools/inspectedWindow
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.google-analytics
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/omnibox/new-tab-search
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/il8n
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/printing
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.milestones
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.dnr-rule-manager
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/storage/stylizr
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/windows
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.favicon-cs
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.file_handlers
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/tabs/screenshot
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/bookmarks
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/favicon
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/idle
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.tabs-manager
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.quick-api-reference
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/declarativeNetRequest/no-cookies
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/tabs/inspector
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.geolocation-offscreen
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/fontSettings/fontSettings%20Advanced
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/tabs/pin
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.broken-color
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/alarms
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/browsingData
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.co2meter
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.bookmarks
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/debugger
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/contentSettings
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/default_command_override
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/fontSettings/fontSettings%20Basic
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.sidepanel-open
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/history/historyOverride
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/sandbox/sandbox
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/declarativeNetRequest/url-redirect
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/tabs/zoom
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/topSites/magic8ball
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/webNavigation/basic
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.geolocation-contentscript
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.catifier
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.getting-started
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/scripting
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/contextMenus/global_context_search
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/omnibox/simple-example
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/action
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/tabCapture
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.wasm-helloworld-print
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.websockets
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/webRequest/http-auth
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.hello-world
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.offscreen-clipboard-write
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/web-accessible-resources
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/declarativeNetRequest/url-blocker
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.page-redder
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.focus-mode
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.water_alarm_notification
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.reading-time
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/sandbox/sandboxed-content
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/tutorial.focus-mode-debugging
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/cookbook.sidepanel-site-specific
https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/api-samples/cookies/cookie-clearer
https://issuetracker.google.com/issues/new?component=1400036&template=1897236
https://issuetracker.google.com/issues?q=status:open%20componentid:1400036&s=created_time:desc
https://blog.chromium.org/
https://developer.chrome.com/deprecated
https://web.dev/shows
https://twitter.com/ChromiumDev
https://www.youtube.com/user/ChromeDevelopers
https://www.linkedin.com/showcase/chrome-for-developers
https://developer.chrome.com/static/blog/feed.xml
https://policies.google.com/terms?authuser=1
https://policies.google.com/privacy?authuser=1
Color prediction games are rapidly growing online gaming platforms where players predict the outcome of randomly generated colors within a specific timeframe, and due to their simple interface, easy-to-understand mechanics, quick results, low entry barriers, and strong user retention potential, they have gained significant traction in 2026, making them highly attractive to both players and gaming entrepreneurs seeking high-ROI opportunities.

Hivelance is a trusted leader in the online gaming industry, delivering scalable and high-performance color prediction game development solutions backed by an experienced game development team, a transparent development process, customizable platform architecture, secure backend infrastructure, seamless API and blockchain integrations, end-to-end technical support.

Know More:

Visit – https://www.hivelance.com/color-prediction-game-development
WhatsApp - +918438595928
Telegram - Hivelance
Mail - sales@hivelance.com
Get Free Demo - https://www.hivelance.com/contact-us
Practice dictation here at:
https://dictationtoday.com/course/voa-special-english/education-reports
Mastering the project life cycle stages can lead to better project outcomes and improved stakeholder satisfaction. These phases guide project teams through tasks and responsibilities at each stage. A lot of people aspiring project managers choose accredited institutions for structured learning. The College of Contract Management is a leading provider of online project management training. Their courses cover lifecycle phases in depth, enhancing your capability to lead projects successfully.
// no incluye dominios de tipo

SELECT COUNT(*) cantidad, 'Tablas' tipo 
FROM RDB$RELATIONS 
WHERE RDB$SYSTEM_FLAG = 0 
AND RDB$VIEW_BLR IS NULL
UNION ALL
SELECT COUNT(*), 'Vistas'
FROM RDB$RELATIONS
WHERE RDB$VIEW_BLR IS NOT NULL
AND RDB$SYSTEM_FLAG = 0
UNION all
SELECT COUNT(*), 'Proc.Alms'
FROM RDB$PROCEDURES 
WHERE RDB$SYSTEM_FLAG = 0
UNION ALL
SELECT COUNT(*), 'Funciones'
FROM RDB$FUNCTIONS
WHERE RDB$SYSTEM_FLAG = 0
UNION ALL
SELECT COUNT(*), 'Triggers'
FROM RDB$TRIGGERS
WHERE RDB$SYSTEM_FLAG = 0;
             
1.-comprimir el proyecto a un .zip
2- copiar el .zip al servidor mediante scp
3- compiar el .env.example a .env
4-composer install si falla borrar el .lock que se crea
5-crear la base de datos vacia
6-ejecutar el php artisan migrate --seed
scp gestion_documentos29.zip sistema@172.31.8.29:/var/www/html
Building a compliant and high performance event trading platform requires more than just replicating features, it demands strong architecture, market ready strategy, and reliable execution. Beleaf Technologies specializes in developing advanced Kalshi clone scripts for startups and growing enterprises. We deliver fully customizable white label solutions equipped with high speed trading engines, real-time data integration, secure wallet systems, admin dashboards, and built in risk management tools. Our team ensures performance stability, seamless user experience, and regulatory ready infrastructure from planning to deployment. The result is a secure, scalable, and profitable  prediction market platform designed for long-term growth and operational confidence.

Get a Chance for Free Demo >> https://www.beleaftechnologies.com/kalshi-clone-script-development

Reach Us 
Whatsapp : +91 8056786622
Mail to  : business@beleaftechnologies.com 


<?php

$pdo = new PDO("firebird:dbname=localhost:/var/lib/firebird/data/marco.gdb;charset=utf-8", "sysdba", "m1d0ry!!");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, false); 

$sql = "insert into test(nombre) values ('marco') returning id";

$pdo->beginTransaction(); 
$qry = $pdo->prepare( $sql );
$qry->execute();

$returned_id = $qry->fetchColumn(); 

$pdo->commit(); 

$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, true);

print_r($returned_id);
India’s sports fans are taking their passion to the next level with Beleaf Technologies! Our innovative app makes sports betting seamless, offering real-time updates, secure transactions, and expert insights that help you place smarter bets. Beyond excitement, we focus on educating users with tips, analytics, and responsible gaming guidance to ensure every decision is informed. From cricket to football, Beleaf Technologies transforms your love for sports into thrilling action and real opportunities to win. Join thousands of bettors who are enjoying smarter, safer, and more rewarding gameplay. Experience the future of sports betting with Beleaf Technologies today!
  
Play Smart. Win Big Today With Beleaf Technologies
export function parseUrls(text: string): string[] {
  return text
    .split(/\r?\n/)
    .map((line) => line.trim())
    .filter((line) => line.length > 0);
}

export function extractUrls(text: string): string[] {
  const matches = text.match(URL_EXTRACT_REGEX);
  return matches ? [...matches] : [];
}
<Layout seo={SEO}>
  <div class="max-w-7xl mx-auto space-y-4 px-4">
    <Hero />

    <Breadcrumbs
      data={BREADCRUMBS_DATA}
      className="bg-base-200/70 rounded-lg p-4 shadow-sm"
    />

    <div class="flex flex-col md:flex-row gap-4">
      <div
        id="content"
        class="flex-1 order-1 md:order-0 bg-base-200/70 rounded-lg p-4 shadow-sm p-4 md:p-8"
      >
        <YoutubeEmbed
          className="max-w-2xl mx-auto my-16"
          id={YOUTUBE_VIDEO.id}
          title={YOUTUBE_VIDEO.title}
        />

        <WikiContent>
          <HomeMDX />
        </WikiContent>
      </div>

      <AsidePanel className="order-0 md:order-1" />
    </div>
  </div>
</Layout>
{
	"blocks": [
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": ":sunshine: :x-connect: Boost Days: What's on this week :x-connect: :sunshine:"
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "Good morning Melbourne and hope you all had a fab weekend! We have a fun packed week with our Lunar year celebrations :horse: :lunarnewyear: \n\n Please see below for what's on this week! "
			}
		},
		{
			"type": "divider"
		},
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": ":calendar-date-25: Wednesday, 25th February",
				"emoji": true
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": "\n:coffee:  :caramel-slice: *Xero Café* – A selection of Slices \n :coffee:*Barista Special* – Iced matcha Latte :tennis: \n :flag-fr: Join us at *12.00pm* for some *French lunch* in the Wominjeka Breakout Space on Level 3. Check out the:thread:"
			}
		},
		{
			"type": "header",
			"text": {
				"type": "plain_text",
				"text": ":calendar-date-26: Thursday, 26th February",
				"emoji": true
			}
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": ":coffee: *Xero Cafe*: A selection of Slices \n :coffee: *Barista Special* – Iced matcha Latte \n :Breakfast: Join us at *8.30am -10.30am* for a * Breakfast Buffet* in the Wominjeka Breakout Space in the Level 3 breakout space."
			}
		},
		{
			"type": "divider"
		},
		{
			"type": "section",
			"text": {
				"type": "mrkdwn",
				"text": " What else? :heart:  \n\nStay tuned to this channel, and make sure you’re subscribed to the <https://calendar.google.com/calendar/u/0/r?cid=Y19xczkyMjk5ZGlsODJzMjA4aGt1b3RnM2t1MEBncm91cC5jYWxlbmRhci5nb29nbGUuY29t /|*Melbourne Social Calendar*> for all upcoming events. \n\n On *Friday 27th February*, we are celebrating the Lunar New Year with our South-Asian ERG :lunarnewyear: \n\n From *4.00pm-5.30pm* in the *Wominjeka Breakout Space on Level 3*, Celebrate Lunar New Year with traditional treats, drinks, and a festive space filled with lanterns. Wear red for good luck, reconnect with colleagues across the Xero community, and take part in a lucky draw for exciting prizes :HEART: \t\t"
			}
		}
	]
}
# OPCIÓN 1 (RECOMENDADA) - pipx
sudo apt install pipx -y
pipx ensurepath
source ~/.bashrc
pipx install ania
ania

opcion 2
# Instalar python3-venv si no lo tienes
sudo apt install python3-venv python3-full -y

# Crear un directorio para entornos virtuales (opcional)
mkdir -p ~/venvs

# Crear un entorno virtual para ania
python3 -m venv ~/venvs/ania-env

# Activar el entorno virtual
source ~/venvs/ania-env/bin/activate

# Ahora sí, instalar ania (ya dentro del entorno virtual)
pip install ania

# Ejecutar ania
ania

# Cuando termines, puedes salir del entorno con:
deactivate

ania --source animeflv

matar un proceso si se queda pegado un proceso en la terminal
ss -tulnp | grep :5666

kill -9 PID
nvesting in real estate is now simpler and more accessible than ever. Our real estate tokenization services help investors, entrepreneurs, and business owners invest in property through secure digital tokens. This means you can own a share of high-value properties without needing large amounts of capital.
With blockchain technology, every transaction is transparent, safe, and easy to track. You gain better liquidity, reduced risk, and more flexible investment options. Whether you want to grow your wealth or expand your business portfolio, our trusted solutions help you invest smartly and confidently in India’s evolving real estate market.
Tap here to Demo >> 

https://www.beleaftechnologies.com/real-estate-tokenization
Contact Us
Whatsapp :  +91 8056786622
Mail to :  business@beleaftechnologies.com
Message to : https://telegram.me/BeleafSoftTech
Blockchain is often discussed in broad terms, but its real value shows up in specific operational problems. When multiple parties need to share data but don’t fully trust one another, traditional centralized systems can create bottlenecks, disputes, or reconciliation delays. Blockchain changes that by creating a shared ledger where transactions are recorded once, verified collectively, and cannot be altered retroactively without consensus.
This approach is particularly useful in supply chain tracking, digital payments, asset tokenization, compliance reporting, and smart contract automation. Instead of relying on manual verification or third-party intermediaries, organizations can automate validation rules directly into the system. Every transaction is time-stamped, traceable, and independently verifiable.
However, implementing blockchain effectively requires careful technical decisions. The choice between a public, private, or consortium network impacts scalability, cost, and governance. Smart contracts must be written with precision, tested thoroughly, and audited for vulnerabilities. Integration with existing systems whether ERP platforms, payment gateways, or identity management tools must also be handled carefully to avoid performance issues.
Blockchain should not be adopted simply because it is trending. It is most effective when it solves a defined structural issue, such as reducing fraud risk, increasing transparency between stakeholders, or automating multi-party workflows.
When blockchain is applied with a clear objective and strong technical execution, it can provide durable transparency and system integrity. Working with a custom blockchain development company helps ensure the solution is architected around real business requirements rather than generic frameworks, resulting in systems that are secure, scalable, and practical in daily operations.
Read More >> https://www.softean.com/blockchain-development-company 
var value = ZDK.Page.getField("NDA_File").getValue();
if (value == "Yes") {
    ZDK.Page.getField('NDA_File_Upload').setMandatory(true);
}
import re
text = "apple banana   cherry date"
fruits = re.split(r"\s+", text) # Split by any occurrence of one or more whitespace characters
print(fruits)
star

Thu Mar 05 2026 11:12:43 GMT+0000 (Coordinated Universal Time) https://www.beleaftechnologies.com/polymarket-clone-script

@Mayajamison #crypto #blockchain #polymarketclone

star

Tue Mar 03 2026 16:09:38 GMT+0000 (Coordinated Universal Time)

@jrg_300i

star

Sat Feb 28 2026 10:33:56 GMT+0000 (Coordinated Universal Time)

@LavenPillay #jenkins #build #parameter

star

Sat Feb 28 2026 08:48:28 GMT+0000 (Coordinated Universal Time) https://www.addustechnologies.com/cryptocurrency-wallet-development-company

@corasmith #cryptowallet development #walletdevelopment services #cryptowallet development company

star

Sat Feb 28 2026 06:45:23 GMT+0000 (Coordinated Universal Time)

@kuldeep

star

Fri Feb 27 2026 11:01:46 GMT+0000 (Coordinated Universal Time) https://www.softean.com/crypto-trading-bot-development

@softean

star

Fri Feb 27 2026 04:32:07 GMT+0000 (Coordinated Universal Time) made it myself

@82michael.codes #bmi

star

Thu Feb 26 2026 19:11:21 GMT+0000 (Coordinated Universal Time)

@jrg_300i

star

Thu Feb 26 2026 19:08:42 GMT+0000 (Coordinated Universal Time)

@jrg_300i

star

Thu Feb 26 2026 14:42:26 GMT+0000 (Coordinated Universal Time) https://www.softean.com/cryptocurrency-wallet-development

@softean

star

Thu Feb 26 2026 13:43:02 GMT+0000 (Coordinated Universal Time) https://www.softean.com/cryptocurrency-exchange-development

@softean

star

Thu Feb 26 2026 10:53:04 GMT+0000 (Coordinated Universal Time) https://www.thecryptoape.com/uniswap-clone-script

@Davidbrevis

star

Wed Feb 25 2026 18:14:16 GMT+0000 (Coordinated Universal Time)

@emelyb2

star

Wed Feb 25 2026 15:40:53 GMT+0000 (Coordinated Universal Time)

@emelyb2

star

Wed Feb 25 2026 11:55:35 GMT+0000 (Coordinated Universal Time)

@marcopinero #css #html

star

Wed Feb 25 2026 11:50:38 GMT+0000 (Coordinated Universal Time) https://www.addustechnologies.com/blog/best-copy-trading-platforms

@corasmith #blockchain #copy #trading #crypto

star

Wed Feb 25 2026 08:17:51 GMT+0000 (Coordinated Universal Time) https://www.addustechnologies.com/crypto-futures-prop-trading-platform-development

@brucebanner #prop #trading #crypto

star

Tue Feb 24 2026 18:58:49 GMT+0000 (Coordinated Universal Time) https://75way.com/amazon-clone

@amazonclone #amazon #clone #app #development #usa #script

star

Tue Feb 24 2026 14:51:06 GMT+0000 (Coordinated Universal Time)

@Muhammadcodes #javascript

star

Tue Feb 24 2026 13:36:14 GMT+0000 (Coordinated Universal Time) https://www.amraskinclinic.com/services/aesthetic-dermatology-clinic-in-madurai

@jamesbritto

star

Tue Feb 24 2026 12:43:02 GMT+0000 (Coordinated Universal Time)

@vectradigi

star

Tue Feb 24 2026 12:39:23 GMT+0000 (Coordinated Universal Time) https://vectradigi.com/product/active-led-display/

@vectradigi

star

Tue Feb 24 2026 11:45:38 GMT+0000 (Coordinated Universal Time) https://www.thecryptoape.com/poloniex-clone-script

@Davidbrevis

star

Tue Feb 24 2026 11:19:49 GMT+0000 (Coordinated Universal Time) https://www.beleaftechnologies.com/polymarket-clone-script

@Mayajamison #crypto #blockchain #polymarketclone #predictionmarket

star

Tue Feb 24 2026 09:47:52 GMT+0000 (Coordinated Universal Time)

@aniket_chavan

star

Tue Feb 24 2026 05:30:09 GMT+0000 (Coordinated Universal Time)

@shubhangi.b

star

Tue Feb 24 2026 05:29:17 GMT+0000 (Coordinated Universal Time)

@shubhangi.b

star

Tue Feb 24 2026 05:28:10 GMT+0000 (Coordinated Universal Time)

@shubhangi.b

star

Tue Feb 24 2026 05:27:48 GMT+0000 (Coordinated Universal Time)

@shubhangi.b

star

Mon Feb 23 2026 19:44:03 GMT+0000 (Coordinated Universal Time)

@shookthacr3ator

star

Mon Feb 23 2026 11:02:25 GMT+0000 (Coordinated Universal Time) https://www.hivelance.com/color-prediction-game-development

@stevejohnson #colorprediction game development #buildcolor prediction game

star

Mon Feb 23 2026 10:46:42 GMT+0000 (Coordinated Universal Time) https://dictationtoday.com/course/voa-special-english/education-reports

@bonegai123

star

Mon Feb 23 2026 09:26:27 GMT+0000 (Coordinated Universal Time) https://www.uniccm.com/blog/everything-you-need-to-know-about-project-life-cycle

@nylaharper

star

Fri Feb 20 2026 19:03:45 GMT+0000 (Coordinated Universal Time)

@marcopinero #firebird #sql #php

star

Fri Feb 20 2026 18:10:31 GMT+0000 (Coordinated Universal Time)

@jrg_300i

star

Fri Feb 20 2026 18:04:39 GMT+0000 (Coordinated Universal Time)

@jrg_300i

star

Fri Feb 20 2026 13:02:16 GMT+0000 (Coordinated Universal Time) https://www.beleaftechnologies.com/kalshi-clone-script-development

@Bemiawatson #kalshiclonescript #eventtradingplatform #predictionmarketsoftware #eventbasedsoftware

star

Fri Feb 20 2026 12:59:31 GMT+0000 (Coordinated Universal Time)

@marcopinero #firebird #sql #php

star

Fri Feb 20 2026 11:05:17 GMT+0000 (Coordinated Universal Time) https://www.beleaftechnologies.com/sports-betting-app-development-company

@Michalsteve #realestatetokenizationdevelopment #realestatetokenization

star

Fri Feb 20 2026 09:49:31 GMT+0000 (Coordinated Universal Time) https://bulkurlopener.org

@SoulDee #typescript

star

Fri Feb 20 2026 09:41:44 GMT+0000 (Coordinated Universal Time) https://hamsteria.site

@SoulDee #html #css #tailwindcss

star

Fri Feb 20 2026 07:29:24 GMT+0000 (Coordinated Universal Time) https://www.thecryptoape.com/defi-development-company

@Davidbrevis

star

Thu Feb 19 2026 23:03:42 GMT+0000 (Coordinated Universal Time)

@FOHWellington

star

Thu Feb 19 2026 13:59:59 GMT+0000 (Coordinated Universal Time)

@jrg_300i

star

Thu Feb 19 2026 12:45:09 GMT+0000 (Coordinated Universal Time) https://www.beleaftechnologies.com/real-estate-tokenization

@Michalsteve #realestatetokenizationdevelopment #realestatetokenization

star

Thu Feb 19 2026 09:22:48 GMT+0000 (Coordinated Universal Time) https://www.softean.com/blockchain-development-company

@Amybonbo #blockchaindevelopmentcompany #blockchaindevelopmentservices

star

Wed Feb 18 2026 13:17:52 GMT+0000 (Coordinated Universal Time) https://www.beleaftechnologies.com/cryptocurrency-exchange-development-company

@Michalsteve #crypto #cryptoexchangedevelopment

star

Wed Feb 18 2026 10:29:41 GMT+0000 (Coordinated Universal Time)

@usman13

star

Wed Feb 18 2026 01:16:09 GMT+0000 (Coordinated Universal Time)

@komal

Save snippets that work with our extensions

Available in the Chrome Web Store Get Firefox Add-on Get VS Code extension