Совсем недавно я рассказывал о том, как создать ИИ-агента и дать ему в руки инструменты, чтобы взаимодействовать с реальным миром. Сегодня я покажу пример, как сделать шаг вперед - создать MCP-сервер, который будет предоставлять инструменты для LLM в согласии с современными стандартами отрасли. О том, что это такое и откуда у него растут ножки, можно почитать в интернетах, или вот вам собранная Perplexity статья.
[Далее]Obsidian плагин Shell commands
Если вы хотели расширить возможности Obsidian, подходящих готовых плагинов не нашли, писать на Typescript морально не готовы, а писать консольные утилиты любите умеете и практикуете, то этот пост для вас. Не так давно натолкнулся у какого-то блогера упоминание о плагине Shell commans, с помощью которого можно вызвать консольную команду. Взглянув на него повнимательнее я понял - это неограненный алмаз, недооцененный артефакт, и даже удивительно, почему так мало о нем говорят.
[Далее]Создание ИИ-агента на Python
ИИ шагает по планете с такой скоростью, что это пугает. Но лучше не пугаться, а постараться вспрыгнуть на эту волну и прокатиться на ней. Самое популярное, с чем мы сталкиваемся каждый день - это LLM (Large Language Model), говорящие ИИ-боты. Они много что могут нам рассказать, но вот ручек и ножек им не завезли. Другое дело - ИИ-агенты, это по сути те-же LLM, но с ручками и ножками. То есть с инструментами. Имея доступ к LLM (публичной или локальной) можно своими руками приделать им недостающие конечности и соорудить маленького, но своего Джарвиса. Я продемонстрирую, как это сделать с помощью Python и библиотеки LangChain.
[Далее]Превращаем заметки Obsidian в посты Telegraph
Чтобы писать посты в Obsidian и постить в Telegraph прям с таблицами, Dataview и прочими плюшками, достаточно копировать заметку в HTML с помощью плагина Copy Document as HTML
Ставим плагин и настраиваем как хочется:
- убираем front-matter (Remove properties)
- вшиваем картинки (Embed external images)
- вики-ссылки делаем просто текстом (Link handling: Don’t link)
- убираем лишние добавки к заметке (Footnote handling: Remove everything)
Чтобы запустить вызываем команду (Cmd-P
): Copy document as HTML: Copy selection or document to clipboard. Это отправит в буфер обмена или выделенный фрагмент (если выделено что-то) или весь документ.
Скрипт конвертации Perplexity ссылок
К сожалению, когда копируешь (кнопкой “Копировать”) исследования Perplexity он генерирует документы, которые не совсем Markdown - ссылки на источники он помещает в конце документа, а в тексте остаются только некликабельные указатели типа [10]
. Это неудобно, если хочешь поместить исследование например в Obsidian.
Нагенерил скрипт, который это исправляет. Не сильно фонтан, но может кому сэкономит немного времени.
Превращаем заметки Obsidian в посты Hugo
Когда решил вернуться к написанию постов в блог, решил перевести его на генерацию статических сайтов Hugo. А так как к тому моменту я успел полюбить Obsidian, то стал решать, как бы так сделать, чтобы писать статьи в нем, а в Hugo транслировать с нужными модификациями. Готовые решения меня не устроили (то одно не так то другое не то), решил сделать что-то свое. Плагин для Obsidian не осилил (никогда не писал на TypeScript), поэтому с помощью ИИ накидал варианты на Python и Go. Скачать можно с моего GitHub.
[Далее]Консольный ИИ-агент Gemini CLI
Gemini CLI - консольный ИИ-агент от Google. Работает с моделью gemini-2.5-pro
. Позволяет делать бесплатно 1000 запросов в день и дает контекстное окно в миллион токенов. Умеет работать с файловой системой на компьютере, делать запросы в интернете и пользоваться поисковиком Google.
Что немаловажно: работает в России.
[Далее]Использование цикла в PostgreSQL с выводом в консоль
Небольшая заметка на полях на будущее. Иногда в PostgreSQL нужно выполнить ряд повторяющихся действий с выводом результатов в лог. Одним примером покажу, как это сделать легко и просто.
-- Делаем вывод сообщений в лог видимым
SET client_min_messages TO notice;
CREATE TEMP TABLE tmp(id SERIAL, name TEXT);
-- Анонимный блок DO
DO $$
BEGIN
-- Цикл LOOP
LOOP
INSERT INTO tmp(name) VALUES(gen_random_uuid()::TEXT);
-- Условный оператор IF
IF (SELECT MAX(id) FROM tmp) > 100 THEN
RAISE NOTICE 'max id == %', (SELECT COUNT(*) FROM tmp);
EXIT;
END IF;
END LOOP;
END $$;
Intellij IDEA - сброс триального периода
Аж в 2016 году я тут писал о том, как удалить Idea полностью, чтобы начать все с начала. Но времена меняются, и что работало раньше - не работает сейчас. Вот обновленный алгоритм для MacOS. Обратите внимание на версию Idea.
Удаляем файлы и каталоги:
[Далее]Создание валидной цепочки SSL сертификатов
Для написания тестов на валидность загружаемых сертификатов мне потребовалось создать несколько вариантов цепочек и приватных ключей. Прошерстив некоторый объем интернета, я собрал всю необходимую информацию о том, как локально сгенерировать корректную цепочку SSL сертификатов, которая будет проходить проверку стандартными средствами.
Чтобы не писать кучу команд всякий раз, напишем bash-скрипт. Для начала, зададим несколько настроечных констант:
[Далее]