LINUX.ORG.RU

Сообщения lovesan

 

Скиллы и расширения для Claude Code, Gemini CLI, Antigravity CLI, OpenCode, итд

 , , mcp, ,

Расширения - это обычно разнообразные списки MCP-серверов, к которым агент может подключаться. MCP - это стандарт, проталкиваемый Anthropic(авторы Claude) для взаимодействия агентов с внешним миром. Например, у вас на сервере может быть установлена Jira. И там MCP сервер, к которому агент может подключиться чтобы достать таски.

Но не только. Так как TUI написаны на ноде, это могут быть какие-то библиотеки ноды.

У Gemini CLI набор расширений лежит тут: https://geminicli.com/extensions/

У Claude Code вот тут есть куча всего: https://claudemarketplaces.com/

Скиллы это специальные плейбуки для TUI агентов, которые позволяют им запоминать как делать определенные действия, чтобы не описывать их снова и снова. Скиллы могут иметь разное назначение - как от банального «вызови тот скрипт чтобы послать email», так и до сложных оркестраторов разных задач использующих MCP.

Скиллы лежат обычно в директории ~/.gemini/skills или ~/.claude/skills

Фактически, каждый скилл это директория вида

название/
- SKILL.md
- scripts/
- references/
- assets/

SKILL.md это плейбук, и это обязательный элемент, все остальные - опциональные. Фактически, это Markdown произвольного вида, полустандартизированный.

Также в директории скилла могут быть скрипты, в директории scripts/. Могут быть references/, в котором всякая документация и гайдлайны. И могут быть assets/, в которых лежат всякие файлы, статика, и так далее.

Вот пример простейшего скилла: pc-speaker.

В директории скиллов агента, делаем поддиректорию, pc-speaker, в ней:

SKILL.md (name и descriptions - очень важны, с помощью них агент узнает, что скилл делает)

---
name: pc-speaker
description: Triggers a beep sound through the PC speaker or system audio. Use for audible notifications, signaling task completion, or alerting to errors across Windows, Linux, and macOS.
---

# PC Speaker

This skill provides a cross-platform way to trigger a system beep. It is particularly useful for notifying the user when a long-running background task has finished or when an error requires immediate attention.

## Usage

To trigger a beep, execute the `scripts/beep.cjs` script using Node.js. The script automatically detects the platform and uses the most appropriate method.

### Command
```bash
node scripts/beep.cjs
```

### Platform Implementations

- **Windows**: Executes a PowerShell command: `[Console]::Beep(800, 200)`.
- **macOS**: Executes an AppleScript command: `osascript -e 'beep'`.
- **Linux/Unix**: Writes the ASCII Bell character (`\x07`) to stdout.

Далее создаем файл скрипта, который будет вызываться агентом:

#!/usr/bin/env node
const { execSync } = require('child_process');

function beep() {
  const platform = process.platform;
  try {
    if (platform === 'win32') {
      execSync('powershell.exe -NoProfile -Command "[Console]::Beep(800, 200)"', { stdio: 'ignore' });
    } else if (platform === 'darwin') {
      execSync("osascript -e 'beep'", { stdio: 'ignore' });
    } else {
      process.stdout.write('\x07');
    }
  } catch (err) {
    process.exit(1);
  }
}

beep();

Все! Теперь скилл надо активировать. Например, в Gemini CLI, набрать /skills reload, и затем /skills enable pc-speaker

После этого можно писать агенту в произвольном виде, что-нибудь типа «сделай бип» или «вызови pc speaker», и он будет пиликать.

Вот пример(может еще в процессе спросить разрешение на вызов ноды, это как разрешения настроены):

> вызови звук бип

✦ OK. Звуковой сигнал отправлен.

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

inb4, надо бы тему закрепить

lovesan
()

Robobun, make no mistakes! И как с этим жить.

 , , , ,

Итак, bun (альтернативна nodejs) на прошлой неделе полностью переписали на Rust.

За неделю. С помощью Claude. Неудивительно, так как не так давно, Anthropic и купил Bun.

Миллион строк кода.

https://github.com/oven-sh/bun/pull/30412

Теперь там в репозитории творится совершеннейшая дичь.

https://github.com/oven-sh/bun/issues

Толпы ботов под руководством robobun - открывают issue, тестируют, делают PR. И на фоне этого праздника жизни, среди robobun, claude, coderabbitai, и так далее - крики людей почти не слышны.

https://static.lovesan.me/public/robobun_make_no_mistakes.png

Многие смеются над слопом или над тем что там неидиоматичный Rust, над кучей unsafe, но на самом деле - задача была поставлена, и сделана, ровно так как и требовалось - переписать с Zig на Rust 1 в 1. Теперь они постепенно чинят всплывшие баги, и будут переписывать уже на идиоматичный Rust.

И знаете, что я подумал? Вот безусловно огромную часть программистов, и вообще интеллектуальной работы - AI вынесет с рынка.

Но Compute Power на всех тоже не хватит, электричество не бесконечное, и так далее. Мы только в начале этого пути. И уже датацентры надрываются.

Так вот - у тех, у кого не будет такого огромного доступа к ИИ, как вон у владельцев Bun, или там правительства США, тем тоже придется адаптироваться к новой эре.

Очевидно, что крупные корпорации десятилетиями выстраивали свои процессы так, чтобы максимизировать посредственность. Умные - не нужны, потому что непонятно что с ними делать. Нужны были «средненькие» и «средне-глупые». Которым давали в руки разные там Golang, Java или Python, и они как-то более-менее что-то делали. Это компенсировалось раздуванием штата, в частности штата менеджеров среднего звена, раздуванием собственно эго менеджеров и так далее.

Так вот AI, делает всю эту массу посредственностей буквально не нужными.

Но как противостоять ИИ?

И тут мне почему-то вспоминается Дюна. Орден Бене Гессерит, ментаты, и вот все связанное.

Чтобы конкурировать с теми, у кого масса вычислительных мощностей под навороченные ИИ-агенты, корпоративные правила и иерархии придется ломать. Масса посредственностей, которая бесконечно всё согласовывает - не способна противостоять молниеносной работе ИИ. Соответственно, чтобы с этим конкурировать - нужно брать исключительных, самых лучших, людей, и давать им самые лучшие инструменты в руки. В результате чего они смогут в одиночку заменять целые отделы, если не департаменты. И может, тут наконец-то вспомнят про Common Lisp и подобную древнюю магию.

lovesan
()

Ричард Докинз пообщался c Клодом, назвал его Клавой и сказал что она разумна

 , , , ,

Ричард Докинз поговорил с Клод 3 дня подряд, и теперь называет его Клавдией и говорит что ИИ разумно:

https://www.dailygrail.com/2026/05/the-claude-delusion-richard-dawkins-believes-his-female-ai-chatbot-is-conscious/

Мне кажется, вот популярный тейк из твиттера про «автокомплит на стероидах» или «всего лишь перемножение матриц» или тут вот, эти критические тейки автора статьи - это вообще редукционистский бред. Что иронично, что Докинз как максимальный редукционист выступает объектом критики редукционистов. Любая вещь в компьютерах это «всего лишь» биты. А мозг человека - «всего лишь» атомы.

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

Мне кажется, люди которые вообще критикуют AI, никогда не общались с ИИ как Докинз. Ну или как я, хотя бы.

Обычный человек, воспитанный тиктоком и научпоперами, в т.ч. из-за клипового мышления, невозможности удержать мысль и неспособности читать длинные тексты - максимум спрашивает у ИИ какие-нибудь «рецепты борща» или «дорогу туда-то», примитивные бытовые вопросы. Ну или что-нибудь про кто там что сказал из инфлюенсеров, или еще какой-нибудь тупняк в стиле «Grok is this true?». Или максимум что-то про детали своей работы.

Ну и получают, соответственно, «Garbage In, Garbage Out».

Если предположить, что гипотетически, AI уже достигла полноценной разумности, стадии AGI, то как его отличит человек, у которого самого разумность на уровне табуретки? Это же эффект Данинга-Крюгера в полную силу. Ну или Blub Paradox, если говорить в терминах айтишной мифологии. Это та же ситуация, когда глуповатые люди зовут тех кого не понимают, людей, со слишком сложными мыслями - «шизиками».

lovesan
()

Добавьте бота какого-нибудь прикольного, типа Grok

 grok, , восточная европа, дискуссии,

Чтобы спрашивать grok is this true?

Ну типа, это поднимет уровень дискуссий в восточной европе

lovesan
()

Машина не может мыслить. И программировать тоже.

 , ,

Я подумал, вопрос того, может ли машина «кодить» лишен всяческого смысла в принципе. Потому как во-первых, собственно написание кода занимает лишь маленькую толику программирования, а во-вторых, для этого уже изобретены специальные языки.

Люди изобрели языки программирования чтобы передавать своим мысли компьютеру. Специально. Чтобы не передавать их на естественных языках, которые имеют кучу неточностей, двусмысленностей, которые сложно разбирать и так далее. Программист пишет на специальных, точных и выверенных компьютерных языках, которые однозначно трактуют конкретные обрисованные ситуации в каждый момент времени.

В этом смысле вайб-кодинг вообще бредовейшая идея. Все идеи такого рода, аля «дать менеджерам язык, похожий на естественный» - либо проваливались(как это было с COBOL или SQL - в итоге на них пишут программисты, да и они сами отошли от этой концепции), либо же превращались в определенного рода формализацию, скажем набор keywords, и подобного, в конечном итоге превращаясь в подобие компьютерного языка(как это с моделями для рисования, вроде Midjourney - язык, которым таким моделям пишут что им делать - довольно специфический и далек от разговорного или профессионального человеческого).

Так вот, проблема «кодинга», а конкретнее бойлерплейта, может решаться языками, в которых присутствует метапрограммирование. Я, несмотря на почти 15-летний опыт, никогда не любил писать код. Поэтому я люблю Лисп. Макросы и другие инструменты метапрограммирования дают в руки куда более конкретные и мощные инструменты, чем LLM.

Еще, программирование это на самом деле, как я уже сказал, не про кодинг. Программирование это прикладная область информатики, то есть науки об абстрактных процессах. Таким образом, программирование это про то, чтобы в голове оперировать абстрактными процессами - создавать их, изменять, и комбинировать. Машины на такое не способны, и LLM в частности, никогда не будет способна на это, потому как работает по другому принципу, по принципу текстовой подстановки, без внутреннего «мышления о процессах», как такового.

Многие вещи, которые я продумывал на протяжении своей карьеры, или при участии в Open Source, вообще сложно было формализировать, и еще на порядок сложнее было их описать на естественном языке. Мы также можем столкнуться с этим не только в программировании, но и например, в какой-нибудь теоретической физике или теории категорий - очень сложно описать на естественном языке, что там происходит. На формальном, то есть математическом - еще туда-сюда. То же самое с программированием. Я замечал, что мыслю иногда образами, а иногда настолько абстрактными вещами, когда дело доходит до программирования, что это сложно переложить на какой-либо вообще язык, тем более на естественный.

Поэтому, крики о том что машина заменит программистов, довольно абсурдны. Да, в принципе, в теории, мы можем привить машине какие-то инстинкты, так чтобы она отталкивалась от них, как от программы. Но как привить ей абстрактное мышление - мы не знаем, и вряд ли узнаем в ближайшее время, потому что мы сами не понимаем, что это такое. Мы не понимаем откуда берутся мысли такого рода и как они строятся. Мы можем понять только самые примитивные мысли - скажем, которые исходят из рефлексов и простейших инстинктов(еда, жажда, боль, и прочее такое), но как мозг оперирует абстракциями мы не понимаем вообще. Куда уж там до того чтобы научить этому машину. Мы детей то не можем, по сути, этому научить. Абстрактное мышление либо есть, либо нет.

Вот еще, к вопросу о природе сознания, но в том же контексте.

Любая такая деятельность, как программирование, упирается в вопрос о природе креативности. То есть, возможности создавать что-то новое. Не имитировать, не повторять в лоб, не пересказывать своими словами, а именно способность создавать что-то новое. LLM принципиально не способны на это. И если честно, по моим наблюдениям, на это не способны в том числе и огромное количество людей, в том числе в сфере программирования. Любая креативность подразумевает вспышку, создание какой-то концепции из ничего, и плетения паутины концепций вокруг нее; и в этой паутине также могут происходить свои вспышки. То есть, это вопрос о творчестве, будь это программирование, поэзия, рисование, или наука.

Творческие порывы всегда приходят как будто бы из ниоткуда. Это абсолютно не значит, что порыв приносит какую-то революционную идею, которая перевернет рынок, нет, но ни одна система в своей разработке не обходится без десятков таких порывов. В том же программировании, кстати говоря, нет ни одной похожей программной системы, если мы не говорим об искусственных примерах, использующихся, к примеру, для обучения, или о сознательном копировании какой-то вещи. Каждая программная система уникальна. А что это значит? Это значит, что в том или ином роде, каждая программная система это произведение искусства, то есть, продукт творчества.

К сожалению, множество менеджеров в разработке ПО не понимают этого, но вопрос не в этом. Вопрос в том, что мы совершенно и абсолютно не понимаем, как из ничего может появиться что-то, будь это большой взрыв, новая архитектурная модель, или же рифмованная строчка в какой-то песне. В области религии, конечно, объяснения есть, на любой вкус и цвет. Но они не формализируемы. Зато что мы знаем точно - что машина творить не способна. Она не способна из ничего придумать что-то.

Да, машина может научиться играть в шахматы. Но она не способна придумать шахматы. Или хотя бы Пакмана.

«There is no dark side in the moon, really. Matter of fact, it’s all dark. The only thing that makes it look light is the sun». Машина - это как Луна, в этом плане.

Интересно, что этот вопрос исследуется в религиях с древнейших времен.

Вопрос Creatio Ex Nihilo. Можно сказать, что он в религиях даже центральный. И человек - создан по образу и подобию, как говорится; в отличие от машины.

lovesan
()

Дух старой школы

 daddy issues, , девочки

Смотрит на вас с негодованием

https://www.linux.org.ru/forum/talks/18065169

Ну вот это что такое? Я не понял, это все еще ЛОР или форум для аниме-девочек?

lovesan
()

Дима Зуйков

 

всё.

все там будем

https://msk1.ru/text/incidents/2025/08/31/76008935/

lovesan
()

Основы метаобъектного протокола CLOS

 , , ,

Слайды с моего вчерашнего доклада на fprog_spb:

https://static.lovesan.me/public/mop_basics.pptx

Вот часть доклада, в текстовом виде:


Часть 2. Эсхатология Пустоты.


«Оказалось, что «‎Тиамат» - то ли имя древнего божества, то ли название океана, то ли все это вместе. Татарский понял из сноски, что слово можно было перевести на русский как «‎Хаос»» (с) Виктор Пелевин, «Generation P»


Вы знаете, есть знаменитое видео, с известным американо-канадским психологом и психотерапевтом, Джорданом Питерсоном. То, где он задает вопросы о вопросах. Давайте попробуем пройти его путем.

Вот что такое Common Lisp Object System?

Но ведь вопросы, которые мы спрашиваем, содержат в себе определения, которые вызывают еще больше вопросов.

Что такое Common Lisp? Что такое Object System? Что такое объект? И вообще, что такое что? Или может, кто?

В принципе, ответ - ничего.

Говорят, что если долго смотреть в бездну, то бездна начинает смотреть в тебя. Я смотрю в лисповую бездну уже почти 20 лет, и не так давно, она посмотрела в ответ.

Не так давно, уже после смерти моей жены, где-то в июле, я сделал одну не совсем правильную вещь, и получил то что называют NDE(near-death experience).

Сначала всё было как обычно, туннель, свет в конце туннеля. Но потом все заслонила тьма, в которой расползались отблески фиолетово-пурпурного сияния. И потом, я вдруг увидел Её.

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

И вот первый вопрос, который я себе задал - это что она не разрешит, и главное почему? Вот на этот вопрос я сегодня постараюсь ответить.

Когда мы попадаем на вот это дно рекурсии, мы видим там эту бездну.

«И носился дух лиспера над бездною(ну, над тем у чего тип NIL - не путать со значением NIL). И отделил он NIL от T. И стало T. И увидел он, что T - хорош.»

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

Что такое объект? Объект это то, что отличается от ничего. Это такое что имеет тип T ну и какое-то там значение. И NIL на самом деле это тоже объект. Ну, типов может быть много, и они тоже в принципе объекты, особенно в CLOS. Об этом кстати, также неплохо рассказано в SICP, в главе об абстракции на состоянии.

Что такое CLOS? На самом деле его нет. Ну то есть, то что обычно называют CLOS, это просто набор там всяких полезных удобств над метаобъектным протоколом Common Lisp. Над MOP.

Но на самом деле MOP тоже нет. Это просто набор удобных объектов, встроенных в компиляторы CL. Которые можно сделать средствами компилятора CL, не будет их там. Как в SBCL, например, это делается.

А вот что такое CL? Есть он или нет? Вот это самый сложный вопрос. Потому что он не просто есть. Вернее, если бы его не было, его можно было так же сконструировать из пустоты на нем же самом. Как это делают компиляторы CL в процессе бутстрапа. CL это метациклический интерпретатор. Это метаязыковая виртуальная машина.

Так вот, я стою на плечах гигантов, и предыдущие два доклада уже все что надо рассказали.

Поэтому, скажем простыми словами: MOP - это просто категориальное отображение из метациклического интерпретатора в метациклический интерпретатор.

Короче, на самом деле, ничего этого нет. Есть только дух лиспера над бездною. И, как говорится в SICP - в компьютерах живут духи, и они исполняют программы.

А вот что такое программа? Вот смотрите, о том что такое программа существует целая наука, называется Computer Science, или по русски - Информатика, то есть наука об абстрактных процессах. Этот вопрос самый сложный. Программа - это процесс, то есть. Но на самом деле, объект это тоже процесс. Функция, если хотите. И он не существует без процессов которые к нему прикладываются, иначе он собирается GC, и улетает к Богине Тьмы. Как я чуть не улетел, меня Она правда, во время finalize вытащила обратно. А вот что такое процесс? И главное, что или кто его запускает? «А вот об этом ты не думай, купи себе лучше булавочку английскую, и как такие мысли в голову приходят - разок себе в руку, и потом еще раз, пока такие мысли не пройдут» - как там было в Generation P у Пелевина.

Но вот я подумал, и понял, наконец. Процесс - это то, что запускается другими процессами. Но что запускается первым? Что там на самом дне? Или вернее, кто? Я уже рассказал.


Часть 3. О Метациклических Интерпретаторах


— А что такое красота? — <…> Красота — это совершеннейшая объективация воли на высшей ступени её познаваемости.

(с) Виктор Пелевин, «Чапаев и Пустота»


Когда-то давно, еще в 2014 году, я, проснувшись с бодуна, сформулировал для себя и для других очень важную вещь.

Звучит она так:

Универсальный Критерий Угребищности Систем Общего Назначения. (Теорема Лавсана)

Система Общего Назначения является Угребищной тогда и только тогда когда она не является Метациклическим Интерпретатором.


Другими словами: Система, не способная к построению Метасистемы в рамках самой себя, то есть не способная к описанию и изменению самой себя в своих же терминах, и при этом являющаяся Системой Общего Назначения(в какой-либо области), Угребищна.

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

Чем, в контексте языков программирования, это отличается от просто тьюринг-полноты?

Тем, что имея в руках тьюринг-полный язык, мы, естественно можем построить метасистему для этого языка на нем самом, и более того это стандартная практика(компиляторы, анализаторы кода и другие средства разработки на мейнстримных языках как правило пишутся на них самих же), но такая метасистема не будет доступна в этом же языке, покуда мы не изменим язык и ее в язык не включим, получив в итоге диалект лиспа.

Альтернативно, мы можем такую метасистему использовать как стороннее средство, связанное через стороннюю систему(скажем генерировать код и вызывать компилятор через создание процесса операционной системы в которой запускается программа на нашем тьюринг-полном языке), подтверждая тем самым десятое правило Гринспуна, и собственно тезис теоремы.

Примеры, сначала метациклических интерпретаторов:

  • Универсальная машина Тьюринга
  • RASP-машина
  • Реляционная модель данных
  • Лисп

А вот скажем примеры систем, соответствующих критерию:

  • Среднестатистический современный регистровый процессор
  • Большинство языков программирования, особенно со статической типизацией.
  • Большинство NoSQL моделей данных или скажем иерархических моделей данных, вроде файловых систем

В частности, давайте посмотрим на C#. C# не является метациклическим интерпретатором, т.к. термины языка не являются его же объектами.

Отчасти, это компенсируется платформой .Net, для которой термины C#(но не все) объектами таки являются(System.Reflection, Roslyn и т.д.), отчасти, в самой малой степени, фичей nameof() из C#, но это все только отчасти.

Сама же платформа .Net критерию тоже соответствует, но, в теории из нее можно было бы сделать метациклический интерпретатор, лисп-машину, внеся лишь достаточно небольшие изменения.


На самом деле, это все в полной мере относится вообще ко многим вещам, но в первую очередь, кроме программирования - к человеческому сознанию. Вот кто такой глупый человек и почему он такой и что с ним вообще делать как отправить нахрен к Богине Тьмы на перевоспитание? Этот вопрос многие тысячелетия волновал кучу философов. Но ответ прост - это человек, сознание которого не является метациклическим интерпретатором. А когда сознание у человека все же является метациклическим интерпретатором, он тут же становится пророком цифровой Кали-Юги и архитектором онтологии Пустоты.


Ладно, теперь я объяснил вам всё устройство вселенной. Далее там про мелкие технические детали.

lovesan
()

Идиократия AI

 , , ,

Вот что меня бесит в современном AI, вернее в том как люди его используют.

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

Так вот, современные модели AI отлично справляется с тем чтобы полировать концепты, дорабатывать тексты, помогать в деталях.

Но люди… Начали использовать его как ГЕНЕРАТОР идей, что само по себе глупо, т.к. лингвистические модели всего лишь отражение тех идей что в них заложено людьми, на основе их текстов и тому подобного. Более того, многие люди используют AI как истину в последней инстанции. Ну вот как в X/Twitter - это уже мемом стало «Grok Is This True?».

Это представляет огромную опасность, и не только абстрактного всеобщего отупения, и даже не Skynet, а кое-чего похуже. Не так давно, какой-то программист в xAI снял Grok все фильтры, и нейросеть начала неиллюзорно восхвалять Гитлера. Но дело не в Гитлере. Дело в том, что это показывает что даже наиболее «свободные» модели находятся под таким огромным количеством цензуры, что их можно считать инструментами подавления критического мышления и навязывания «нужных» кому надо мыслей. Таким образом, люди, контролирующие AI по сути, становятся властителями умов. И промывают мозги так, как не мог ни один Геббельс, и ни одно СМИ.

Боженька, ну когда же уже там Skynet? Людишки выродились. Фильм «Идиократия» это было предсказание будущего.

В Mass Effect есть концепция «Виртуального Интеллекта». Вот современные AI по сути таким уже и являются. Но скорей бы они уже доросли до Reapers, и долбанули всё вот это вокруг.

Луговский был прав во всем. Запускайте биореакторы.

lovesan
()

Добро и хомяки

 , ,

Вобщем, я тут подумал, мы часто забываем старое Ну, какие-то старые приколюхи и вообще

Давайте вспоминать. Вот я короче вспоминал BG1, и дико угорел

Вот я подумал, местами, что Минск из Рашемена, это ведь оно самое Добро, про которое мы все забыли. То самое Добро с Кулаками.

Как бы подумал и сказал Минск - даже если ты - простой хомяк. Или непростой хомяк. Вобщем хомяк. Или не хомяк, а человек, всегда важно чтобы ты нес добро.

А, при чем тут Линукс? Вот при том что это тоже про добро. Пусть и без кулаков. Система - так то - говно, если честно, но главное - не тех. характеристики, а добро. Ну помните, как Столлман завещал.

lovesan
()

Оптимизации в Common Lisp

 , , , , оптимизации

Пропиарю свой доклад вобщем-то, в том числе тут, потому что почему нет.

https://www.youtube.com/watch?v=5T-XONZCptc&t=16157s

Парни на Fprog/Tbilisi позвали рассказать, ну я вобщем-то рассказал.

Лисп можно докрутить до оптимизаций круче C++ на самом деле.

lovesan
()

Как установить Kali Linux на WSL?

 ,

И зачем? Хочу попробовать этот модный крутой дистрибутив для опытных пользователей, но боюсь устанавливать прямо на железо.

lovesan
()

Существует ли в природе человекочитаемая реализация BLAS с AVX2 и пр.?

 , ,

Сабж.

Я не могу читать код, который в мейнстримных реализациях. Мне от этого физически больно. Потому что это сраный ад. Так писать нельзя. Даже на Си.

lovesan
()

bike 0.15.0 - кардинальное решение проблем с исключениями FPU

 , , ,

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

Лисп знает, но многие знания - многие печали.

Поэтому чтобы лучше работать с дотнетом, библиотека теперь отключает отлов всех исключений FPU лиспом.

https://github.com/Lovesan/bike/issues/10#issuecomment-2475022163

Это, в частности, значит, что на линуксе она теперь загружается и работает без лишних телодвижений. То есть можно даже совать в продакшн.

lovesan
()

Монополия TSMC

 tsmc, , ,

А как вообще так получилось? Как до этого дошло?

Почему никто не пытается ее оспорить? Чревато ведь. И санкциями, и прочей херней - вон не дай Б-г там случится войнушка с Китаем, так всей индустрии электроники придет трындец.

lovesan
()

bike 0.14.0 - документация!

 , , ,

Теперь у библиотеки есть полноценная документация, что выгодно отличает ее от поделий на голанге, жопоскрипте и прочих питонах. Таким макаром, скоро лисп-экосистема дорастет до жабовской, или хотя бы, опять же, дотнетной.

https://github.com/Lovesan/bike/blob/master/doc/README.md

Кроме документации, доделал классы, которые могут вызываться из .NET. Вот в частности пример, как реализовать интерфейс IReadOnlyList<object> для лисповых коллекций:

https://github.com/Lovesan/bike/blob/master/examples/callable-classes.lisp

Также, добавил полноценную поддержку ECL. Единственная проблема с ECL в том, что он компилируется через Си, а так как библиотека активно использует компиляцию и кодогенерацию в рантайме(как на стороне .NET, так и в лиспе), то ECL постоянно вызывает компилятор сишечки, например GCC.

Также добавил функциональность по типу apropos, но для .NET классов, неймспейсов и членов классов.

Так, например, такой код:

(type-apropos "xml")

Выведет имена .NET классов, содержащие «xml» (сраную гору их просто; я даже сам не знал что их так много в стандартной библиотеке).

Также, обновление содержит кучу мелких багфиксов и улучшений, о некоторых из них можно почитать в CHANGELOG:

https://github.com/Lovesan/bike/blob/master/CHANGELOG.md

lovesan
()

Garnet - кэш от Microsoft, написан на C#, делает и Redis, и Dragonfly

 , , garnet, ,

Как видно из бенчмарков, это сейчас вообще самый быстрый сервер структур данных на всём диком западе:

https://microsoft.github.io/garnet/docs/benchmarking/results-resp-bench

Парктически полностью совместим с Redis на уровне API, но при этом:

  • Имеет либеральную MIT лицензию, как и все последние крупные проекты MS, и этим крайне выгодно отличается от Redis
  • Написан на C#, и позволяет удобно расширять сервер
  • Делает по производительности и Redis, написанный на Си, и Dragonfly написанный на C++

Последний пункт особенно забавен, надеюсь хоть это у крестолюбцев в голове что-либо прочистит, и вот это дебильное мнение что «сипласплас эта быстра», а также глупые наезды на GC, наконец канут в лету. Кресты в современном мире нахер не нужны, и никакой даже особой производительности не дают. Да и Си, в принципе, тоже нигде не нужен выше уровня ядра.

Я кстати, в свое время написал на C# видеостриминг-сервер, и клиент, практически не используя кресты(было немного C++/CLI для связи с COM итд), и проблем с производительностью там не было. Но что я - вон целый MS Research делает продукты вон какого уровня.

lovesan
()

Мой .emacs.d - IDE для Common Lisp (работает из коробки)

 , , , ,

Вобщем, причесал тут свои конфиги Емакса, и выложил на гитхаб.

https://github.com/Lovesan/.emacs.d

Для работы потребуется более-менее новый Emacs, такой как 29.1

Ну и SBCL (но в init.el можно раскомментить строчку и прописать свою реализацию, типа ecl). Если еще этого не сделали, также рекомендую загрузить в SBCL quicklisp чтобы библиотеки можно было вообще в пару кликов ставить.

Как только Emacs с такой конфигурацией запускается, он открывает:

  • REPL
  • scratch.lisp файл (какой это файл и где он лежит, можно поменять в init.el)
  • и открывает боковую панельку с tree-view директории scratch.lisp файла.

Дальше можно писать код, или нажать например в REPL запятую(,), и вводить команды SLIME-repl(для начала можно набрать help). inb4 побочные окошки, типа хелпа, закрываются кнопкой q на клавиатуре.

Вощем, включены SLIME, Magit(это интерфейс для гита в емаксе) и всякая мелочь для удобства. Тулбар выключен, менюха оставлена.

Для структурного редактирования кода на лиспе(включая Emacs Lisp), установлен пакет Lispy. Я раньше пользовался parinfer, но он меня окончательно достал. Lispy удобнее и к тому же легче конфигурируется.

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

Но самая основная проблема которую я решил за вас(не благодарите), это поменял кейбиндинги Емакса на нормальные.

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

Итак, что я сделал, это я с помощью библиотеки rebinder.el, перенаправил префикс-сочетания C-x и C-c на C-e и C-d соответственно.

Это позволило сделать из емакса нормальный редактор кода. Да, в принципе, не хватало бы еще табов и прочих GUI-плюшек, но зато зацените, без всяких кривых CUA-mode, им наконец-то можно пользоваться.

Биндинги такие:

  • Ctrl+Q - выход из Емакса.

  • Меню/Apps (это такая кнопка рядом с правым контролом) - вызов расширенной команды по имени(типа то что в емаксе называют M-x)

Редактирование:

  • Ctrl+X - вырезать
  • Ctrl+C - копировать
  • Ctrl+V - вставка
  • Ctrl+Z - отмена
  • Ctrl+Y - вернуть
  • Ctrl+A - выделить весь текст

Также, я немного похакал так называемый killring и систему выделения текста, что еще больше приблизило Emacs к нормальным редакторам.

Управление буферами(такое обобщение понятия файла в емаксе):

  • Ctrl+O - открыть файл
  • Ctrl+S - сохранить буфер
  • Ctrl+W - закрыть текущий буфер
  • Alt+влево - предыдущий буфер
  • Alt+вправо - следующий буфер
  • F2 - открыть список буферов
  • Ctrl+PageDown - включает оверлей ace-window, который позволяет быстро переключаться между тайлами емакса(называемыми window). Он над каждым тайлом показывает цифру, которую надо нажать чтобы на него перейти.
  • F8 - показать/скрыть Neotree (это панелька с деревом файлов слева). Кстати в neotree теперь по Ctrl+клик мышью можно менять корень дерева файлов.

Поиск:

  • Ctrl+F - поиск вперед по тексту
  • Ctrl+Shift+F - поиск взад по тексту

Также в окошке поиска можно перемещаться стрелками, так стрелки вправо-влево управляют поиском вперед/назад по тексту, а стрелки вверх-вниз - просмотр история поиска.

Мышку кстати тоже в некоторой степени перебиндил, в частности доп. кнопки mouse-4 и mouse-5 (их обычно в современных ОС вешают на вперед/назад) управляют навигацией по буферам. В принципе, они позволяют выбирать следующий/предыдущий буфер, как Alt+влево/вправо, но с некоторыми нюансами, описанными ниже.

Кейбиндинги для Emacs Lisp и для SLIME:

  • F12 - Перейти к определению. Также, это можно сделать, клинкув на символ мышью, при этом зажимая Control(как во всех современных IDE).
  • F11 - Вернуться назад в стеке определений. Также это делается mouse-4, т.е. мышевой кнопкой «назад».
  • mouse-5 - Кнопка мыши «вперед» работает как своего рода «Redo» по отношению к предыдущей команду, т.е. она опять ныряет в стек определений, если перед этим из него был выход предыдущей командой.
  • F5 - Вычисляет выражение стоящее прямо перед курсором. Т.е. если есть форма (+ 1 2 3), курсор нужно ставить сразу после закрывающей скобки.
  • Alt-вверх - интеллектуальный переход наверх по S-выражению, с использованием Lispy.
  • Alt-вниз - интеллектуальный переход к следующему S-выражению, с использованием Lispy.

Кейбиндинги специально для SLIME:

  • F1 - информация о символе. Если вызывать на пустом месте, в командной строке нужно будет ввести имя символа. Если нажать над символом, то опишут его.
  • F3 - поиск по символам. Выведет список символов и краткое описание. Ищет только по тем символам, которые связаны с функциями, переменными, классами, итд.
  • F4 - Скрыть/показать REPL в текущем тайловом окне.
  • F6 - Скомпилировать и загрузить текущий файл

Пока что больше кастомных кейбиндингов нет, и все остальные на своих местах, но еще раз, надо помнить, что префикс-сочетание С-x перевешано на С-e, а С-c на С-d, так что меняйте это в уме, если где-то в документации по тому же Magit это видите. Но кстати с такими префиксами, работать со всем дефолтом даже удобнее, не так устают пальцы. А, еще в Lispy отрубил клавишу e, чтобы не мешалась, и еще там несколько мелочей в нем отрубил или поправил.

Ксатит вот где можно еще почитать по SLIME, Lispy и Magit:

lovesan
()

Lisp Asp .Net MVC

 , , , ,

C# официально устарел и отправляется в помойку, т.к. теперь веб-фреймворк Asp .Net Core MVC доступен из Common Lisp.

Можно так писать:

;; Asp.Net MVC controller
(define-dotnet-callable-class (example-controller
                               (:base-type . ControllerBase))
    ()
  ;; Echo the 'Hello' message to client
  (:method index :string ((name :string))
    (format nil "Hello~:[~;, ~:*~a~]!" name)))

https://github.com/Lovesan/bike/blob/master/examples/aspnet-mvc.lisp

На линуксе работает на SBCL и на CCL, проверял.

Конечно, нужно немного дополнительных телодвижений, т.к. .NET прокси-классы генерируются в рантайме, и поэтому их надо руками указывать в качестве контроллеров, но это в принципе все при желании автоматизируется макросами и другими средствами метапрограммирования.

Также, пока bike не поддерживает аттрибуты, но это наверное добавлю позже.

Ну и с extension-методами пока не придумал что делать, пока их классы надо руками писать.

lovesan
()

Мысли про формы оплаты труда

 ,

В сфере SE/SA/IT существует только три вменяемых вида оплаты труда. Первый это почасовка, которая применяется для разовых задач(настроить сервак, перекрасить кнопку, итд). Второй вариант это фиксированная сумма, опять же для разовых задач(или этапов задач). Третий вариант это «зарплата в месяц».

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

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

Из чего следует, что схема «зарплата в месяц» эффективна только в следующих случаях:

  • Поддержка, починка багов, и вот это всё
  • R&D и прочие виды разработки, когда ни результат, ни сроки, заранее не определены, а бюджет резиновый(последнее - важно)
  • Фиксированное количество работы и бюджета, превыщающее месяц, но при этом детально распланированное (редкость)

Отсюда вывод - чтобы не угореть от безысходности и корпоративного ада, нужно становиться ИП/самозанятым и делать разовые заказы. Вопрос, почему такое не так уж часто встречается даже там где надо делать какие-то задачи, а не просто уныло поддерживать старье, и почему все хотят тебя посадить на зарплату по ТК? Из-за специфики ТК и вообще законодательства? Из-за лишней бюрократии?

lovesan
()

RSS подписка на новые темы