Ответ на пост «Пиратим? :)»2
У них там у буржуев 2 вида софта: обычный и пиратский. И у нас тоже 2 вида софта: обычный и лицензионный.
Привет всем. Решил поделиться программой, которую сделал для себя и коллег. Может, кому-то пригодится. А может, кто то найдёт ей применение и не в стройке.
Увидел, как напарник мучается, переписывая старую смету под новый объект - и пришла идея упростить этот процесс. Часто используемые виды работ собрал в каталог, их нужно просто добавить в смету, подправить цены, экспортировать и отправить на согласование заказчику.
Как работает:
- Слева каталог работ с подразделами, работы можно добавлять, редактировать, удалять.
- Справа окно сметы, состоящее из блоков, итог считает сама.
- Экспорт в Excel (с формулами) и в PDF.
- Есть встроенный калькулятор — посчитать площадь стен, пола, объём стяжки.
- Можно вести несколько смет одновременно, переключаться вкладками.
- Автосохранение каждого действия.
Программа работает без установки. В систему не лезет. Файлы автосохранения и каталога в папке программы.
Скомпилировал пока под win 10/11.
Вроде явные ошибки и баги отловил, но может что то осталось.
Название "AK43smeta" ни с чем не связано, просто осталось от другого проекта)).
Может кому-то сэкономит время и принесет пользу.
Программа лежит на гитхабе
Недавно понадобилось вытащить данные из QR-кода на кассовом чеке. Чек уже успел пожить: слегка затёрт, плюс классические полоски от грязной головки при термопечати. Сканеры и приложения дружно говорили «не удалось распознать».
Первая мысль была классическая: открыть фото в редакторе и просто перерисовать все эти чёрные и белые квадратики руками. Через минут пятнадцать я понял, что это путь в никуда. Модулей там несколько сотен. Глаза уже начинали плыть, а я ещё даже до середины не добрался.
Тогда началось самое интересное — думалка.
Сначала хотелось полностью автоматизировать. Натравить какую-нибудь нейросеть, чтобы она «восстановила» картинку. Но чем больше я об этом думал, тем сильнее понимал: нейросеть на таких грязных данных легко начнёт фантазировать. А мне нужна не красивая картинка, а точный код, который реально прочитается.
В итоге пришло решение, которое оказалось самым правильным: самый мощный, бесплатный и пока не превзойдённый ИИ на планете — человеческий мозг. Но использовать его нужно умно, а не заставлять человека тупо тыкать в каждую точку с нуля.
Вот как это выглядит в деле.
Сначала просто загружаешь фото:
Дальше можно нормально подготовить снимок: обрезать, повернуть, подкрутить экспозицию, яркость, контраст, гамму, насыщенность, шумоподавление и резкость. После каждого изменения программа сразу пытается прочитать QR.
Часто уже на этом этапе хватает. Если код прочитался — программа сразу выдаёт чистый QR и сами данные. Их можно скопировать, а код сохранить картинкой. И всё, дальше идти не нужно.
Если же даже после всех правок фото код всё равно молчит — тогда включается более тяжёлая артиллерия. Программа сама находит область, считает размер модуля и строит сетку.


Если чек снят криво или бумага изогнута — можно выровнять автоматически по finder-паттернам или потянуть контрольные точки руками:
И только если совсем ничего не помогает — начинается самый крайний режим: построчная проверка каждого модуля. Программа предлагает цвет, а ты только подтверждаешь или инвертируешь (пробел / X).


Всё это работает полностью локально в браузере. Фото никуда не уезжает.
Получился такой гибрид: компьютер делает всю тяжёлую и нудную работу по геометрии, измерению яркости и попыткам прочитать код, а финальное решение в сложных случаях оставляет человеку. Потому что на грязном чеке с полосками именно глаз пока ещё лучше любого алгоритма понимает «это чёрный или уже почти белый».
Инструмент лежит здесь: https://zoommax.space/
Если у кого-то валяется такой же «полумёртвый» QR с чека, наклейки или старой распечатки — можете попробовать. Интересно, насколько далеко можно зайти с сильно повреждёнными кодами.
А вы когда-нибудь пытались вручную восстанавливать QR? Какие ощущения остались?
Открываешь Agent, пишешь «почини баг» или «сделай нормально» — и через минуту diff на три файла, которые ты не трогал. Час откатываешь и злишься на модель. У меня на разборах это почти всегда не «тупой ИИ», а промпт без границ и без критерия «готово».
Ниже — формула из пяти блоков и семь шаблонов под типовые задачи. Копируй каркас, подставь свои пути и команды. Чужой готовый текст без ваших @файлов и npm test снова даст «стандартное» решение не туда.
Рабочий промпт читается как тикет: где сломалось, что сделать, чего не трогать, как ответить, как проверить.
1. Контекст — ветка, @файл, stderr целиком, что уже пробовали.
2. Цель — одно действие. Не «улучши проект».
3. Ограничения — не трогать package.json, не менять публичный API, править только src/foo.ts.
4. Формат — diff в одном файле / план из N пунктов / таблица «было — стало».
5. Проверка — npm test -- …, зелёный кейс, или ручной сценарий из 2–3 шагов.
Постоянные запреты лучше держать в .cursor/rules, в чате оставлять цель и проверку. К коду всегда цепляйте минимум один @ — иначе агент ищет похожие имена по всему дереву.
Контекст: ветка fix/login, файл @src/auth/login.ts, падает тест «invalid password» (лог ниже).
Цель: исправить причину падения без смены поведения для валидного пароля.
Ограничения: не менять @src/auth/types.ts и не добавлять зависимости.
Формат: правки только в @src/auth/login.ts, в конце — 2–3 предложения «что было не так».
Проверка: npm test -- login.test.ts — все кейсы зелёные.
Антипример: «Почини логин, что-то сломалось» — можно получить переписанную авторизацию и сломанную регистрацию.
Проверь себя: файл + имя теста/ошибка; что считать регрессией; команда одной строкой; один чат = одна гипотеза. Не помогло — новый чат: «попытка 2: …» + факты из diff и stdout, без эмоций.
Контекст: @src/components/OrderForm.tsx — дублируется валидация полей (строки 40–90).
Цель: вынести валидацию в хук useOrderValidation без изменения UI и пропсов формы.
Ограничения: не трогать стили, не переименовывать экспорты, не менять тесты кроме импортов при необходимости.
Формат: сначала короткий план из 3 шагов, после моего «ок» — diff.
Проверка: npm run lint && npm test -- OrderForm — без новых warning.
Антипример: «Отрефактори, сделай красиво» — агент сменит библиотеку форм или разнесёт файл на пять модулей.
Граница — один модуль или явный список файлов. Если тестов нет — честно: «тестов нет, проверяю вручную: сценарий А, Б». Для React отдельно: «поведение для пользователя не меняется» + клики/поля. Для Python: «сигнатуры публичных функций те же».
Контекст: @src/utils/price.ts, функция formatPrice; покрытия нет.
Цель: добавить unit-тесты на граничные значения: 0, отрицательное, большое число, null.
Ограничения: Vitest, файл тестов @src/utils/price.test.ts, не менять реализацию formatPrice.
Формат: только тесты + краткая таблица «кейс — ожидание» в комментарии к describe.
Проверка: npx vitest run price.test.ts — 100% pass.
Антипример: «Напиши тесты на utils» — появится Jest, файлы в tests/, и прод-код «чтобы тесты прошли».
Назовите фреймворк и путь. Явно: «не менять прод-код». Перечислите граничные кейсы, не «покрой всё». Перед генерацией откройте @ на сам модуль — иначе агент выдумает поля.
Контекст: @Legacy/importPipeline.js, меняю только шаг нормализации (функция normalizeRow).
Цель: объяснить поток данных от входа CSV до записи в БД — только цепочка вызовов.
Ограничения: не предлагать рефакторинг и не писать код.
Формат: нумерованный список шагов (≤12 пунктов) + один абзац «где ломается при битой строке».
Проверка: я могу вслух пройти по списку и указать файл каждого шага; если шаг без файла — ответ неполный.
Антипример: «Объясни этот файл» — пересказ строк и совет «перепиши на TypeScript».
Здесь уместен Ask: только анализ. Точка входа обязательна. Для больших репо: «игнорируй vendor/» / «смотри только apps/api/». Если ответ расползается — ужесточите лимит: «не больше 12 пунктов, на каждый — один файл».
Контекст: Next.js app, уже есть @app/settings/page.tsx; нужна смена языка интерфейса.
Цель: план внедрения i18n без реализации — файлы, которые затронем, риски.
Ограничения: не добавлять код в этом чате; не выбирать библиотеку без сравнения 2 вариантов.
Формат: таблица «шаг | файл/папка | риск | как проверить» + открытые вопросы (≤5).
Проверка: по плану можно оценить трудозатраты; у каждого шага есть способ проверки.
Антипример: «Добавь мультиязычность» — пакет уже стоит, десять страниц переписаны, сборка красная.
Запретите реализацию в этом сообщении (Plan или дисциплина «только план»). Реализацию шага 1 — отдельным чатом.
Контекст: git diff в ветке feature/notifications (только @src/notifications/*).
Цель: найти риски перед merge: безопасность, регрессии, нарушение rules.
Ограничения: не править код; не предлагать «переписать всё».
Формат: список findings с severity high/medium/low; на каждый — файл и строка.
Проверка: каждый high привязан к конкретному фрагменту diff; если high нет — явно написать «high не найдено».
Антипример: «Посмотри, норм ли?» — «в целом хорошо, можно мержить» без строк.
Ограничьте область diff. CI гоняете вы сами — агент не заменяет pipeline. Запреты (API-ключи в репо, console.log в prod) удобно держать в rules, чтобы ревью сверялось с ними.
Контекст: @src/api/webhooks/stripe.ts, экспорт handleStripeEvent.
Цель: JSDoc + пример вызова для внутренней wiki (русский язык).
Ограничения: не менять логику; не документировать приватные хелперы; ≤15 строк на блок.
Формат: JSDoc над функцией + markdown-блок «Пример» с телом запроса и ожидаемым статусом.
Проверка: по доке новый разработчик может вызвать webhook в Postman без чтения всего файла.
Антипример: «Задокументируй API» — generic параметры без тел и кодов ошибок.
Укажите конкретный экспорт, язык, лимит объёма и пример с реальными полями из типов, не foo/bar.
### Типичные грабли
Симптом — Что проверить
Правки не там — `@файл` + «только этот модуль»
«Сделал», но не работает — Команда lint/test или ручной сценарий в промпте
Разросся diff — Несколько целей в одном сообщении → новый чат, одна цель
Повторяет старую ошибку — Нет «что уже пробовали» — попытка 1, результат
Смешали Ask и Agent — «Почему падает?» ≠ «исправь и прогони тест» — разные чаты
Нет checkpoint — Перед рискованным промптом — коммит или stash
Промпт-роман — Пять экранов хуже пяти строк формулы; вытесняет rules
Агент снова лезет в package.json — Допишите rule, а не третий раз орёте в чат
Это не серебряная пуля: rules, открытая папка проекта, выбранная модель и чистый git — фундамент. Промпт — надстройка на одну итерацию. Нормальный цикл: промпт — проверка — уточнение. После трёх итераций тупик — упростите цель или разбейте на два чата.
Чеклист на завтра
• Взять последнюю задачу, где агент «навредил», переписать исходный промпт по одному из семи шаблонов
• В каждом промпте на код — минимум один @ и блок «Проверка»
• Постоянные запреты вынести в .cursor/rules, в чате оставить цель + проверку
• Перед рискованным Agent — git commit или stash
• Ask и Agent не мешать в одном чате
• Если восьмая повторяющаяся задача (миграция, релиз) — завести восьмой шаблон по той же формуле
У кого какой обход/шаг сработал на реальном репо? Напишите в комменты — интересен именно ваш стек и команда проверки, не абстрактный «идеальный промпт».
У меня на разборах почти каждую неделю одна и та же история: человек открыл чат в браузере, попросил «сделай сайт», вставил куски в проект — через день всё разъехалось. Потом вердикт: «вайбкодинг не работает».
Работает другое: правка реального репозитория в редакторе с ИИ. Вы держите цель и критерий «готово», модель предлагает патч, вы читаете diff и принимаете или откатываете. Не замена программирования — ускорение рутины при вашей проверке.
Ниже — определение без маркетинга, когда Cursor уместен, типичные провалы и первый безопасный сценарий на один вечер. Серебряной пули нет: без чтения diff это генерация текста, не разработка.
Шаг 1. Чем вайбкодинг не равен «промптам в ChatGPT»
Вайбкодинг (vibe coding) — цикл: формулируете задачу — ИИ предлагает изменения в файлах — читаете diff — принимаете, правите запрос или откатываете. «Вайб» здесь про поток итераций, не про «пиши код настроение».
Три условия, без которых термин превращается в рекламу:
1. Редактор с контекстом — открыта папка проекта (Open Folder), не один файл в блокноте.
2. Режим с действием — в Cursor это Agent (правит файлы), а не только болтовня.
3. Ваша проверка — запуск, тест, взгляд в браузер, git diff. Без этого — генерация текста.
Типичная путаница: скопировали ответ из браузерного чата — в проекте нет связи с файлами — «не запускается». Лечится не новым промптом, а открытием папки и работой внутри репозитория.
Вайбкодинг не снимает:
- Архитектуру и границы — кто с чем связан, где данные. Модель предложит «логичную» структуру; ваши бизнес-ограничения знает только текст, который вы дали.
- Ключи и доступы — ключи API, пароли, персональные данные не должны уезжать в промпты и логи. .env и ротация токенов — ваша зона.
- Ответственность за прод — деплой, бэкап, откат. Кнопку «в прод» жмёт человек.
- Согласование с заказчиком — сроки и объём код не ускоряет.
Честный минимум грамотности: файл, функция, ошибка в консоли, git commit. Без этого вы зависите от каждого ответа модели. Нормальный старт для новичка: «объясни эту ошибку и предложи один фикс».
Ожидание — Реальность
«ИИ сам всё поймёт» — Нужен контекст: файлы, rules, примеры
«Git не нужен» — Git или копия — страховка от плохого diff
«Сразу большой проект» — Сначала модуль или одна фича
«Без проверки» — Хотя бы ручной чеклист за 5 минут
Классика: алгоритм — набор — запуск — фикс.
Вайбкодинг: намерение — патч от модели — оценка патча — уточнение. Ручной набор не исчезает: правите строки, когда diff «почти верный», или когда быстрее самому.
Что меняется по навыкам:
- фокус с синтаксиса на спецификацию поведения («при пустом email — подсказка, форму не слать»);
- больше мелких итераций за час;
- чтение diff становится таким же навыком, как писать цикл;
- промпт = тикет: плохой тикет — не то.
Пример с формой. Классика: находите handler, пишете if (!email), проверяете в браузере. Вайбкодинг: в Ask — «где сейчас валидация», в Agent — «добавь проверку email и сообщение под полем, не меняй стили», смотрите diff, поднимаете dev-сервер.
Риск по умолчанию: модель любит переписать лишнее («заодно улучшил»). В промпте режьте явно: «только файл X», «не трогай CSS», «без новых зависимостей». Помогают Rules / короткий AGENTS.md в корне.
Совпадают несколько условий:
1. Задача локальна — один репозиторий, лендинг, скрипт, плагин. Не «десять сервисов с нуля за вечер».
2. Есть или будет папка на диске (лучше с git).
3. Вы можете проверить результат: страница, npm run dev, traceback.
4. Итерации короткие — фича на 20–60 минут, не «перепиши всё приложение».
5. Есть эталон — «как на странице Y», скрин, кусок кода, дока.
Слабые сценарии для старта: прод без staging/бэкапа; legacy без тестов и без человека, который помнит «почему так»; «сделай как у конкурента» без ТЗ и без доступа к коду; персональные данные без политики обработки.
Чеклист «готов ли я вайбкодить эту задачу»:
• Результат в одном предложении
• Знаю файл или модуль
• Проверка за 5 минут
• Есть откат (git или копия)
• Понимаю, что не должно измениться
Пять галочек — хороший кандидат. Две — сначала сузьте задачу. Agent включайте, когда план ясен; если не знаете, где живёт логика — сначала Ask и поиск по файлам.
Ускоряются и хорошие, и плохие правки.
- Раздувание diff — переименования, формат соседних файлов, «улучшения». Через неделю — конфликт или регрессия.
- Несуществующие API — уверенный вызов функции, которой нет в вашей версии package.json.
- Ключи в коде — токен из примера уехал в репозиторий. В diff ищите api_key, password, token.
- Отказ от git — каждый эксперимент лотерея. Минимум: коммит «до Agent», коммит «после проверки».
- Оракул-промпт — «сделай CRM» одним махом. Режьте: модель данных — одна форма — список — фильтр.
Риск — Как снижать
Большой diff — Лимит файлов в промпте, Rules
Галлюцинации API — Дока + версия в package.json
Утечка ключей/токенов — `.env`, ручной diff, pre-commit
Слепое принятие — Понимать каждую принятую правку
Выгорание — Малые победы, не «до 3 ночи»
Полезно вести лог на две недели: что просили — что изменилось — что проверили. Паттерн ошибок почти всегда один: слишком большой запрос и нет критерия готовности.
Не начинайте с «нового SaaS». Провал должен быть дешёвым.
Задача: в существующем статическом HTML или React-странице добавить блок «Контакты» (email + ссылка), стили в том же файле/модуле, без новых библиотек.
Почему безопасно: 1–2 файла, видно в браузере, легко откатить.
Шаги:
1. Копия папки или git checkout -b vibe-first.
2. Open Folder в Cursor, глянуть README / package.json.
3. Ask: «Где рендерится главная? Перечисли файлы, код не меняй.»
4. Agent: «В файле … добавь секцию Contact с … Другие секции не трогай.»
5. Dev-сервер, проверка в браузере.
6. git diff, коммит с понятным сообщением.
Альтернатива не-фронту: Python-скрипт — читает CSV, считает сумму по столбцу. Один файл, проверка на тестовом CSV.
Ограничения вслух: не подключать оплату/авторизацию/внешние API; не трогать прод; не «оптимизировать весь проект».
После успеха — форма с валидацией; потом Rules под стиль кода. Лестница вверх, не прыжок в сложность.
Оценка не «сколько промптов», а «от запроса до работающей фичи».
1. Intent — одно предложение для пользователя: «Под email — ошибка, если формат неверный». Не «сделай красиво».
2. Scope — какие файлы трогаем и что не трогаем: «только ContactForm.tsx, стили из существующего module.css».
3. Patch — Agent правит, вы читаете diff. Diff больше трети файла без причины — стоп, уточнение.
4. Verify — happy path, пустое поле, кривой формат, соседняя кнопка не отвалилась.
На мелкой задаче цикл укладывается в 30–45 минут. Время обычно жрёт неясный intent и принятие лишнего diff.
Признак, что цикл удался: можете объяснить коллеге, что изменилось, без открытия чата; есть коммит или копия до/после; следующий шаг маленький, а не «теперь всё приложение».
Одна строка после сессии: «Сегодня я …, проверил …, следующий шаг …». Это отделяет вайбкодинг от бесконечного чата.
### Типичные грабли
Симптом — Что проверить
«ИИ написал, но не запускается» — Код из браузерного чата без связи с проектом → Open Folder
«Всё сломалось после одного запроса» — Приняли большой diff без чтения → git / Local History
«Не понимаю, что он менял» — Сразу Agent без карты → сначала Ask
«Хочу без кода вообще» — Нет критерия готовности → мини-задача с проверкой за 5 минут
Diff на полрепозитория — Промпт широкий → один файл + «не трогай …»
Падает на API библиотеки — Сверить с докой и версией в package.json
Ключ в репозитории — Diff на token/password; вынести в `.env`
• Описать одну задачу одним предложением + критерий «готово»
• Открыть папку проекта в Cursor (не один файл)
• Сделать ветку или копию «до экспериментов»
• Ask: где живёт нужная логика — без правок
• Agent: один файл, явные «не трогай», без новых зависимостей
• Прочитать diff глазами; при сомнении — откат
• Проверка за 5 минут (браузер / скрипт / traceback)
• Коммит «после проверки» + одна строка лога сессии
У кого какой первый сценарий реально зашёл — HTML-блок, форма или скрипт на CSV? Напишите в комменты, что сломалось на diff.
Утилита для хранения заметок на рабочем столе Windows.
Таких программ много. Раньше в состав винды входила и я ей активно пользовался.
Потом куда-то эти заметки пропали из поставки Windows, по крайней мере у меня их дома нет, и на работе не было.
Решил сам написать. Вот что получилось:



Окно заметки, редактирование, скины, установка напоминания к заметке.
Возможности:
- изменение размера за нижний правый угол,
- изменение прозрачности заметки,
- изменение шрифта, размера шрифта, выравнивания текста,
- изменение цвета заметки,
- закрепление заметки поверх других окон,
- сворачивание заметки в заголовок.
Сама программа сидит в трее.
Перемещать, как обычно - за любое место заметки.
Добрый день. Представляю еще одно своё поделие. Прогу написал давным давно, нынче полностью переделал.
Утилита, выводящая на экран плавающие фигуры (стрелка, окружность, прямоугольник, звёзды). Фигуры расположены поверх элементов рабочего стола.
Может использоваться для помощи при проведении видеопрезентаций. Так я ее и использовал.
Вот так выглядела старая:


10 лет назад дело было. Называлась Picta, почему-то.
Все действия с фигурой производились только через контекстное меню, размеров и цветов было два.
Теперь это выглядит так:



Увеличил количество цветов, разнообразил фигуры (плюсом звезда и гексаграмма (так красиво шестиконечная звезда называется)). Самое главное: добавил горячие клавиши для быстрого управления фигурами:
Перемещение фигуры по экрану осуществляется за любую точку фигуры, где курсор меняет вид на руку. Выход и вход в режим настроек: клик правой кнопкой мыши по полю фигуры или кнопка Esc.
Настройки. (кнопки сверху, слева направо)
1. Добавление новой фигуры на экран.
2. Выбрать цвет.
3. Изменить фигуру на другую.
4. Изменение толщины линий.
5. Изменение прозрачности фигуры.
6. Окно "о программе", активация программы.
7. Убрать окно настроек.
8. Убрать фигуру с экрана.
Изменение размера окна (правый нижний угол) в режиме настроек изменяет размер фигуры.