Обновить
64K+

TypeScript *

Cтрого типизированная надстройка для JavaScript

109,68
Рейтинг
Сначала показывать
Порог рейтинга

Чуть лучше код

Короче, котаны, сейчас открою вам секрет, который бустанет вас нереально по качеству кода. Люди давние в профессии интуитивно чувствуют его, даже если никогда не слышали о нем. Самые признанные олды выступают на конференциях, как вы догадались, о мега секрете. Итак, барабанная дробь, хотя еще секунду, почему об этом хочется написать министатью, потому что иногда (а на деле слишком часто) стандартную задачу сходить за репортом и положить в базу нельзя переиспользовать и нельзя легко затестить. Речь пойдет о идемпотентности.

Что дано:

  1. поход в базу (начальные данные)

  2. поход по апи за списком (указателей или стримов)

  3. для каждого (репорта): поход по апи за данными и сохранение в базу

Легко пишем (неправильный) скрипт, кладем в крон и профит? Почти. Через пару лет в дев базе 2kk записей и селект ну очень долго ждать. Порядочные пацаны (и девушки) пишут тесты на sqlite, и неявно имплeмeнтируют идемпотентность, создавая и дропая базу данных на каждую пачку тестов. Sql insert не является идемпотентной операцией, но с пустой базой прокатывает.

В чем, собственно, проблема? Идемпотентность (от лат. idem — тот же самый и potens — сильный, буквально — равносильность) — свойство объекта или операции при повторном применении операции к объекту давать тот же результат, что и при первом. Так вот, sql insert и app_call(date_now) не обладают идемпотентностью.

Что делать? Как и в примере выше, создаем искусственную идемпотентность (да, этот термин повторится еще много раз), вынося в контекст доступ к базе, апи вызовы и т.д. (трансформация csv). Короче, контекст может быть пустой и код должен корректно работать. Или в контексте будет передан доступ к базе, но без апи вызовов или трансформации csv. И опять код должен работать корректно.

Чем заменить? Дефолтными значениями, как ни странно, дефолтные значения идемпотентны, если это, например, список и словарь. Удачного кодинга :)

P.S.: Хотел приложить примеры кода, но кол-во строк оказалось больше размера статьи :)

Теги:
-2
Комментарии3

Делаем профессиональное ревью кода и не пропускаем ни одного бага — вышел открытый инструмент Rеjudge, который проверяет код с помощью трех ИИ-агентов, а затем ИИ-судья выносит вердикт в готовый отчёт:

  • каждая ИИ-модель проверяет один и тот же запрос, разбирая его в изолированном контексте. При этом ни одна модель не видит, что делают другие;

  • ИИ-судья затем проверяет все три ответа, задаёт уточняющие вопросы там, где расходятся независимые проверки;

  • затем судья выдает один готовый отчет, где указывает все риски, баги и уязвимости в коде.

Теги:
+3
Комментарии1

Представлен открытый проект torlink, который умеет искать и работать с торрентами из проверенных источников. Запускается командой npx torlnk. Одновременно проверяет FitGirl, YTS, The Pirate Bay, 1337x, Nyaa и другие источники, а результаты показывает вместе с размером и числом сидов. Выбранный файл скачивается в фоне, а после завершения автоматически встаёт на раздачу.

«Найти торрент в наши дни — сплошная головная боль. Один сайт — это минное поле из поддельных кнопок загрузки. Другой скрывает настоящую ссылку под всплывающим окном, которое открывает ещё две вкладки. И после всего этого половина результатов — это неработающие сайты с нулевым количеством раздающих. Torlink — это программа для поиска торрентов, которая работает в вашем терминале, не требует никакой настройки и конфигурации. Один поиск проверяет короткий, тщательно отобранный список надёжных источников, и всё, что вы выберете, загрузится прямо на ваш компьютер. Файлы ваши, сохранены в папке загрузок», — пояснил автор проекта.

Теги:
+10
Комментарии0

Представлен открытый проект repowise — оптимизатор кодовых баз, который экономит токены в кодинге и работает с Claude Code, Cursor, Copilot:

  • не читает каждый файл, а сразу индексирует весь репозиторий;

  • создаёт документацию для каждого файла;

  • строит графы зависимости и анализирует историю Git с слабыми местами;

  • неиспользуемый код и устаревшие зависимости чистит сам;

  • результат: минимальная задокументированная экономия — 36%.

Теги:
+3
Комментарии0

Представлен открытый проект skales — ИИ‑агент, который запустится даже на слабом ПК:

  • работает как обычное приложение в Windows, macOS и Linux;

  • агент получает доступ к файлам, браузеру, почте и календарю;

  • умеет выполнять сложные задачи в фоновом режиме;

  • можно запланировать любую таску по таймеру;

  • своя встроенная память для важного контекста;

  • при этом команды отправлять можно даже со смартфона — агент выполнит их на ПК;

  • можно тестировать на бесплатном пробном режиме, подключить API или локальную модель.

Теги:
+3
Комментарии3

Открытый проект .MD this page позволяет преобразовать веб-страницу в чистый Markdown, готовый для ChatGPT, Claude, Gemini и других нейросетей. Решение очищает код сайта от рекламы, баннеров и другого мусора для отправки на обработку в ИИ. Есть предпросмотр, экспорт в .md и опция для мгновенного копирования сайта.

Теги:
+4
Комментарии1

Представлен открытый архитектурный инструмент Pascal Editor (3D building editor built with React Three Fiber and WebGPU), который работает прямо в браузере. Рисуем стены, перекрытия и крыши, ставим двери, окна и мебель, собираем несколько этажей и переключаемся между 2D‑планом и 3D. Готовый дом можно разобрать по этажам, пройтись по нему от первого лица и выгрузить в другие редакторы. Также к проекту можно подключить Codex и Claude Code и попросить ИИ создавать элементы здания.

Теги:
+6
Комментарии0

Представлен открытый SSH‑менеджер Termix, который работает без подписок или рекламы. Проект включает в себя как стандартные функции, так и расширенные:

  • 2FA для защиты доступа к серверам;

  • удобный интерфейс, разработанный на React и Tailwind CSS;

  • терминал SSH с разделением экрана, управлением SSH‑туннелями;

  • удалённый редактор файлов с подсветкой синтаксиса;

  • мониторинг вообще всех ресурсов серверов;

  • менеджер Docker и Podman‑контейнеров.

Теги:
+4
Комментарии0

Представлен открытый редактор презентаций Bento на замену PowerPoint. Презентация в Bento хранит внутри себя слайды, шрифты, картинки, анимации и весь редактор. Базовый файл весит около 560 КБ, открывается в браузере без установки и аккаунта, умеет сам себя сохранять, работает офлайн и даже поддерживает совместное редактирование с шифрованием.

Внутри Bento обычный JSON — поэтому презентацию могут напрямую редактировать ИИ-агенты. Есть графики, комментарии, режим докладчика, PDF-экспорт и анимации между слайдами.

Теги:
+6
Комментарии1

Открытый проект PriceGhost позволяет искать самые дешёвые и качественные товары в сети Интернет с помощью ИИ:

  • внутри команда ИИ‑агентов, которая проверяет сотни площадок с нужным вам товаром;

  • агенты сравнивают цены, сроки доставки, качество, характеристики, скрытые доплаты и комиссии, наличие страховки груза и прочее;

  • выдаётся подробный отчёт с инфографикой. ИИ также выдаст рекомендации, если товара не будет в наличии;

  • результат — можно купить вещь выгоднее и не ждать долго доставку, а ещё не навяжут скрытые условия.

Теги:
+6
Комментарии0

Фронтенд для души, бэкенд для людей!

Мастер по разводу холивар
Мастер по разводу холивар

Были приняты меры погрузиться под воду дабы показать серьезность моих намерений в данной щепетильной теме.

Фронтенд весь такой разносторонний, креативный, местами легкий, местами настолько сложный что ломаешь голову. Напрашивается клеймо "для любителей".

Бэкенд наоборот поддерживает порядок и структурность. Меньше экспериментов и больше проверенных решений, самое то для "сделал работу - пошел спокойно домой".

Теги:
+3
Комментарии2

Навайбкодил небольшое веб-приложение для управления ИИ-сервером под Ubuntu. Управляем произвольными systemd-сервисами, добавляем новые + спец. диалог для добавления llama-server как сервиса. Возможно, кому-то пригодится: aiservermanager.

Теги:
Всего голосов 5: ↑2 и ↓3+1
Комментарии1

Ближайшие события

Представлен открытый проект Voicetypr, который с помощью локальной ИИ умеет быстро транскрибировать речь:

  • благодаря аппаратному ускорению можно запустить на низкопроизводительном железе;

  • понимает более 99 языков;

  • есть клиенты под macOS и Windows;

  • есть опция автоматической вставки расшифрованного текста в поле возле курсора.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии1

Свой движок спинтакса: WordPress и Cloudflare Workers

Спинтакс это запись вида {a|b|c}, из которой генерятся вариации текста. Свой движок я допилил дальше базового синтаксиса: переменные #set и %var%, инклуды, условия {?VAR?…}, плюралы {plural %n%: …}, пост-обработка. Не рулетка со словами, а маленький язык шаблонов, где качество вшиваешь один раз.

Движок обкатан в проде на WordPress-плагине: рендерит вариации прямо в полях ACF и в карточках WooCommerce, детерминированно и локально, без внешних API.

Отдельно есть TS-реализация @spintax/core: zero dependencies, работает на Cloudflare Workers, в Node и в браузере. PHP на Worker не занесёшь, а рендерить хотелось на эдже. Обе реализации держу на одной лыже, чтобы не разъехались. В репозитории лежат Worker и Telegram-бот как рабочий пример.

Всё open source

Плагин: wordpress.org/plugins/spintax. Пакет: @spintax/core. Синтаксис и песочница: spintax.net.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Открытый проект T3MP3ST превращает ИИ‑агентов в системы для поиска уязвимостей в IT‑проектах:

  • это мультиагентная система, которая ищет любые уязвимости в сервисах;

  • нужно только указать цель и агенты сами проведут разведку, найдут баги и предоставят отчёт;

  • результаты — из 104 тестовых задач ИИ нашёл уязвимости в 90% с первой попытки.

  • удобный инструмент для изучения кибербезопасности на практике.

Теги:
Всего голосов 2: ↑2 и ↓0+4
Комментарии0

Стало возможно сэкономить до 60% токенов при использовании нейросети Fable 5 — представлен способ доработать ИИ-систему и платить Anthropic в разы меньше.

Инструмент pxpipe берёт полотна промптов и превращает их в картинку. При считывании изображений платить приходится за каждый обработанный пиксель, а не за буквы на нём, благодаря чему метод куда выгоднее. В демо автору удалось выполнить ту же задачу, что и обычным промптом, но в 7 раз дешевле: за $6 против $42. При этом Fable идеально считывает текст на картинках, несмотря на сжатие. В 39 протестированных картинках нейронка Anthropic безошибочно поняла весь промпт.

Ранее разработчики обратились к специализированному инструменту Caveman, который заставляет ИИ генерировать максимально краткие ответы с имитацией стиля речи «пещерного человека». Автор инструмента Джулиус Брюсси в своё время обратил внимание на то, что значительная часть бюджета компаний расходуется на «болтовню» языковых моделей. Caveman удаляет из ответов чат-ботов слова-связки, приветствия и вводные конструкции, сохраняя программный код, команды, URL-адреса и технические детали. 

Теги:
Всего голосов 4: ↑3 и ↓1+4
Комментарии1

Представлен открытый консольный клиент Torlink (требуется установка Node с nodejs.org):

  • утилита проверяет все источники, находит только проверенные и подбирает альтернативы при отсутствии файла на одном из них;

  • показывает размер, количество сидов и запускает загрузку прямо из терминала;

  • без регистрации. без ограничений.

Теги:
Всего голосов 3: ↑2 и ↓1+3
Комментарии1

Хотел просто тестировать свои OTP, а выкинул почтовый сервер

Я пилю штуки, где есть регистрация и 2FA. И регулярно упираюсь в одно и то же. Чтобы проверить, что письмо с кодом доходит и парсится на фронте правильно, мне на каждый прогон нужен свежий ящик. Заводить настоящие почты муторно. Сервисы временной почты это отдельная боль: их выпиливают, лимитируют, суют рекламу, а код то приходит через три минуты, когда он уже не нужен, то не приходит вовсе. В какой-то момент надоело.

И тут дошло, что задача сформулирована неправильно. Мне не нужен ящик. Мне нужно поймать одно входящее письмо и достать из него код. А для этого почтовый сервер не нужен вообще.

Приёмник почты без приёмника почты

Cloudflare Email Routing бесплатно ловит catch-all на мой домен и отдаёт письмо прямо в Worker, в email()-handler. Не пересылкой на другой ящик, а сырым письмом в код. Ни sendmail, ни Postfix, ни IMAP-поллинга. MX поднимается за меня, я только пишу обработчик.

Дальше то, ради чего я, собственно, и сел писать. Приём держит Email Routing. Доставку готового результата мне в чат держит Telegram Bot API. И то, и другое это инфраструктура, которую я не админю. На выходе рабочий транспорт для входящей почты без единого своего сервера, без SMTP, без IMAP и без своего IP, который можно потерять под блокировкой.

письмо → MX → Email Routing (catch-all) → Worker.email() → разбор → Telegram

По команде /start выдаётся адрес, вставляешь куда надо, письмо падает в чат. Адрес живёт сутки и умирает сам.

Самое интересное это достать код

Транспорт собирается за вечер. Реальная инженерия начинается там, где из произвольного письма надо надёжно вытащить именно код. Потому что «код» в письме конкурирует с номером заказа, годом, куском телефона, суммой, id внутри ссылки. Наивное «первые шесть цифр» хватает мусор примерно в половине случаев.

Поэтому не регэксп в лоб, а скоринг. Сначала нормализую тело: срезаю шапки пересылки, невидимый мусор, превращаю Текст <url> в нормальные ссылки, иначе скорер спотыкается об id из урлов. Потом собираю кандидатов: цифровые и буквенно-цифровые последовательности правдоподобной длины, от 4 до 8 символов. И раздаю баллы.

Вверх:

  • близость к триггерам: код, code, verification, OTP, подтвержд…;

  • стоит на отдельной строке;

  • выделен жирным или моноширинным.

Вниз, анти-паттерны:

  • похоже на год (19xx/20xx);

  • похоже на телефон;

  • стоит после заказ/order;

  • сидит внутри ссылки;

  • рядом знак валюты.

Кто набрал больше, тот и код. Уезжает в первую строку сообщения, тап, скопировал. Вот эта часть и заняла итерации, остальное обвязка.

Честные границы

Чтобы не выглядело рекламой бесплатного волшебства, сразу про ограничения.

Сервис эфемерный by design. Сутки, и адреса нет. На стороне бота ничего не хранится: письмо разбирается на эдже и улетает в чат, где живёт уже у тебя. Это не замена нормальной почте, а одноразовый ящик под отлов кодов.

Inbound-only. Отправить с него нельзя. Под мою задачу, тестировать собственные флоу, этого ровно достаточно.

И про экономику честно. Лично мне бесплатного тира хватало за глаза. Но KV на free это 1000 записей в сутки, и стоило решить сделать из поделки сервис для братьев по клаве, как квота на записи кончилась. Так что перед тем как открыть доступ наружу, я доплатил за Workers. «На чужой инфре» это правда, но не «бесплатно из воздуха»: транспорт всё равно стоит пять долларов в месяц.

Итог

Завернул в опенсорс: https://github.com/investblog/mailbot. Если тоже гоняешь регистрации и 2FA и устал от рулетки временной почты, может пригодиться целиком. А нет, забирай хотя бы скоринг OTP к себе, он отвязан от Telegram и переносится легко.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

archkit v0.1 — генератор TypeScript-библиотек с Clean Architecture: от спека до npm за один день

Неделю назад опубликовал на npm первый пакет, @autosergach/archkit. Одна команда:

npx @autosergach/archkit create my-lib

И получаешь TypeScript-библиотеку с Clean Architecture из коробки: domain, application, ports, рабочий use case и пять зелёных тестов. Не «hello world», а каркас который показывает как слои должны выглядеть. Ниже как это устроено и четыре грабли по дороге к npm publish.

Что внутри

my-lib/
├── src/
│   ├── domain/      # User, DomainError
│   ├── application/ # createUser use case
│   ├── ports/       # UserRepository interface
│   └── index.ts
├── tests/           # InMemoryUserRepository + 5 тестов
└── package.json     # ESM, strict TS, vitest 3, eslint 9

pnpm install && pnpm test, пять зелёных с первого запуска. Стек намеренно современный: ESM only, Node 20+, TypeScript 5.7+, vitest 3.2, eslint 9 flat config.

Архитектура изнутри

Забавно, что archkit изнутри устроен точно так же, как проект который генерирует: порты и адаптеры до мозга костей. Монорепо: приватный archkit-core (весь движок) и @autosergach/archkit (то что на npm). tsup бандлит core через noExternal, потребитель ставит один пакет.

FileSystemPort с двумя адаптерами: InMemoryFileSystemAdapter для тестов и NodeFileSystemAdapter для продакшена. Pipeline в три шага: buildInitPlan, renderTemplate, executePlan. С --dry-run третий шаг не выполняется.

Тесты: 35 + 3

35 unit-тестов гоняют весь движок через in-memory, без диска, меньше секунды на весь suite. 3 e2e-теста запускают настоящий pnpm install && pnpm test в os.tmpdir(). Именно они дают уверенность что сгенерированный проект работает у пользователя, и поймали несколько багов в шаблоне до публикации.

Один день с Claude Code

Весь v0.1.1, от пустой папки до npm publish, написал за одну сессию, примерно шесть часов. 9 атомарных коммитов: Claude Code писал код, я проверял и коммитил. До Claude Code такой объём занял бы неделю, и тесты я бы срезал.

4 урока из npm publish

1. cac и --no-X флаги. При --skip-install cac выставляет skipInstall: true по умолчанию, неявно. Фикс: проверять === true, а не !== undefined. Потерял час пока разобрался.

2. npm проверяет similarity, а не только занятость. archkit свободное имя, но npm отклонил из-за заброшенного arch-kit (2022, 12 загрузок). Ушёл в scoped namespace @autosergach/archkit, зато все следующие пакеты там же.

3. workspace:* в dependencies. Приватного archkit-core нет в registry. Если он в dependencies, npm падает при install у потребителя. Перенести в devDependencies, tsup бандлит его в dist.

4. Granular npm tokens и 2FA. Granular-токен с правами publish не проходит без «Bypass 2FA for publish». Опция выключена по умолчанию, нигде не выделена жирным. Получил 403.

Что дальше

v0.2: NestJS плюс React fullstack шаблон и --ai-ready флаг, который автогенерирует CLAUDE.md, .claude/settings.json, agents.md. Пишите в Issues если есть что сказать.

npm: https://www.npmjs.com/package/@autosergach/archkit
GitHub: https://github.com/autosergach/archkit

npx @autosergach/archkit create my-lib
cd my-lib && pnpm install && pnpm test
# → 5 passing
Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии2