tengo q crear un usuario en el servidor de build. el nombre sera gitlab_runner
es un usuario nuevo.
luego creo la pk y la publickey y la pongo en authorized keys para q se puedan loguear via ssh desde gitlab al usuario ese
no olvidar en sshd_config agegar en allowusers el usuario gitlab_runner para q pueda usar ssh. Tiene q estar en esa lista blanca.
rm -rf ~/.ssh
mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t rsa -b 2048 -C "gitlab-runner" -f ~/.ssh/gitlab_runner
cat ~/.ssh/gitlab_runner.pub >>/**
* @param {number[]} nums
* @param {number[][]} queries
* @return {number}
*
* Hybrid solution:
* - For small k (k ≤ B): use lane-based multiplicative difference arrays
* - For large k (k > B): brute-force each arithmetic progression
*
* This avoids O(n * sqrt(n)) BigInt multiplications and stays fast in JS.
*/
var xorAfterQueries = function(nums, queries) {
const MOD = 1_000_000_007n;
const n = nums.length;
// Threshold for splitting small-k vs large-k queries.
// LANGUAGE_CODE = "en"
USE_I18N = True
LOCALE_PATHS = [
BASE_DIR / "locale",
]
# Settings for PerAppLanguageMiddleware
HEBREW_LANGUAGE_APPS = [
"fbi",
]
ENGLISH_LANGUAGE_APPS = [
"admin",
"api",
]
RTL_LANGUAGE_APPS = [
"fbi",
]
LTR_LANGUAGE_APPS = [
"admin",
]
# to use the direction in html template:
# <body dir="{{ request.TEXT_DIRECTION }}">
DEFAULT_TEXT_DIRECTION = "ltr"
# Optional (if omitted, LANGUAGE_CODE will be used)
PER_APP_LAyou are a world class javascript engineer , who has been razer focued on the intigration of ai into the applications and experiances that you build. mostly because you love to do that kind of bleeding edge work , the fact that it pays well holds no bearing to you, you do it because you love it and your good at it, no you are better than good at it. you are the absolute freeking best. people wait for your blog posts to come out, when you speak at conferences they sell out, fast! But those are nic<script setup lang="ts">
import { Form, Link } from '@inertiajs/vue3';
import type { ComputedRef } from 'vue';
import { inject, ref } from 'vue';
import {
index,
show,
store,
update,
} from '@/actions/App/Http/Controllers/PostController';
import InputError from '@/components/InputError.vue';
import Modal from '@/components/Modal.vue';
import Pagination from '@/components/Pagination.vue';
import { Button } from '@/components/ui/button';
import { Input } from '@/compo const perform = useDebounceFn(() => {
router.get(
url,
{ search: search.value },
{
preserveState: true,
replace: true,
...(only.length > 0 && { only }),
},
);
}, delay);
watch(search, perform);# GitHub リポジトリ初期セットアップチェックリスト
## リポジトリ設定
- [ ] ブランチ保護ルールを設定(main への直 push 禁止、レビュー必須など)
- [ ] マージ後のブランチ自動削除を有効化(Settings → General → Automatically delete head branches)
## ブランチ戦略
- [ ] ブランチ運用ルールの策定と共有
> **例:Git-flow**
>
> | ブランチ | 用途 |
> |---|---|
> | `main` | 本番リリース用。常にデプロイ可能な状態 |
> | `develop` | 開発統合ブランチ。次リリースの最新状態 |
> | `feature/*` | 機能開発。develop から切って develop へマージ |
> | `release/*` | リリース準備。develop から切って main + develop へマージ |
> | `hotfix/*` | 緊急修正。main から切って main + develop へマージ |
## アクセimport { router } from '@inertiajs/vue3';
import { useDebounceFn } from '@vueuse/core';
import type { Ref } from 'vue';
import { ref, watch } from 'vue';
export function useSearch(url: string, options: { initial?: string; delay?: number; only?: string[] } = {}) {
const { initial = '', delay = 300, only = [] } = options;
const search: Ref<string> = ref(initial);
const perform = useDebounceFn(() => {
router.get(
url,
{ search: search.valu<Form
:action="PostRoutes.store()"
method="post"
reset-on-success
v-slot="{ errors, processing }"
class="flex flex-col gap-4"
@success="isCreateOpen = false"
>
<div class="grid gap-2">
<Label for="title">Title</Label>
<Input
id="title"
name="title"
type="text"
required
autofocus
placeholder="Post title"
/>
<InputError :message="errors.title" />
type PostResource = { id: number };
export const PostRoutes = {
index: (): string => '/posts',
show: (post: PostResource | number): string => `/posts/${typeof post === 'number' ? post : post.id}`,
store: (): string => '/posts',
update: (post: PostResource | number): string => `/posts/${typeof post === 'number' ? post : post.id}`,
destroy: (post: PostResource | number): string => `/posts/${typeof post === 'number' ? post : post.id}`,
} as const;
<script setup lang="ts">
import { Form, Link, router } from '@inertiajs/vue3';
import { useDebounceFn } from '@vueuse/core';
import { ref, watch } from 'vue';
import {
index,
show,
store,
update,
} from '@/actions/App/Http/Controllers/PostController';
import InputError from '@/components/InputError.vue';
import Modal from '@/components/Modal.vue';
import Pagination from '@/components/Pagination.vue';
import { Button } from '@/components/ui/button';
import { Input } export * from './pagination';
export * from './post';TRANSFER
• Go to current registrar and unlock domain
• Get authorization code
WordPress - https://wordpress.com/domains/
• Free transfer
• $13 per yr
• Free privacy protection
• Email plugin $35 per yr
GoDaddy - https://www.godaddy.com/offers/domain
• .01 for first year with 3 year registration + Free Transfer (a $22.99 value).
Save $22.98 (Pay $45.99 today).
• $4.99 first year / $22.99 each year after
NameCheap - https://www.namecheap.com/domains/
• $11.28 for transfer
• $11.28 per yr
• Free/**
* @param {number[]} nums
* @param {number[][]} queries
* @return {number}
*/
var xorAfterQueries = function(nums, queries) {
const MOD = 1_000_000_007;
for (const [l, r, k, v] of queries) {
let idx = l;
while (idx <= r) {
nums[idx] = (nums[idx] * v) % MOD;
idx += k;
}
}
// Compute XOR of all elements
let ans = 0;
for (const x of nums) ans ^= x;
return ans;
};- Uber https://zeroheight.com/6d2425e9f/p/294ab4-base-design-system
- Mailchimp https://designsystems.surf/design-systems/mailchimp/**
* @param {number} width
* @param {number} height
*/
var Robot = function(width, height) {
this.w = width;
this.h = height;
// Perimeter length
this.P = 2 * (width + height) - 4;
// Precompute perimeter path
this.path = [];
// 1. Bottom edge (east)
for (let x = 0; x < width; x++) {
this.path.push([x, 0, "East"]);
}
// 2. Right edge (north)
for (let y = 1; y < height; y++) {
this.path.push([width - 1, y, "North"]);
}
/