Рубрика «cli»

Введение

Всем привет! Меня зовут Илья, я frontend‑разработчик.
Но сегодня хочу поговорить не о JavaScript, а о терминале.

Несмотря на то, что я уже много лет работаю разработчиком, активно пользоваться терминалом я начал всего около года назад. До этого терминал для меня был просто местом, где запускается сборка проекта, немного Git и иногда еще пара команд. Думаю, у многих так же.

Обычно мысли о терминале вызывают ступор. Кажется, что это что‑то непонятное, черно‑зеленое и предназначенное только для «настоящих программистов», и на практике большинство ограничивается npm run dev, git status и на этом все.

Читать полностью »

Решил рассказать про свой статуслайн для Claude Code, который наглядно выводит много полезной информации в одном месте.

Status Line — это то, что можно вывести внизу Claude Code терминала, если вы в нём работаете.

Вот так он выглядит в моём терминале — линия снизу.

Читать полностью »

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

В работе с FASTA и FASTQ таких мест неприлично много. Почти все они когда‑то были задуманы как удобство.

Вот три, с которыми я сталкивался чаще всего.

Первое. Инструмент пишет FASTQ, а качества у записи нет. Вместо ошибки он подставляет строку из I. Файл получается валидный, парсер доволен, а фильтр по качеству дальше по пайплайну видит идеальные риды и пропускает всё подряд.

Второе.Читать полностью »

Сравнение Codex, Claude Code и Kimi. Кто лучше на практических задачах

Меня зовут Илья, я разработчик и пишу про разработку приложений. Сегодня расскажу про эксперимент, который я решил провести после выхода очередной модели, которая превышала по бенчмаркам другие. Показатели каждой новой версии моделей стабильно превышают предыдущие, но при этом они не отвечают на вопрос: какой cli агент лучше использовать при разработке. Я решил попробовать сравнить три агента Codex, Claude Code и Kimi на одной реальной задаче в одинаковых стартовых условиях, чтобы посмотреть чем реально отличаются результаты их работы.

Что на входе

Читать полностью »

Я много работаю с кодинг‑агентами в Claude Code. В какой‑то момент поймал себя на том, что не представляю, на что уходят токены. Счёт в конце месяца есть, а из чего он складывается, непонятно. Написал небольшую утилиту, которая читает то, что Claude Code и так пишет на диск, и раскладывает расходы по статьям. То, что она показала, мне не понравилось.

Вывод ledgent report ‑redact
Query‑first подход или как из SQL запросов или MongoDB контрактов получить готовое REST API - 1

Я уже давно думал об одной вроде небольшой, но на самом деле изрядно, по крайней мере меня, доставшей backend‑проблеме.

Читать полностью »

В домашней инфраструктуре у меня крутится десяток сервисов: Grafana, Zabbix, n8n, Navidrome, ollama, БД, пара дашбордов и тестовых API. Каждый раз, когда нужно было выставить новый сервис наружу, я открывал дашборд Cloudflare и руками проходил один и тот же путь: создать туннель, прописать ingress‑правило, добавить DNS записи, настроить Zero Trust Access. Минут пятнадцать, если без ошибок. С ошибками — больше, потому что один неверно скопированный tunnel ID ломает всю цепочку и приходится откатывать вручную.

На какой‑то раз стало понятно, что это рутина, которую можно свернуть в одну команду. Так появился cfzt — CLI на Go, который сейчас умеет:

zt up grafana 3000

Читать полностью »

Всё началось с бага, на который я убил вечер. В Tauri фронтенд вызывает Rust-команды так:

const user = await invoke("get_user", { userId: 42 });

Строка с именем команды, объект с аргументами, никакой проверки типов. У меня в Rust аргумент назывался user_id, и я честно передал user_id с фронта. В рантайме прилетело что-то вроде invalid args 'userId' for command 'get_user' — Tauri по умолчанию переименовывает snake_case-аргументы в camelCase. Это написано в документации, я это даже знал. Но знание, которое не проверяет компилятор, — не знание, а примета.

Дальше по классике: возвращаемый тип у invoke — anyЧитать полностью »

Give a man a gun and he can rob a bank. Give a man a bank and he can rob the world.

Предыстория

Занимаясь bug bounty, я постоянно сталкивался с одной проблемой — существующие инструменты либо устарели, либо закрытые, либо написаны так что добавить свой плагин целый квест. Nikto последний раз серьёзно обновлялся много лет назад, а современных асинхронных альтернатив на Python практически нет.

Так появился WebScan — асинхронный CLI-сканер безопасности на чистом Python с модульной архитектурой. За неделю с момента релиза проект получил внешних контрибьюторов и вырос до 15 плагинов.

Что умеет CLI-сканер

Читать полностью »

День 1. "Мне больше не придётся крякать Фотошоп и Вегас!".
День 2. Научился блюрить лица и айпишники через командную строку.
День 4. Провёл сравнительное тестирование аппаратных и программных видеокодеков.
День 8. Натравил ИИ-агентов на задачу по монтажу видео.
День 16. Объясняю жене, почему не могу просто запустить Paint и нажать две кнопки.

В последнее время моя работа во многом сосредоточена на вопросах Remote Desktop и стриминга медиа в реальном времени. Я часто использую FFmpeg в работе - и со временем всё чаще и чаще.

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js