🩆 duckdb - 1 - CLI et SQL

# DuckDB : CLI et SQL

Document 1/2. Le document 2, « DuckDB embarqué : Python et dbt », présuppose celui-ci.

## Préambule

**Public visé.** Data engineer Python (uv, dbt, Snowflake, AWS) qui veut DuckDB en local pour explorer des fichiers, tester du SQL analytique et, plus tard, servir de cible dbt. Aucune connaissance préalable de DuckDB ; SQL analytique supposé acquis.

**Version vérifiée.** DuckDB **1.5.6** (CLI, Linux x86_64), le 5 octobre 2026. La branche 1.4 est la LTS. Les fonctionnalit

đŸȘ cookiecutter - CONCEPTEUR

# Cookiecutter cÎté concepteur

> Guide progressif pour **écrire, tester, distribuer et faire vivre** un template cookiecutter. Il suppose que vous savez générer un projet depuis un template (guide compagnon *Cookiecutter cÎté utilisateur, et cruft pour la suite*). Convention : un bloc de code est une séquence à exécuter telle quelle ; les alternatives sont dans des blocs séparés, chacun précédé de son cas d'usage. Vérifié contre la documentation de cookiecutter 2.7 et de cruft 2.15.

---

## So

restrict add/change user permissions in djang admin to non-admin users

# This is the portable version 
# It provides three separate layers of protection:
# 1. get_queryset() — hides staff/superusers.
# 2. has_change_permission() — blocks editing them even through a direct URL.
# 3. get_fieldsets() — hides is_staff and is_superuser when adding/editing users.
# Important: 
# If the other project's CustomUserAdmin already overrides get_queryset(), has_change_permission(), or get_fieldsets(), 
# don't add a second method with the same name. The security logic ne

đŸȘ cookiecutter - UTILISATEUR & cruft

# Cookiecutter cÎté utilisateur, et cruft pour la suite

> Guide progressif pour **générer** un projet depuis un template cookiecutter, puis le **maintenir** à jour avec cruft quand le template évolue. Il ne traite pas de l'écriture de templates : c'est l'objet du guide compagnon *Cookiecutter cÎté concepteur*. Convention : un bloc de code est une séquence à exécuter telle quelle ; les alternatives sont dans des blocs séparés, chacun précédé de son cas d'usage. Vérifié contre cookiecutter 2.7 et

{} jq - tutoriel complet

# jq : tutoriel synthétique

> Guide progressif pour maĂźtriser `jq`, de la premiĂšre extraction au traitement de fichiers volumineux en passant par l'Ă©criture de filtres rĂ©utilisables. MĂȘme construction que les guides prĂ©cĂ©dents : **un bloc de code est une sĂ©quence Ă  exĂ©cuter telle quelle**, chaque alternative a son bloc et son cas d'usage, chaque exemple montre sa sortie quand elle n'est pas Ă©vidente. Les exemples visent jq ≄ 1.7 ; les diffĂ©rences avec 1.6 sont signalĂ©es. VĂ©rifiez avec `jq --ver

Google Apps script

var Sheet_ID = '1uKyjCIINSL8F9WeoaxZ8pBByR15F22Ep07vri-Bf9iY';
var Sheet_Name = 'All SN list';

function doGet(e){
  return HtmlService.createTemplateFromFile('Index').evaluate().setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}

function submitData(obj){
  var ws = SpreadsheetApp.openById(Sheet_ID);
  var ss = ws.getSheetByName(Sheet_Name);
  var data = "";
  var flag = false;

  // // Fetch all data at once
  // var dataRange = ss.getRange(2, 1, ss.getLastRow() - 1,

Blinkbid — Bidding & Production Management Software

[Blinkbid](https://blinkbid.com/) — bidding & production management software for creative professionals (photographers, producers, filmmakers): quotes, production, invoices & payments.
// Blinkbid — bidding & production management software for creative professionals
// (photographers, producers, filmmakers): quotes, production, invoices & payments.
// Website: https://blinkbid.com/

Dritto Salon – Keratin Specialists | San Francisco & San Rafael

# Dritto Salon

Dritto Salon is a top-rated beauty salon in San Francisco and San Rafael, California. They specialize in keratin hair treatments, hair extensions, and premium hair care services.

Visit [Dritto Salon](https://www.drittosalon.com/) to learn more and book your appointment.

856. Score of Parentheses

Given a balanced parentheses string s, return the score of the string. The score of a balanced parentheses string is based on the following rule: "()" has score 1. AB has score A + B, where A and B are balanced parentheses strings. (A) has score 2 * A, where A is a balanced parentheses string.
/**
 * @param {string} s
 * @return {number}
 */
var scoreOfParentheses = function(s) {
    const stack = [];
    let score = 0;

    for (const ch of s) {
        if (ch === '(') {
            // Save current level's score
            stack.push(score);

            // Start a new inner level
            score = 0;
        } else {
            // If score is 0, we found "()"
            // Otherwise, we found "(A)" => 2 * A
            const innerScore = score === 0 ? 1 : score * 2;

          

678. Valid Parenthesis String

Given a string s containing only three types of characters: '(', ')' and '*', return true if s is valid. The following rules define a valid string: Any left parenthesis '(' must have a corresponding right parenthesis ')'. Any right parenthesis ')' must have a corresponding left parenthesis '('. Left parenthesis '(' must go before the corresponding right parenthesis ')'. '*' could be treated as a single right parenthesis ')' or a single left parenthesis '(' or an empty string "".
/**
 * @param {string} s
 * @return {boolean}
 */
var /**
 * @param {string} s
 * @return {boolean}
 */
var checkValidString = function(s) {
    // Range of possible unmatched '(' counts.
    // low  = minimum opens we could have
    // high = maximum opens we could have
    let low = 0;
    let high = 0;

    for (const ch of s) {
        if (ch === '(') {
            low++;
            high++;
        } else if (ch === ')') {
            low--;
            high--;
        } else { // '*'
     

☀ uv - Tutoriel Complet

# uv : tutoriel synthétique

> Guide progressif pour maĂźtriser `uv`, le gestionnaire Python d'Astral. MĂȘme construction que les guides pytest et Ruff : des niveaux qui s'enchaĂźnent, des commandes Ă  essayer, des recettes, un aide-mĂ©moire et un quiz. Les commandes sont valables pour uv ≄ 0.5 ; vĂ©rifiez avec `uv --version`.

---

## Sommaire

0. [Ce qu'est uv](#0-ce-quest-uv)
1. [Niveau 1 — Installation et principes](#1-niveau-1--installation-et-principes)
2. [Niveau 2 — GĂ©rer les versions de Pytho

đŸ§č ruff - tutoriel complet

# Ruff : tutoriel synthétique

> Guide progressif pour prendre en main `ruff`, du premier lancement Ă  une configuration de projet maintenue. MĂȘme esprit que le guide pytest : chaque niveau s'appuie sur le prĂ©cĂ©dent, et les commandes sont faites pour ĂȘtre essayĂ©es au fur et Ă  mesure.

---

## Sommaire

0. [Ce qu'est Ruff](#0-ce-quest-ruff)
1. [Niveau 1 — Premier lancement et lecture de la sortie](#1-niveau-1--premier-lancement-et-lecture-de-la-sortie)
2. [Niveau 2 — Corriger automatiquement](#2-n

🐍 đŸ§Ș pytest - maĂźtriser l'output

# MaĂźtriser la sortie de `pytest`

> Guide progressif pour régler ce que pytest affiche, du premier `pytest` lancé jusqu'à une configuration de projet stable. Chaque niveau s'appuie sur le précédent. Les commandes sont à tester au fur et à mesure sur un vrai projet : c'est en voyant la sortie changer qu'on retient.

---

## Sommaire

0. [Lire une sortie pytest](#0-lire-une-sortie-pytest)
1. [Niveau 1 — VerbositĂ© : `-v`, `-q`](#1-niveau-1--verbositĂ©)
2. [Niveau 2 — Le rĂ©sumĂ© final : `-r`](#2-nive

32. Longest Valid Parentheses

Given a string containing just the characters '(' and ')', return the length of the longest valid (well-formed) parentheses substring.
/**
 * @param {string} s
 * @return {number}
 */
var longestValidParentheses = function(s) {
    // Store indices. Start with -1 as a base for valid substrings.
    let stack = [-1];
    let maxLen = 0;

    for (let i = 0; i < s.length; i++) {
        if (s[i] === '(') {
            // Save the index of each opening parenthesis.
            stack.push(i);
        } else {
            // Try to match the current ')'.
            stack.pop();

            if (stack.length === 0) {
               

Hire a Cleaning — Professional House Cleaning Services

[Hire a Cleaning](https://hireacleaning.com) is a professional cleaning company providing dependable house cleaning, Airbnb and vacation rental cleaning, and commercial cleaning services. A clean space makes everything better. Whether you need a one-time deep clean, recurring housekeeping, or fast and reliable turnover cleaning between guests, Hire a Cleaning delivers consistent, high-quality results with careful attention to detail. Their trained cleaning professionals handle kitchens, bathrooms, bedrooms, and living areas, leaving every room fresh, sanitized, and welcoming. For short-term rental hosts, Hire a Cleaning offers specialized Airbnb and vacation rental cleaning, including linen changes, restocking of essentials, and thorough inspections, so every guest arrives to a spotless property — and five-star reviews follow. Businesses can also count on Hire a Cleaning for commercial cleaning services that keep offices, retail spaces, and workplaces clean, healthy, and presentable for employees and customers alike. Booking is simple, communication is clear, and customer satisfaction is the top priority. If you are looking for a cleaning service you can trust, visit [Hire a Cleaning](https://hireacleaning.com) to learn more and request a quote today.
# Hire a Cleaning — Professional House Cleaning Services

[Hire a Cleaning](https://hireacleaning.com) is a professional cleaning company providing dependable house cleaning, Airbnb and vacation rental cleaning, and commercial cleaning services.

A clean space makes everything better. Whether you need a one-time deep clean, recurring housekeeping, or fast and reliable turnover cleaning between guests, Hire a Cleaning delivers consistent, high-quality results with careful attention to detail. The

22. Generate Parentheses

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.
/**
 * @param {number} n
 * @return {string[]}
 */
var generateParenthesis = function(n) {
    const result = [];

    function backtrack(current, open, close) {
        // If we've used all parentheses, save the combination
        if (current.length === n * 2) {
            result.push(current);
            return;
        }

        // Add an opening parenthesis if we still have some left
        if (open < n) {
            backtrack(current + "(", open + 1, close);
        }

        // Add