# This is the portable version I'd use in another project.
# 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 # 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 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 --vervar 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 for creative professionals
// (photographers, producers, filmmakers): quotes, production, invoices & payments.
// Website: https://blinkbid.com/# 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./**
* @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;
/**
* @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 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 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# 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/**
* @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. The/**
* @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 // Noto Sans JP(Google Fonts)
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@100..900&display=swap");
// poppins(Google Fonts)
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap');<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 148 30" width="148" height="30" preserveAspectRatio="none" class="icon-triangle">
<polygon points="0,0 148,0 74,30" fill="#f3fbf9"/>
<path d="M 0,0 L 74,29 L 148,0" fill="none" stroke="#00b894" stroke-width="2" vector-effect="non-scaling-stroke" stroke-linejoin="round" stroke-linecap="butt"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 148 30" width="148" height="30" preserveAspectRatio="none" fill="#f3fbf9" class="icon-tri