NodeJS + Redis

services:
  app:
    image: node:20-alpine
    working_dir: /app
    # Si usas package.json, cambia esto a: npm start
    command: sh -c "npm install && node server.js"
    environment:
      - DB_HOST=db
      - DB_USER=${DB_USER:-app_user}
      - DB_PASSWORD=${DB_PASSWORD:-secret}
      - DB_NAME=${DB_NAME:-app_db}
      - REDIS_HOST=redis
      - PORT=80
      - NODE_ENV=${NODE_ENV:-production}
    volumes:
      - app_data:/app
    depends_on:
      - db
      - redis

  db:
    image: mari

Gunicorn + Redis

services:
  app:
    image: python:3.11-slim
    working_dir: /app
    # Instala dependencias y lanza Gunicorn en el puerto 80 con 4 workers
    command: sh -c "pip install --no-cache-dir -r requirements.txt && gunicorn -w 4 -b 0.0.0.0:80 app:app"
    environment:
      - DB_HOST=db
      - DB_USER=${DB_USER:-app_user}
      - DB_PASSWORD=${DB_PASSWORD:-secret}
      - DB_NAME=${DB_NAME:-app_db}
      - REDIS_HOST=redis
      - PYTHONUNBUFFERED=1
    volumes:
      - app_data:/app
    depends_on

ASPNet + Redis

services:
  app:
    image: mcr.microsoft.com/dotnet/sdk:8.0
    working_dir: /app
    # Asume que tienes un archivo .csproj en la raĂ­z del volumen
    command: dotnet run --urls "http://0.0.0.0:80"
    environment:
      - ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT:-Production}
      - DB_HOST=db
      - DB_USER=${DB_USER:-app_user}
      - DB_PASSWORD=${DB_PASSWORD:-secret}
      - DB_NAME=${DB_NAME:-app_db}
      - REDIS_HOST=redis
    volumes:
      - app_data:/app
    depends_on:
     

LAMP + Redis

services:
  app:
    image: webdevops/php-apache:8.2
    environment:
      - DB_HOST=db
      - DB_USER=${DB_USER:-lamp_user}
      - DB_PASSWORD=${DB_PASSWORD:-secret}
      - DB_NAME=${DB_NAME:-lamp_db}
      - REDIS_HOST=redis
      - WEB_DOCUMENT_ROOT=${WEB_DOCUMENT_ROOT:-/app}
      - PHP_MEMORY_LIMIT=${PHP_MEMORY_LIMIT:-256M}
      - PHP_UPLOAD_MAX_FILESIZE=${PHP_UPLOAD_MAX:-50M}
      - PHP_POST_MAX_SIZE=${PHP_UPLOAD_MAX:-50M}
      - PHP_DISPLAY_ERRORS=${PHP_DISPLAY_ERRORS:-0}
      - T

vector db key

al-ln0RebtDf8yq_XlUnSEX9oZtnlidtmVIyOW8NjLnTuE

1356. Sort Integers by The Number of 1 Bits

You are given an integer array arr. Sort the integers in the array in ascending order by the number of 1's in their binary representation and in case of two or more integers have the same number of 1's you have to sort them in ascending order. Return the array after sorting it.
/**
 * @param {number[]} arr
 * @return {number[]}
 */
var sortByBits = function(arr) {
    // Helper: count how many 1-bits are in the binary representation
    function bitCount(n) {
        // Convert to binary string and count '1' characters
        return n.toString(2).split('1').length - 1;
    }

    // Sort using a custom comparator
    return arr.sort((a, b) => {
        const bitsA = bitCount(a);
        const bitsB = bitCount(b);

        // Primary sort: by number of 1-bits
        i

dev stack in ubuntu

#!/usr/bin/env bash
set -euo pipefail

# Installs on Ubuntu:
# - Docker Engine + Compose plugin
# - MongoDB Community Edition (7.0)
# - Redis
# - PostgreSQL
# - nvm (plus latest LTS Node)
# - Astral uv
#
# Usage:
#   chmod +x setup-dev-stack.sh
#   ./setup-dev-stack.sh

if ! command -v apt-get >/dev/null 2>&1; then
  echo "This script supports Ubuntu/Debian systems with apt-get."
  exit 1
fi

if [[ -f /etc/os-release ]]; then
  # shellcheck disable=SC1091
  . /etc/os-release
  if [[ "${ID:-}" !=

openai api key

OPENAI_API_KEY="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"

Prompt to analyze PRs

# Prompt d'Analyse de Pull Requests

## 🎯 Objectif Principal

**Faire ressortir les GROS TRAVAUX** : identifier et mettre en évidence les contributions majeures, les projets de fond et les efforts importants investis sur la période.


## Instructions pour l'IA

Analyse le fichier CSV `[NOM_FICHIER].csv` qui contient mes Pull Requests GitHub et génère un résumé structuré **en mettant l'accent sur les travaux d'envergure**.

Un fichier JSON associé `[NOM_FICHIER_FILES].json` (même préfixe que le C

Fingerprint config doc

# Increasing Fingerprint Retry Attempts on Ubuntu 24.04 (Dell XPS 15 9530)

## Overview

On Ubuntu 24.04, fingerprint authentication is handled through **PAM
(Pluggable Authentication Modules)** and **GDM (GNOME Display
Manager)**.

If you unlock your session using the fingerprint reader (e.g., power
button sensor on Dell XPS 15 9530), the number of allowed fingerprint
attempts can be adjusted by modifying the PAM configuration used by GDM.

------------------------------------------------------

activate gcloud config configuration localy

CLOUDSDK_ACTIVE_CONFIG_NAME=<config_name>
PS: the config name is the one used when run 'gcloud config configuration activate <config_name>' command

Script to fetch PR data from GitHub

"""Export GitHub PRs to CSV.

Exporte toutes les PRs créées par l'utilisateur dans un fichier CSV.

Note:
- Make sure GitHub cli is installed on your machine. Visit https://cli.github.com/ to install it.
- Make sure you are authenticated with GitHub. Run `gh auth login` to authenticate.
- Run the script with:
`poetry run python export_prs_to_csv.py --username <your-username> --output <output-file> --months <number-of-months>`

Examples:
```bash
# Basic usage
poetry run python export_prs_to_csv.p

React TodoList with Redurec

import { createContext, useEffect, useReducer, useState } from "react"
import { NewTodoForm } from "./NewTodoForm"
import "./styles.css"
import { TodoFilterForm } from "./TodoFilterForm"
import { TodoList } from "./TodoList"

const LOCAL_STORAGE_KEY = "TODOS"
const ACTIONS = {
  ADD: "ADD",
  UPDATE: "UPDATE",
  TOGGLE: "TOGGLE",
  DELETE: "DELETE",
}

function reducer(todos, { type, payload }) {
  switch (type) {
    case ACTIONS.ADD:
      return [
        ...todos,
        

Jina api key

JINA_API_KEY="jina_f1b9fd28bbc24908aec83525817ec537o6Uc5Nj8sS3Rxw3oUTLwKsUtJ59E"

🦑 Git - git rebase

# `git rebase` — Référence synthétique

## Principe

Rebase = **ré-appliquer des commits sur une nouvelle base**. Deux usages distincts :

1. **Rebase standard** : déplacer une branche sur la pointe d'une autre (alternative au merge)
2. **Rebase interactif** (`-i`) : réécrire, réordonner, fusionner ou supprimer des commits

---

## 1. Rebase standard — alternative au merge

### Le problème

```
main:      A --- B --- C
                 \
feature:          D --- E
```

`feature` diverge de `main`

🦑 Git - git diff

# `git diff` — Référence synthétique

## Principe

`git diff` compare deux états. Tout l'enjeu est de savoir **quels deux états** tu compares.

---

## Les 3 comparaisons fondamentales

| Commande | Compare quoi → avec quoi | Question à laquelle ça répond |
|---|---|---|
| `git diff` | Working dir → Staging | "Qu'est-ce que j'ai modifié mais **pas encore stagé** ?" |
| `git diff --staged` | Staging → Dernier commit (HEAD) | "Qu'est-ce que j'ai stagé et qui **entrera dans mon prochain commit** ?"