Сегодня 256-ой день в году, с праздником!

собственно всех причастных, с праздником!

интересно, кто у нас причастен к тому, что сегодня 256 день? :slight_smile: Навскидку только папа Григорий приходит на ум…

Говнокодеры считаются? )))

Мы из зрительного зала приобщаемся ))

кто блинк осилил, тот считается)))

Эти – самые главные! Помните у Высоцкого про хоккей: «Бог на трибуне»!

прошляпили?? :sweat_smile:
с прошедшим, кого касается)

у нас появился хоть один, настоящий? :sweat_smile:
с праздником!

Правда, я только его и осилил :grinning_face:

мы тебя записываем)

Уж точно луччее, чем “Ну, тогда мы тебя вычёркиваем”(С) :grinning_face: А ваащето нет! Или да!? Сложно енто всё! :roll_eyes:

большое спс за поздравление, и дабы все непричастные тоже причастились к этому дню, предлагаю запустить 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>

ну и всех причастных с праздником конечно)))

ой скучно и тоскливо че то, что жуть… ээээх

Таблетки, сэр, - не забывайте принимать таблетки! :neutral_face:

вы какие то определенные рекомендуете ? красненькие или синенькие ? что то конкретное предлагаете ?
я так понимаю лайкаются только не смешные шутки ?)))
я предупреждал что мне скучно, так что готов выслушать даже самые нелепые версии!

Хм! Ну, нелепей уже некуда ибо сами сообщали, что…

не дает, паразит вздохнуть :grinning_face_with_smiling_eyes:

аааа это…

любой гениальный план может пойти по бороде из за человеческого фактора, вот ты составил четкий план, описал воообще все что человек должен сделать на своей должности, а потом оказывается что он вовсе решил понять это по своему, или вовсе вспомнил что не он этим должен заниматься))) и потом оказывается что надо еще и объяснять все и другим… и ждать! и то поймут что я от них хочу, а то еще и что то нелепое начнут делать)))

в общем все откладывается или до понедельника, а там может и до пятнице… не дают мне бедненькому спокойно пройти курс лечения)))
я бы сам рад, но вот теперь время убиваю и жду…

паразитическая форма подразумевает выгоду, кстате о ней где она ?)))
ну вы хоть коды выложите, меня это займет на время, 1 человек скинул мне сразу свою версию ардуино идэ,(с кодами которых нет в стандартной!) так я недельку с ней сидел…

Это не он, это таблетки - не дают ему, бедненькому, курс лечения пройти, а без таблеток совсем беда :sweat_smile:

финал надо поправить, с концовкой чуть не то… не компилируется))) но начало хорошее!

Я ж говорю - таблеток не хватает ))