Skip to content

Instantly share code, notes, and snippets.

View kaineer's full-sized avatar
:octocat:
⌨️ 🖱️

Sergey Kluchkovsky kaineer

:octocat:
⌨️ 🖱️
View GitHub Profile
@kaineer
kaineer / ipb.py
Created November 5, 2026 11:37
ipb: YAML gateway→domains → ip route host entries
#!/usr/bin/env python3
"""Manage host routes from a YAML gateway→domains config."""
from __future__ import annotations
import argparse
import hashlib
import json
import socket
import subprocess
const handleModifiers = {
preventDefault: (e) => e.preventDefault(),
stopPropagation: (e) => e.stopPropagation(),
}
const fndom = (fn) => {
const pipe = (el, ...args) => {
return args.reduce((a, f) => f(a), el);
}
@kaineer
kaineer / conspect.md
Last active October 28, 2026 04:43
javascript, урок 13

1. Что такое исключение и для чего нужен механизм throw

Исключение — это сигнал о том, что в программе произошла нештатная ситуация, при которой нормальное выполнение кода невозможно или бессмысленно. Механизм throw позволяет прервать текущий поток выполнения и передать управление ближайшему обработчику ошибок в стеке вызовов. Без исключений приходилось бы возвращать специальные значения (например, -1 или null) и проверять их после каждого вызова, что загромождает код и легко приводит к пропущенным проверкам. Исключения разделяют "успешный" и "аварийный" пути выполнения.


2. Синтаксис try/catch/finally, порядок выполнения блоков

Блок try содержит код, в котором потенциально может произойти исключение. Если исключение возникает, выполнение try прерывается, и управление передаётся в catch, где ошибку можно обработать. Блок finally выполняется всегда — и после успешного выполнения try, и после обработки в catch, и даже если в try или catch был выполнен return. Типичное пр

@kaineer
kaineer / examples.md
Created October 20, 2026 06:04
2026, третий семинар по javascript

01.js

// Задание: собрать инвентарь робота из списка предметов.
// Нужно вернуть массив названий предметов, у которых weight > 0,
// причём если предмет — строка "unknown", его пропускаем.
// Если итоговый массив пуст — вернуть null.
// Акцент: переменные (const/let/var), типы, ветвление, массивы, функции.
//
// Подсказка: используйте цикл for и typeof для проверки типов.

01.js

// 1. class: constructor, методы экземпляра
class Counter {
  constructor() {
    this.count = 0;
  }
  increment() {
    this.count += 1;
    return this.count;

Задание

  • Взять index.html и style.css из исходного задания
  • Взять script.js из этого gist-а.
  • Файлы с уровнями отсюда
  • И, теперь главное -- сделать так, чтобы когда мы перешли с уровня на уровень, имеющийся обработчик (созданный в 28 строке, в функции on()) отключался, для того, чтобы второй уровень работал нормально.
// util functions
const list = (arrLike) => Array.from(arrLike);
const first = (selector) => document.querySelector(selector);
const all = (selector) => list(document.querySelectorAll(selector));
const child = (el, index = 0) => list(el.children)[index];
const text = (el, value = null) => {
if (value === null) {
return el && el.textContent;
{
"width": 7,
"height": 7,
"walls": [
"0:0",
"1:0",
"2:0",
"3:0",
"4:0",
"5:0",
// Все, что было раньше плюс
const makeCell = (x, y) => {
return "<div class='item' data-pos='" + x + ":" + y + "'></div>"
}
const makeRow = (y) => {
let row = "<div class='row'>";
for (let x = 0; x <= 10; x++) {
row += makeCell(x, y);
<!doctype html>
<html>
<head>
<title>SVG sample</title>
<link rel="stylesheet" href="./style.css" />
</head>
<body>
<main></main>
<div class="arrows">
<svg