Надо держаться corney
Собрал новую клавиатуру, на этот раз corne, попробую освоить.

Выглядит прикольно - немного смущает что контроллеры наружу - есть риск замкнуть что-нибудь или повредить. Почему-то не нашел в сети готовую крышечку, которая бы мне понравилась, придется разработать новую. Плюс придется добавлять больше слоев - на дефолтной раскладке нет Caps Lock - а именно ей я переключаю языки. В общем, приключение только начинается!
Запускаем локальный MCP сервер как удаленный
MCP-сервера — это супер-хайповая тема последних дней. Что в ней хайпового? Вы даёте LLM возможность взаимодействовать с реальным миром. Идея проста: LLM умеет формулировать запросы в JSON, а значит, она может почти без магии общаться с внешними инструментами по протоколу JSON-RPC!
Самый простой способ вызова MCP — это через локальный процесс через STDIO. Например, один из самых простых MCP-серверов — @modelcontextprotocol/server-filesystem — умеет работать с файловой системой. Говорим системе: вызови npx -y @modelcontextprotocol/server-filesystem /some/folder/name, и наша LLM теперь видит файловую систему и может её менять так, как вы её попросите.
Но в таком виде вызов MCP-сервера не имеет большого смысла: если вы используете IDE, то там агенты уже и так могут работать с файловой системой. Но что, если мы хотим иметь доступ не локально, а удалённо? В этом случае, установив на удалённый сервер тот же самый MCP-сервер, мы можем просто обращаться к нему через SSH, предварительно забросив на удалённый сервер SSH-ключи, чтобы сервер не спрашивал пароль. Обмен будет всё так же происходить через stdin/stdout, но сессия будет поддерживаться через SSH!
[mcp_servers.remote-filesystem]
command = "ssh"
args = ["user@someserver.com", "mcp-server-filesystem /home/user/foldertoaccess"]
Этот способ открывает широкие возможности для создания лёгких универсальных мобильных ассистентов, упрощает администрирование серверов, и ещё можно сделать многое, чему пока не дали названия. Но будьте осторожны — ведь удалить ваши файлы теперь LLM тоже сможет без проблем, поэтому пользуйтесь этой силой с умом!
OpenSCAD и Codex
Codex от OpenAI отлично умеет программировать в OpenSCAD. Для моей третьей руки очень не хватает красивой коробочки: я использовал в качестве основания отрезок доски, и мне не очень нравится, как это выглядит, а ещё более стыдно показывать это другим. Поэтому я решил сделать для проекта удобную коробочку, в которой буду хранить всё для пайки — припой, флюс, сменные жала, — и она будет выступать основанием для третьей руки. Такое «два в одном». В качестве отправной точки я взял RuggedBoxV1 — великолепный проект, но он явно просится, чтобы печатался одним куском, а не двумя половинками: конструкция с петлями прекрасно под это подходит.
Загрузил проект в VSCode и попросил Codex внести нужные изменения в исходный код. Результат говорит сам за себя!

Вот так выглядит готовый проект:

Баллада о борьбе
Средь оплывших свечей и вечерних молитв,
Средь военных трофеев и мирных костров
Жили книжные дети, не знавшие битв,
Изнывая от мелких своих катастроф.
Детям вечно досаден
Их возраст и быт —
И дрались мы до ссадин,
До смертных обид,
Но одежды латали
Нам матери в срок,
Мы же книги глотали,
Пьянея от строк.
Липли волосы нам на вспотевшие лбы,
И сосало под ложечкой сладко от фраз,
И кружил наши головы запах борьбы,
Со страниц пожелтевших слетая на нас.
И пытались постичь
Мы, не знавшие войн,
За воинственный клич
Принимавшие вой, —
Тайну слова «приказ»,
Назначенье границ,
Смысл атаки и лязг
Боевых колесниц.
А в кипящих котлах прежних боен и смут
Столько пищи для маленьких наших мозгов!
Мы на роли предателей, трусов, иуд
В детских играх своих назначали врагов.
И злодея следам
Не давали остыть,
И прекраснейших дам
Обещали любить;
И, друзей успокоив
И ближних любя,
Мы на роли героев
Вводили себя.
Только в грёзы нельзя насовсем убежать:
Краткий век у забав — столько боли вокруг!
Попытайся ладони у мёртвых разжать
И оружье принять из натруженных рук.
Испытай, завладев
Ещё тёплым мечом
И доспехи надев, —
Что почём, что почём!
Разберись, кто ты: трус
Иль избранник судьбы,
И попробуй на вкус
Настоящей борьбы.
И когда рядом рухнет израненный друг
И над первой потерей ты взвоешь, скорбя,
И когда ты без кожи останешься вдруг
Оттого, что убили его — не тебя, —
Ты поймёшь, что узнал,
Отличил, отыскал
По оскалу забрал —
Это смерти оскал!
Ложь и зло — погляди,
Как их лица грубы,
И всегда позади
Вороньё и гробы!
Если мяса с ножа
Ты не ел ни куска,
Если руки сложа
Наблюдал свысока,
И в борьбу не вступил
С подлецом, с палачом, —
Значит, в жизни ты был
Ни при чём, ни при чём!
Если путь прорубая отцовским мечом,
Ты солёные слёзы на ус намотал,
Если в жарком бою испытал что почём, —
Значит, нужные книги ты в детстве читал!
1975 г.


