[2026-05-17] sort: move songs/poems/toasts to separate files per item, clean songs.md
This commit is contained in:
@@ -1,10 +0,0 @@
|
||||
---
|
||||
title: "Google coursera по управлению проектами"
|
||||
aliases: ["keep-2024-12-06_22_30_09", "keep-import"]
|
||||
tags: ["sort", "keep-import", "timestamped"]
|
||||
updated: "2026-05-17"
|
||||
---
|
||||
# Google coursera по управлению проектами
|
||||
|
||||
Google coursera по управлению проектами курс - в список дел на самообучение
|
||||
Дилемма инноватора - курс? Книга? Уточнить
|
||||
@@ -1,13 +0,0 @@
|
||||
---
|
||||
title: "Гараж от забора 4700, ширина гаража 4500"
|
||||
aliases: ["keep-2025-01-20_16_59_24", "keep-import"]
|
||||
tags: ["sort", "keep-import", "timestamped"]
|
||||
updated: "2026-05-17"
|
||||
---
|
||||
# планирование гаража лаки парк
|
||||
Гараж от забора 4700, ширина гаража 4500
|
||||
Яма (колея траверсы) 790-1040
|
||||
Длина на машину 5.5м
|
||||
Гараж марьясовых - задний бампер впритирку
|
||||
4300*6030
|
||||
Гараж Степанов 4*8
|
||||
@@ -1,55 +0,0 @@
|
||||
---
|
||||
title: Не покупают никакой еды -
|
||||
aliases:
|
||||
- keep-2025-02-04_12_19_41
|
||||
- keep-import
|
||||
tags:
|
||||
- sort
|
||||
- keep-import
|
||||
- timestamped
|
||||
- стихи
|
||||
- мои-стихи
|
||||
- мои-песни
|
||||
updated: 2026-05-17
|
||||
---
|
||||
# Не покупают никакой еды -
|
||||
|
||||
Не покупают никакой еды -
|
||||
Все экономят вынужденно деньги:
|
||||
Корона косит стройные ряды,-
|
||||
Но люди вновь смыкаются в шеренги.
|
||||
|
||||
Закрыт Вухань, Анталия горит
|
||||
И в Дании поистребляли норок
|
||||
Но наш мужик всё у станка стоит
|
||||
И не пройдет к нам половецкий ворог
|
||||
|
||||
(Закрыт Кавказ, горит "Аэрофлот",
|
||||
И в Астрахани лихо жгут арбузы,-
|
||||
Но от станка рабочий не уйдет,
|
||||
И крепнут как всегда здоровья узы.)
|
||||
|
||||
Убытки терпит целая страна,
|
||||
Но вера есть, все зиждется в иконе,-
|
||||
Объявлена народная война
|
||||
Одной несчастной, бедненькой короне.
|
||||
|
||||
На трудовую вахту встал народ
|
||||
В честь битвы с новоявленною порчей,-
|
||||
Но пасаран, корона не пройдет,
|
||||
Короне - нет, и все, и бал окончен!
|
||||
|
||||
Я погадал вчера на даму треф,
|
||||
Назвав ее для юмора короной,-
|
||||
И понял я: корона - это блеф,
|
||||
Она теперь мне кажется палёной.
|
||||
|
||||
Во мне теперь прибавилось ума,
|
||||
Себя я ощущаю просвещённо,
|
||||
И понял я: корона - не чума,-
|
||||
У каждого всегда своя корона!
|
||||
|
||||
Уверен я: короне скоро тлеть.
|
||||
А ну-ка - залп из тысячи орудий!
|
||||
Вперед! С Короны могут помереть
|
||||
Лишь мы (те), некоронованные, люди.
|
||||
@@ -1,57 +0,0 @@
|
||||
---
|
||||
title: Поприветствуем!
|
||||
aliases:
|
||||
- keep-2025-02-13_00_29_53
|
||||
- keep-import
|
||||
tags:
|
||||
- sort
|
||||
- keep-import
|
||||
- timestamped
|
||||
- поздравления
|
||||
- мои-песни
|
||||
updated: 2026-05-17
|
||||
---
|
||||
# Поприветствуем!
|
||||
|
||||
Поприветствуем!
|
||||
Вот перед нами король вечеринок
|
||||
Лучший для нас среди прочих блондинок
|
||||
Трезвый куражится словно бухой
|
||||
Но был наш герой не с рожденья такой
|
||||
|
||||
Жил в эмиграции Павлиш Олег
|
||||
Бросила жена он бухал как генсек
|
||||
Сел на мели посредине Бали
|
||||
Ловил просветление с утра спохмели
|
||||
|
||||
Всёж иногда протрезвевшим он был
|
||||
Тогда ел грибы и прозренье ловил
|
||||
Акции, фьючерсы, бабки, обнал
|
||||
Бабов по пятницам практиковал
|
||||
|
||||
Но тут он решил переехать в Бишкек
|
||||
Чтоб на Бали не закончить свой век
|
||||
Вобщем друзья завелися тут быстро,
|
||||
Еще бы, уж год как тут живут программисты!
|
||||
|
||||
Припев:
|
||||
И взвыла печень от бухла, дымится ум!
|
||||
И краска жизни вдруг ушла от грустных дум
|
||||
Но наш Олег - он парень цепкий, не дурак
|
||||
Он чистит печень, карму, чакры, зодиак!
|
||||
|
||||
Мантры, ашрамы, ретриты, посты,
|
||||
Веганство, йога и дух чистоты.
|
||||
Но в жизни без джина не нужен успех,
|
||||
И вот он вернулся, чтоб радовать всех!
|
||||
|
||||
Снова с друзьями – но только без драмы,
|
||||
С шутками, светом, без грязи и хлама.
|
||||
"Всё трансцендентно!" – заявит герой,
|
||||
"Теперь у меня позитивный настрой!"
|
||||
|
||||
Припев:
|
||||
И вот собрались мы чтоб друга развязать
|
||||
Чтоб водкой, пивом, и Бишкеком накачать
|
||||
Чтоб день рожденья закружил чад кутежа
|
||||
И с кармой чистой ты усыновил бомжа!
|
||||
@@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "Масло 270000"
|
||||
aliases: ["keep-2025-12-05_17_53_00", "keep-import"]
|
||||
tags: ["sort", "keep-import", "timestamped"]
|
||||
updated: "2026-05-17"
|
||||
---
|
||||
# Сервисный график BMW
|
||||
|
||||
Масло 270000
|
||||
Фильтр возд 262200
|
||||
Фильтр топливный, свечи 262400
|
||||
цепь 184640
|
||||
Кардан крестовина 262400 (246000) смазка раз в 10000
|
||||
|
||||
Liqui moly top tec 5W30 4600
|
||||
@@ -1,229 +0,0 @@
|
||||
---
|
||||
title: "Below is the exact Node-RED flow construction, starting afte"
|
||||
aliases: ["keep-2026-02-04_14_44_55", "keep-import"]
|
||||
tags: ["sort", "keep-import", "timestamped"]
|
||||
updated: "2026-05-17"
|
||||
---
|
||||
# Лаки Парк автоматизация приточной вентиляции Node-RED flow
|
||||
|
||||
Below is the exact Node-RED flow construction, starting after what you already have:
|
||||
✔ CO₂ sensors
|
||||
✔ target values
|
||||
✔ per-room demand calculation (raw_demand, %)
|
||||
No philosophy, no theory — only execution order and nodes.
|
||||
|
||||
FLOW OVERVIEW (WHAT YOU WILL BUILD)
|
||||
[room demand msgs]
|
||||
↓
|
||||
(1) Demand Aggregator
|
||||
↓
|
||||
(2) Intake Allocation
|
||||
↓
|
||||
(3) Discretization per damper
|
||||
↓
|
||||
(4) Intake Damper Outputs
|
||||
↓
|
||||
(5) Exhaust Arbitration
|
||||
↓
|
||||
(6) Exhaust Dampers
|
||||
↓
|
||||
(7) Exhaust Fans
|
||||
↓
|
||||
(8) Kitchen Hood
|
||||
|
||||
1️⃣ Demand Aggregator (stateful)
|
||||
Node
|
||||
Function — Aggregate room demands
|
||||
Inputs
|
||||
Messages like:
|
||||
msg.room = "bedroom"
|
||||
msg.raw_demand = 12.3
|
||||
Code
|
||||
let demands = flow.get("room_demands") || {};
|
||||
demands[msg.room] = msg.raw_demand;
|
||||
flow.set("room_demands", demands);
|
||||
|
||||
msg.demands = demands;
|
||||
return msg;
|
||||
✅ One instance only
|
||||
✅ All room demands feed into it
|
||||
|
||||
2️⃣ Intake Allocation (continuous %)
|
||||
Node
|
||||
Function — Intake allocation
|
||||
Input
|
||||
msg.demands = {
|
||||
bedroom,
|
||||
kids,
|
||||
living,
|
||||
kitchen,
|
||||
...
|
||||
}
|
||||
Code
|
||||
// rooms WITH intake dampers
|
||||
const ROOMS = ["bedroom", "kids", "living"];
|
||||
|
||||
const PRIORITY = {
|
||||
bedroom: 1.0,
|
||||
kids: 1.0,
|
||||
living: 1.2
|
||||
};
|
||||
|
||||
let weighted = {};
|
||||
let sum = 0;
|
||||
|
||||
for (let r of ROOMS) {
|
||||
let d = msg.demands[r] || 0;
|
||||
weighted[r] = d * (PRIORITY[r] || 1);
|
||||
sum += weighted[r];
|
||||
}
|
||||
|
||||
if (sum === 0) return null;
|
||||
|
||||
let allocation = {};
|
||||
for (let r of ROOMS) {
|
||||
allocation[r] = 100 * weighted[r] / sum;
|
||||
}
|
||||
|
||||
msg.intake_pct = allocation;
|
||||
return msg;
|
||||
Output example:
|
||||
intake_pct: {
|
||||
bedroom: 35.2,
|
||||
kids: 22.1,
|
||||
living: 42.7
|
||||
}
|
||||
|
||||
3️⃣ Discretization (critical)
|
||||
3A — Bedroom / Kids (0 / 33 / 66 / 100)
|
||||
Node
|
||||
Function — Discrete damper (std)
|
||||
Code
|
||||
function snap(x) {
|
||||
if (x < 10) return 0;
|
||||
if (x < 33) return 33;
|
||||
if (x < 66) return 66;
|
||||
return 100;
|
||||
}
|
||||
|
||||
msg.payload = snap(msg.payload);
|
||||
return msg;
|
||||
Wiring
|
||||
change node before:
|
||||
msg.payload = msg.intake_pct.bedroom
|
||||
Duplicate for kids
|
||||
|
||||
3B — Living (dual-damper state machine)
|
||||
Node
|
||||
Function — Living dual damper logic
|
||||
Input
|
||||
msg.payload = intake_pct.living
|
||||
Code
|
||||
let p = msg.payload;
|
||||
let A = 0, B = 0;
|
||||
|
||||
if (p < 10) {
|
||||
A = 0; B = 0;
|
||||
} else if (p < 30) {
|
||||
A = 66; B = 0;
|
||||
} else if (p < 55) {
|
||||
A = 66; B = 66;
|
||||
} else if (p < 80) {
|
||||
A = 100; B = 66;
|
||||
} else {
|
||||
A = 100; B = 100;
|
||||
}
|
||||
|
||||
msg.damperA = A;
|
||||
msg.damperB = B;
|
||||
return msg;
|
||||
|
||||
4️⃣ Intake Damper Outputs
|
||||
Per damper
|
||||
Call service (or number.set_value / cover.set_position):
|
||||
Bedroom damper ← payload
|
||||
Kids damper ← payload
|
||||
Living damper A ← msg.damperA
|
||||
Living damper B ← msg.damperB
|
||||
Add rate-limit node before each:
|
||||
1 msg / 30–60 s
|
||||
|
||||
5️⃣ Exhaust Arbitration (shared logic)
|
||||
Node
|
||||
Function — Exhaust arbitration
|
||||
Code
|
||||
let d = msg.demands;
|
||||
|
||||
msg.exhaust = {
|
||||
at2_1: Math.max(
|
||||
d.toilet || 0,
|
||||
d.shower || 0,
|
||||
d.kitchen || 0
|
||||
),
|
||||
at2_2: Math.max(
|
||||
d.bathroom || 0,
|
||||
d.office || 0
|
||||
)
|
||||
};
|
||||
|
||||
return msg;
|
||||
|
||||
6️⃣ Exhaust Branch Dampers (ON/OFF)
|
||||
Per branch
|
||||
Function — Exhaust damper gate
|
||||
Input
|
||||
msg.raw_demand
|
||||
Code
|
||||
msg.payload = msg.raw_demand > 0 ? "ON" : "OFF";
|
||||
return msg;
|
||||
Branches:
|
||||
Toilet → AT2-1
|
||||
Shower → AT2-1
|
||||
Kitchen exhaust → AT2-1
|
||||
Bathroom → AT2-2
|
||||
Office → AT2-2
|
||||
|
||||
7️⃣ Exhaust Fan Speed Control
|
||||
Node
|
||||
Function — Fan speed
|
||||
Code
|
||||
function speed(d) {
|
||||
if (d < 5) return 30; // baseline
|
||||
if (d < 20) return 50;
|
||||
if (d < 40) return 70;
|
||||
return 100;
|
||||
}
|
||||
|
||||
msg.payload = speed(msg.payload);
|
||||
return msg;
|
||||
Apply separately to:
|
||||
AT2-1 (msg.exhaust.at2_1)
|
||||
AT2-2 (msg.exhaust.at2_2)
|
||||
Add rate-limit (slow).
|
||||
|
||||
8️⃣ Kitchen Hood (3-speed)
|
||||
Node
|
||||
Function — Hood control
|
||||
Code
|
||||
let d = msg.demands.kitchen || 0;
|
||||
|
||||
if (d < 10) msg.payload = 0;
|
||||
else if (d < 30) msg.payload = 1;
|
||||
else if (d < 60) msg.payload = 2;
|
||||
else msg.payload = 3;
|
||||
|
||||
return msg;
|
||||
Gate with:
|
||||
current_state (manual override active → block automation)
|
||||
|
||||
DONE — SYSTEM IS COMPLETE
|
||||
You now have:
|
||||
Central arbitration
|
||||
Discrete damper logic
|
||||
Shared exhaust handling
|
||||
Passive intake correctness
|
||||
Zero oscillation risk
|
||||
Next steps (optional, later):
|
||||
Trend-based exhaust boost
|
||||
Door sensors
|
||||
Manual override latches
|
||||
@@ -1,11 +0,0 @@
|
||||
---
|
||||
title: "Performance review вопросы"
|
||||
aliases: ["performance-review-вопросы", "keep-import"]
|
||||
tags: ["sort", "keep-import"]
|
||||
updated: "2026-05-17"
|
||||
---
|
||||
# Вопросы для Performance review из Lead Dev masterclass
|
||||
|
||||
- Are you happy with my work?
|
||||
- What I suck at?
|
||||
- How can I improve?
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
title: "Zoom ссылка"
|
||||
aliases: ["zoom-ссылка", "keep-import"]
|
||||
tags: ["sort", "keep-import"]
|
||||
updated: "2026-05-17"
|
||||
---
|
||||
# Моя Zoom ссылка
|
||||
|
||||
https://duckduckgo.zoom.us/my/malex
|
||||
@@ -1,11 +0,0 @@
|
||||
---
|
||||
title: "Алтай счётчик — заявление"
|
||||
aliases: ["алтай-счётчик-заявление", "keep-import"]
|
||||
tags: ["sort", "keep-import"]
|
||||
updated: "2026-05-17"
|
||||
---
|
||||
# Алтай счётчик — заявление
|
||||
|
||||
Чтобы подать заявление на подключение электричества в домик на Алтае
|
||||
|
||||
ЛК, заявление на замену счётчика, на столбе. На основании ФЗ 522 из-за неисправности счётчика: когда включается несколько приборов трещит, появляется запах
|
||||
@@ -1,11 +0,0 @@
|
||||
---
|
||||
title: "Антирадар"
|
||||
aliases: ["антирадар", "keep-import"]
|
||||
tags: ["sort", "keep-import"]
|
||||
updated: "2026-05-17"
|
||||
---
|
||||
# Антирадар
|
||||
|
||||
Doppler pro wifi
|
||||
|
||||
Добавить в список заказать для мерседеса
|
||||
Reference in New Issue
Block a user