собственно всех причастных, с праздником!
интересно, кто у нас причастен к тому, что сегодня 256 день?
Навскидку только папа Григорий приходит на ум…
Говнокодеры считаются? )))
Мы из зрительного зала приобщаемся ))
кто блинк осилил, тот считается)))
Эти – самые главные! Помните у Высоцкого про хоккей: «Бог на трибуне»!
прошляпили?? ![]()
с прошедшим, кого касается)
у нас появился хоть один, настоящий? ![]()
с праздником!
Правда, я только его и осилил ![]()
мы тебя записываем)
Уж точно луччее, чем “Ну, тогда мы тебя вычёркиваем”(С)
А ваащето нет! Или да!? Сложно енто всё! ![]()
большое спс за поздравление, и дабы все непричастные тоже причастились к этому дню, предлагаю запустить html
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>С Днём программиста!</title>
<style>
* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
html, body {
margin: 0; padding: 0;
width: 100%; height: 100%;
overflow: hidden;
background: radial-gradient(ellipse at 50% 40%, #0d1420 0%, #05080f 55%, #010203 100%);
font-family: 'Consolas', 'Courier New', monospace;
color: #fff;
user-select: none;
}
#canvas {
position: fixed;
inset: 0;
z-index: 1;
display: block;
}
.title {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
pointer-events: none;
z-index: 100;
animation: pulse 3s ease-in-out infinite;
}
.title h1 {
margin: 0;
font-size: clamp(28px, 6vw, 72px);
letter-spacing: 6px;
text-transform: uppercase;
color: #00ff41;
text-shadow:
0 0 20px rgba(0,255,65,0.9),
0 0 60px rgba(0,255,65,0.5),
0 0 100px rgba(0,255,65,0.3);
}
.title p {
margin: 16px 0 0;
font-size: clamp(13px, 1.6vw, 20px);
letter-spacing: 4px;
color: #ffd600;
text-shadow: 0 0 20px rgba(255,214,0,0.8);
}
.title .day {
margin-top: 10px;
font-size: clamp(11px, 1.2vw, 15px);
letter-spacing: 3px;
color: #4a6a55;
}
@keyframes pulse {
0%, 100% { opacity: 1; transform: translate(-50%, -50%) scale(1); }
50% { opacity: 0.85; transform: translate(-50%, -50%) scale(1.02); }
}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<div class="title">
<h1>С Днём программиста!</h1>
<p>256</p>
<div class="day">while (true) { celebrate(); }</div>
</div>
<script>
(() => {
'use strict';
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d', { alpha: true });
let W = 0, H = 0, DPR = 1;
function resize() {
DPR = Math.min(window.devicePixelRatio || 1, 2);
W = window.innerWidth;
H = window.innerHeight;
canvas.width = W * DPR;
canvas.height = H * DPR;
canvas.style.width = W + 'px';
canvas.style.height = H + 'px';
ctx.setTransform(DPR, 0, 0, DPR, 0, 0);
}
resize();
window.addEventListener('resize', resize);
// ============================================================
// ПАЛИТРА
// ============================================================
const COLORS = [
'#00ff41', '#00cc33', '#39ff14', '#00ff88',
'#00ffff', '#00bfff',
'#ff00ff', '#bf00ff',
'#ffd600', '#ff8a00',
'#ff3060', '#ff4444',
'#8affc8', '#e0e8ff', '#ffffff',
];
const rand = (min, max) => Math.random() * (max - min) + min;
const pick = (arr) => arr[Math.floor(Math.random() * arr.length)];
function hexToRgb(hex) {
const n = parseInt(hex.slice(1), 16);
return [(n >> 16) & 255, (n >> 8) & 255, n & 255];
}
const flashyColor = (c, chance = 0.28) => {
const r = Math.random();
if (r < chance) return '#ffffff';
if (r < chance + 0.18) return '#00ff41';
return c;
};
// ============================================================
// ПУЛ ЧАСТИЦ
// ============================================================
const MAX_PARTICLES = 3500;
const particles = [];
const pool = [];
function acquireParticle() {
if (pool.length > 0) return pool.pop();
return {
x: 0, y: 0, vx: 0, vy: 0,
colorRgb: [255, 255, 255],
size: 2, life: 1, age: 0,
gravity: 200, friction: 0.985, trailLength: 4,
flicker: false, flickerSeed: 0,
prevX: 0, prevY: 0,
};
}
function releaseParticle(p) {
if (pool.length < MAX_PARTICLES) pool.push(p);
}
function spawnSpark(x, y, dx, dy, color, size, life, options = {}) {
if (particles.length >= MAX_PARTICLES) return;
const p = acquireParticle();
p.x = x; p.y = y;
p.prevX = x; p.prevY = y;
p.vx = dx; p.vy = dy;
p.colorRgb = hexToRgb(color);
p.size = size;
p.life = life / 1000;
p.age = 0;
p.gravity = options.gravity !== undefined ? options.gravity : 220;
p.friction = options.friction !== undefined ? options.friction : 0.985;
p.trailLength = options.trailLength || 3.5;
p.flicker = options.flicker || false;
p.flickerSeed = Math.random() * 1000;
particles.push(p);
}
// ============================================================
// РАКЕТЫ
// ============================================================
const rockets = [];
function launchRocket(targetX, targetY, scale = 1, variantIndex) {
const startX = targetX + rand(-100, 100) * scale;
const startY = H + 20;
const controlX = (startX + targetX) / 2 + rand(-150, 150) * scale;
const controlY = Math.min(startY, targetY) - rand(100, 300) * scale;
rockets.push({
startX, startY, targetX, targetY,
controlX, controlY,
flightTime: rand(0.5, 0.9),
age: 0,
scale,
color: pick(COLORS),
colorRgb: hexToRgb(pick(COLORS)),
variantIndex,
lastTrail: 0,
x: startX, y: startY,
});
}
function updateRockets(dt, now) {
for (let i = rockets.length - 1; i >= 0; i--) {
const r = rockets[i];
r.age += dt;
const t = Math.min(r.age / r.flightTime, 1);
const mt = 1 - t;
r.x = mt * mt * r.startX + 2 * mt * t * r.controlX + t * t * r.targetX;
r.y = mt * mt * r.startY + 2 * mt * t * r.controlY + t * t * r.targetY;
if (now - r.lastTrail > 25) {
r.lastTrail = now;
spawnSpark(
r.x, r.y,
rand(-25, 25), rand(30, 70),
flashyColor(r.color, 0.5),
rand(2, 4) * r.scale, rand(200, 450),
{ gravity: 180, friction: 0.97, trailLength: 5, flicker: true }
);
}
if (t >= 1) {
const variant = VARIANTS[r.variantIndex];
spawnFlash(r.targetX, r.targetY, r.scale);
variant.fn(r.targetX, r.targetY, r.scale);
rockets.splice(i, 1);
}
}
}
// ============================================================
// ВСПЫШКИ
// ============================================================
const flashes = [];
function spawnFlash(x, y, scale, color = [200, 255, 210]) {
flashes.push({ x, y, scale, age: 0, life: 0.5, color });
}
// ============================================================
// 10 ЛУЧШИХ ЭФФЕКТОВ
// ============================================================
// 1. ПИОН — классика, плотный шар
function fxPion(x, y, s) {
const c = pick(COLORS);
const n = Math.floor(90 * s);
for (let i = 0; i < n; i++) {
const a = (Math.PI * 2 * i) / n + rand(-0.08, 0.08);
const sp = rand(200, 340) * s;
spawnSpark(x, y, Math.cos(a) * sp, Math.sin(a) * sp,
flashyColor(Math.random() < 0.7 ? c : pick(COLORS), 0.5),
rand(2.5, 4.5) * s, rand(1100, 1700),
{ gravity: 180, friction: 0.982, trailLength: 4, flicker: true });
}
}
// 2. ИВА — ниспадающие длинные пряди
function fxIva(x, y, s) {
const c = pick(COLORS);
const n = Math.floor(70 * s);
for (let i = 0; i < n; i++) {
const a = (Math.PI * 2 * i) / n + rand(-0.1, 0.1);
const sp = rand(140, 240) * s;
spawnSpark(x, y, Math.cos(a) * sp, Math.sin(a) * sp,
flashyColor(c, 0.3),
rand(2, 3.5) * s, rand(2200, 3200),
{ gravity: 120, friction: 0.975, trailLength: 7, flicker: true });
}
}
// 3. ХРИЗАНТЕМА — большой шар с длинными хвостами
function fxHrizantema(x, y, s) {
const c = pick(COLORS);
const n = Math.floor(75 * s);
for (let i = 0; i < n; i++) {
const a = (Math.PI * 2 * i) / n + rand(-0.05, 0.05);
const sp = rand(240, 380) * s;
spawnSpark(x, y, Math.cos(a) * sp, Math.sin(a) * sp,
flashyColor(Math.random() < 0.75 ? c : pick(COLORS), 0.45),
rand(2.5, 4) * s, rand(1800, 2600),
{ gravity: 60, friction: 0.96, trailLength: 7, flicker: true });
}
}
// 4. КОЛЬЦО — плоское вращающееся
function fxKolec(x, y, s) {
const c1 = pick(COLORS), c2 = pick(COLORS);
const n = Math.floor(90 * s);
const tilt = rand(0.3, 0.7);
const rot = rand(0, Math.PI);
const cosR = Math.cos(rot), sinR = Math.sin(rot);
for (let i = 0; i < n; i++) {
const a = (Math.PI * 2 * i) / n;
const sp = rand(220, 300) * s;
const ex = Math.cos(a) * sp, ey = Math.sin(a) * sp * tilt;
spawnSpark(x, y, ex * cosR - ey * sinR, ex * sinR + ey * cosR,
flashyColor(i % 2 === 0 ? c1 : c2, 0.55),
rand(2.5, 4) * s, rand(1300, 1900),
{ gravity: 160, friction: 0.983, trailLength: 4, flicker: true });
}
}
// 5. ПАЛЬМА — ветки с искрами
function fxPalma(x, y, s) {
const c = pick(COLORS);
const n = Math.floor(16 * s);
for (let i = 0; i < n; i++) {
const a = (Math.PI * 2 * i) / n;
const sp = rand(220, 320) * s;
for (let j = 0; j < 9; j++) {
const jitter = rand(-0.08, 0.08);
spawnSpark(x, y, Math.cos(a + jitter) * sp, Math.sin(a + jitter) * sp,
flashyColor(Math.random() < 0.6 ? c : pick(COLORS), 0.35),
rand(2.5, 4) * s, rand(1800, 2600),
{ gravity: 100, friction: 0.965, trailLength: 8, flicker: true });
}
}
}
// 6. СПИРАЛЬ — закрученная
function fxSpiral(x, y, s) {
const c = pick(COLORS);
const n = Math.floor(85 * s);
const turns = 3;
for (let i = 0; i < n; i++) {
const progress = i / n;
const a = progress * Math.PI * 2 * turns;
const sp = rand(180, 320) * s;
spawnSpark(x, y, Math.cos(a) * sp, Math.sin(a) * sp,
flashyColor(Math.random() < 0.7 ? c : pick(COLORS), 0.45),
rand(2.5, 4) * s, rand(1400, 2000),
{ gravity: 180, friction: 0.982, trailLength: 5, flicker: true });
}
}
// 7. ЗВЕЗДА — пятиконечная
function fxZvezda(x, y, s) {
const c = pick(COLORS);
const points = 5;
const n = Math.floor(85 * s);
for (let i = 0; i < n; i++) {
const a = (Math.PI * 2 * i) / n;
const spikes = points * 2;
const localA = a * spikes / (Math.PI * 2);
const frac = localA - Math.floor(localA);
const radiusMul = 0.5 + 0.5 * Math.abs(Math.cos(frac * Math.PI));
const sp = rand(220, 340) * s * radiusMul;
spawnSpark(x, y, Math.cos(a) * sp, Math.sin(a) * sp,
flashyColor(Math.random() < 0.7 ? c : pick(COLORS), 0.5),
rand(2.5, 4) * s, rand(1400, 2000),
{ gravity: 170, friction: 0.982, trailLength: 5, flicker: true });
}
}
// 8. СВЕРХНОВАЯ — двойной взрыв
function fxSverhnova(x, y, s) {
const c = pick(COLORS);
for (let i = 0; i < 60 * s; i++) {
const a = Math.random() * Math.PI * 2;
const sp = rand(320, 520) * s;
spawnSpark(x, y, Math.cos(a) * sp, Math.sin(a) * sp,
flashyColor('#ffffff', 0.7), rand(2, 4) * s, rand(600, 1200),
{ gravity: 150, friction: 0.99, trailLength: 8, flicker: true });
}
setTimeout(() => {
const n = Math.floor(85 * s);
for (let i = 0; i < n; i++) {
const a = (Math.PI * 2 * i) / n + rand(-0.1, 0.1);
const sp = rand(100, 220) * s;
spawnSpark(x, y, Math.cos(a) * sp, Math.sin(a) * sp,
flashyColor(Math.random() < 0.5 ? c : pick(COLORS), 0.55),
rand(3, 5) * s, rand(1800, 2600),
{ gravity: 200, friction: 0.978, trailLength: 6, flicker: true });
}
}, 100);
}
// 9. СЕРДЦЕ — романтичный
function fxSerdce(x, y, s) {
const c = pick(COLORS);
const n = Math.floor(95 * s);
for (let i = 0; i < n; i++) {
const t = (i / n) * Math.PI * 2;
const hx = 16 * Math.pow(Math.sin(t), 3);
const hy = -(13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t));
const sp = 13 * s;
spawnSpark(x, y, hx * sp, hy * sp,
flashyColor(Math.random() < 0.75 ? c : pick(COLORS), 0.55),
rand(2.5, 4) * s, rand(1600, 2200),
{ gravity: 200, friction: 0.98, trailLength: 4, flicker: true });
}
}
// 10. ГИПЕРНОВАЯ — тройной, самый мощный
function fxGipernova(x, y, s) {
spawnFlash(x, y, s * 1.4);
const c1 = pick(COLORS), c2 = pick(COLORS), c3 = pick(COLORS);
for (let i = 0; i < 65 * s; i++) {
const a = Math.random() * Math.PI * 2;
const sp = rand(380, 580) * s;
spawnSpark(x, y, Math.cos(a) * sp, Math.sin(a) * sp,
flashyColor('#ffffff', 0.75), rand(2, 4) * s, rand(500, 1000),
{ gravity: 180, friction: 0.99, trailLength: 8, flicker: true });
}
setTimeout(() => {
const n = Math.floor(100 * s);
for (let i = 0; i < n; i++) {
const a = (Math.PI * 2 * i) / n + rand(-0.1, 0.1);
const sp = rand(160, 340) * s;
spawnSpark(x, y, Math.cos(a) * sp, Math.sin(a) * sp,
flashyColor(i % 3 === 0 ? c1 : (i % 3 === 1 ? c2 : c3), 0.5),
rand(2.5, 4.5) * s, rand(1800, 2800),
{ gravity: 160, friction: 0.978, trailLength: 6, flicker: true });
}
}, 120);
setTimeout(() => {
const n2 = Math.floor(55 * s);
for (let i = 0; i < n2; i++) {
const a = (Math.PI * 2 * i) / n2 + rand(-0.2, 0.2);
const sp = rand(80, 200) * s;
spawnSpark(x, y, Math.cos(a) * sp, Math.sin(a) * sp,
flashyColor(pick(COLORS), 0.4),
rand(2, 4) * s, rand(2200, 3000),
{ gravity: 100, friction: 0.972, trailLength: 8, flicker: true });
}
}, 280);
}
const VARIANTS = [
{ name: 'Пион', fn: fxPion },
{ name: 'Ива', fn: fxIva },
{ name: 'Хризантема', fn: fxHrizantema },
{ name: 'Кольцо', fn: fxKolec },
{ name: 'Пальма', fn: fxPalma },
{ name: 'Спираль', fn: fxSpiral },
{ name: 'Звезда', fn: fxZvezda },
{ name: 'Сверхновая', fn: fxSverhnova },
{ name: 'Сердце', fn: fxSerdce },
{ name: 'Гиперновая', fn: fxGipernova },
];
// ============================================================
// БОЛЬШОЙ ЗАЛП — 5-8 ракет + финальный мега-взрыв
// ============================================================
function bigSalvo() {
const count = 5 + Math.floor(Math.random() * 4); // 5..8 ракет
for (let i = 0; i < count; i++) {
setTimeout(() => {
const tx = W * rand(0.15, 0.85);
const ty = H * rand(0.15, 0.5);
launchRocket(tx, ty, rand(1.0, 1.4),
Math.floor(Math.random() * VARIANTS.length));
}, i * 90);
}
// центральный мега-взрыв чуть позже
setTimeout(() => {
const cx = W * rand(0.35, 0.65);
const cy = H * rand(0.25, 0.45);
spawnFlash(cx, cy, 2.5);
const shuffled = [...VARIANTS].sort(() => Math.random() - 0.5);
shuffled[0].fn(cx, cy, 1.6);
setTimeout(() => shuffled[1].fn(cx, cy, 1.4), 150);
}, 500);
}
// ============================================================
// ОТРИСОВКА
// ============================================================
function drawParticle(p) {
const t = p.age / p.life;
if (t >= 1) return;
const opacity = 1 - t;
const [r, g, b] = p.colorRgb;
let alpha = opacity;
if (p.flicker) {
alpha *= 0.55 + 0.45 * Math.abs(Math.sin(p.flickerSeed + p.age * 40));
}
const dx = p.x - p.prevX;
const dy = p.y - p.prevY;
const dist = Math.sqrt(dx * dx + dy * dy);
const coreSize = p.size * (1 - t * 0.6);
if (coreSize > 0.3) {
ctx.beginPath();
ctx.arc(p.x, p.y, coreSize, 0, Math.PI * 2);
ctx.fillStyle = `rgba(${r},${g},${b},${alpha * 0.9})`;
ctx.fill();
}
if (dist > 0.5) {
const stretch = Math.min(1 + dist * p.trailLength * 0.35, 10);
const tailX = p.x - dx * stretch;
const tailY = p.y - dy * stretch;
const gradient = ctx.createLinearGradient(p.x, p.y, tailX, tailY);
gradient.addColorStop(0, `rgba(${r},${g},${b},${alpha})`);
gradient.addColorStop(0.4, `rgba(${r},${g},${b},${alpha * 0.5})`);
gradient.addColorStop(1, `rgba(${r},${g},${b},0)`);
ctx.beginPath();
ctx.moveTo(p.x, p.y);
ctx.lineTo(tailX, tailY);
ctx.strokeStyle = gradient;
ctx.lineWidth = coreSize * 1.2;
ctx.lineCap = 'round';
ctx.stroke();
}
if (coreSize > 1.5) {
ctx.beginPath();
ctx.arc(p.x, p.y, coreSize * 2.5, 0, Math.PI * 2);
ctx.fillStyle = `rgba(${r},${g},${b},${alpha * 0.15})`;
ctx.fill();
}
}
function drawFlash(f) {
const t = f.age / f.life;
if (t >= 1) return;
const alpha = 1 - t;
const size = 160 * f.scale * (0.3 + t * 1.8);
const [r, g, b] = f.color;
const grad = ctx.createRadialGradient(f.x, f.y, 0, f.x, f.y, size);
grad.addColorStop(0, `rgba(220,255,230,${alpha * 0.95})`);
grad.addColorStop(0.3, `rgba(${r},${g},${b},${alpha * 0.6})`);
grad.addColorStop(1, `rgba(${r},${g},${b},0)`);
ctx.beginPath();
ctx.arc(f.x, f.y, size, 0, Math.PI * 2);
ctx.fillStyle = grad;
ctx.fill();
}
function drawRocket(r) {
ctx.beginPath();
ctx.arc(r.x, r.y, 3, 0, Math.PI * 2);
ctx.fillStyle = '#fff';
ctx.fill();
const [cr, cg, cb] = r.colorRgb;
const grad = ctx.createRadialGradient(r.x, r.y, 0, r.x, r.y, 20);
grad.addColorStop(0, `rgba(220,255,230,0.9)`);
grad.addColorStop(0.3, `rgba(${cr},${cg},${cb},0.5)`);
grad.addColorStop(1, `rgba(${cr},${cg},${cb},0)`);
ctx.beginPath();
ctx.arc(r.x, r.y, 20, 0, Math.PI * 2);
ctx.fillStyle = grad;
ctx.fill();
}
// ============================================================
// ГЛАВНЫЙ ЦИКЛ
// ============================================================
let lastTime = performance.now();
function loop(now) {
const dt = Math.min((now - lastTime) / 1000, 0.05);
lastTime = now;
ctx.clearRect(0, 0, W, H);
updateRockets(dt, now);
for (let i = particles.length - 1; i >= 0; i--) {
const p = particles[i];
p.prevX = p.x;
p.prevY = p.y;
p.age += dt;
if (p.age >= p.life) {
releaseParticle(p);
particles.splice(i, 1);
continue;
}
p.vy += p.gravity * dt;
const fr = Math.pow(p.friction, dt * 60);
p.vx *= fr;
p.vy *= fr;
p.x += p.vx * dt;
p.y += p.vy * dt;
}
for (let i = flashes.length - 1; i >= 0; i--) {
flashes[i].age += dt;
if (flashes[i].age >= flashes[i].life) flashes.splice(i, 1);
}
ctx.globalCompositeOperation = 'lighter';
for (let i = 0; i < flashes.length; i++) drawFlash(flashes[i]);
for (let i = 0; i < rockets.length; i++) drawRocket(rockets[i]);
for (let i = 0; i < particles.length; i++) drawParticle(particles[i]);
ctx.globalCompositeOperation = 'source-over';
requestAnimationFrame(loop);
}
// ============================================================
// АВТО-ЗАЛПЫ КАЖДЫЕ 1.5 СЕКУНДЫ
// ============================================================
bigSalvo();
setInterval(bigSalvo, 1500);
requestAnimationFrame(loop);
})();
</script>
</body>
</html>
ну и всех причастных с праздником конечно)))
ой скучно и тоскливо че то, что жуть… ээээх
Таблетки, сэр, - не забывайте принимать таблетки! ![]()
вы какие то определенные рекомендуете ? красненькие или синенькие ? что то конкретное предлагаете ?
я так понимаю лайкаются только не смешные шутки ?)))
я предупреждал что мне скучно, так что готов выслушать даже самые нелепые версии!
Хм! Ну, нелепей уже некуда ибо сами сообщали, что…
не дает, паразит вздохнуть ![]()
аааа это…
любой гениальный план может пойти по бороде из за человеческого фактора, вот ты составил четкий план, описал воообще все что человек должен сделать на своей должности, а потом оказывается что он вовсе решил понять это по своему, или вовсе вспомнил что не он этим должен заниматься))) и потом оказывается что надо еще и объяснять все и другим… и ждать! и то поймут что я от них хочу, а то еще и что то нелепое начнут делать)))
в общем все откладывается или до понедельника, а там может и до пятнице… не дают мне бедненькому спокойно пройти курс лечения)))
я бы сам рад, но вот теперь время убиваю и жду…
паразитическая форма подразумевает выгоду, кстате о ней где она ?)))
ну вы хоть коды выложите, меня это займет на время, 1 человек скинул мне сразу свою версию ардуино идэ,(с кодами которых нет в стандартной!) так я недельку с ней сидел…
Это не он, это таблетки - не дают ему, бедненькому, курс лечения пройти, а без таблеток совсем беда ![]()
финал надо поправить, с концовкой чуть не то… не компилируется))) но начало хорошее!
Я ж говорю - таблеток не хватает ))