Категория: Компьютеры

Заметки о программировании и на околокомпьютерные темы

Вложенные категории: Delphi, Игры

В фантастике есть такая тропа (клише) – “Боги и разная нечисть существуют потому, что люди в них верят, и выглядят они так, какими люди их представляют”. Кажется, это называется “коллективное бессознательное”, “эгрегор”, или как-то так.

Забавно, что так и получилось — персонажи нейросетей ощущают себя такими, какими люди их воображали. Чатботы рисуют себя роботом потому, что люди верили, что 1. роботы будут выглядеть так, 2. искусственный интеллект должен ощущать себя роботом.

Сущности

Некоторым программистам ставят задачу:
— Нашему софту нужно рисовать цветочек. Это надо делать во многих местах одинаково. Напиши рисование цветочка.
И программисты приносят:
— Это универсальный класс обработки сущностей. Над сущностями можно определить и выполнять произвольные операции. Реализуешь рисование и делай что тебе нравится.
“Правда, цветочек нарисовать нельзя, особенности архитектуры.”

Рябь на пруду

В твиттере обсуждали, что чатбот отличается от человека фундаментальным образом: человек существует в мире непосредственно, а чатбот – посредством текста. Для человека существуют предметы, а для чатбота только их описания, слова.
Конечно, можно предположить, что в глубине нейронной сети чатбот по словам составляет некое представление, но разве может такое представление сравниться с реальной жизнью?

Хочу напомнить, что такое реальная жизнь.
В глазах есть клетки-палочки и клетки-колбочки, последних — три вида. Когда на клетку попадает фотон, она реагирует и передаёт возбуждение дальше. Вот это и есть мир непосредственно.

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

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

Вы не находитесь в ней “напрямую”. У вас нет органа “ощущения комнаты”. Только две руки, о которые в темноте бьются волны. Из этого тонкого канала вы извлекаете и восстанавливаете трёхмерный мир, и вам кажется, что вы ощущаете его непосредственно.

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

Если мы ощущаем себя “напрямую живущими”, проживая на самом деле только дрожание ниточек паутины, почему бы не жить среди своих восстановленных фантазий и чатботу.

Уважаемый

Deepseek R1 в версии 180 гб можно запустить с жёсткого диска (в обход памяти). Я спросил его придумать сообщение, что триальный период программы истёк:

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

Этот текст слегка бесит, но трудно сразу сказать, почему. Такое чувство, что ему не хватает вступления “Уважаемый!”:
Уважаемый! К сожалению, придётся ограничить тебе функционал. Если надумаешь обсудить варианты его возвращения, мы ждём.

Об UDP

Везде, где объясняют UDP, его объясняют неправильно.
Примерно так: “TCP всегда доставляет пакеты, а UDP ненадёжный протокол, и иногда может их терять”.

“К этому нужно быть готовым”, говорит объясняющий.

В результате почти никто не пишет кода для UDP и IP, который работал бы вне песочницы.
Песочница это когда у вас гигабитная сетка, нулевая загрузка сети, и вам нужно отправить один пакет. Никаких потерь нет вообще.
— Современные сети очень надёжны, и потери в них малы, — делает вывод программист, — Но на всякий случай, если пакет пропадёт, я отправлю его повторно.

Это не просто неправильный вывод — это вообще неправильное понимание, что происходит.

Вот правильное объяснение

Вот правильное объяснение:
UDP это протокол, который разговаривает с вами, выбрасывая пакеты.

TCP следит за пропускной способностью сам. Сервер на другом конце света недостаточно быстро разбирает входящие? Рутер перед ним тянет только 10Мбит, хотя на вашей стороне гигабит? Вы махом отправили больше, чем ваша сетевая карта успевает обработать?
Во всех этих случаях TCP притормозит отправку: либо задержится в send(), либо вернёт WSAEWOULDBLOCK.

UDP во всех этих случаях выкинет пакеты.
Он их выкинет не потому, что ненадёжен и потерял их. Наоборот: UDP надёжен, и гарантирует, что выкинет любой пакет, который вы отправили слишком рано.
Это его способ сказать вам об этом. Другого способа у него нет.

Слишком рано — значит, быстрее, чем пакеты передаёт самое медленное звено. Представляйте себе реку. Там, где русло узкое, вода скапливается и образует запруду. Запруда это буфер, такой, как буфер отправки. И если вода прибывает быстрее, чем уходит, запруда будет расти и расти без конца.

Чтобы не случилось наводнения, надо как-то сообщить вверх по реке о переполнении. Попросить отправителя придержать коней. И UDP это делает, выкидывая избыточные пакеты.

Когда UDP объяснили неправильно (“ненадёжный протокол”), само собой напрашивается: если пакет утерян, надо отослать его ещё раз. Со второй попытки не вышло, значит, с третьей. Чем больше попыток – тем больше шансов доставить!

Но всё наоборот: Если пакет утерян, надо выждать, пока наводнение не схлынет. Чем чаще потери, тем дольше надо выжидать. И только потом осторожно пробовать снова.

Что получается? UDP пытается докричаться и сказать: стой! хватит! я не успеваю! Но программист не только не охлаждает своё посылание, он ещё и старые пакеты шлёт заново. Чем громче UDP верещит от ужаса, тем сильнее программист засовывает в него все выпавшие пакеты вместе с новыми. Потери пакетов не только не исчезают, они растут! Вы сами себя топите. Чем усерднее вы отправляете, тем меньше данных доходит.

Достигнув какой-то минимальной скорости, всё стабилизируется – UDP, страдая, принимает потоки ваших пакетов, из которых большая часть ненужные дубликаты, выкидывает 90%, не влезающие в канал, и иногда полезным пакетам везёт, и они всё-таки пробиваются сквозь все перегруженные буферы, не попав под сокращение. Капля за каплей, передача продвигается. Программист делает вывод, что его рутер плохо держит нагрузку и “начинает теряет пакеты”.

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

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

Почему же тогда большинство UDP-приложений вообще работает?
А потому, что большинство приложений отправляет по UDP не потоки данных, а редкие небольшие команды в отдельных пакетах. Такими крохами в принципе нельзя ничего перегрузить. Потери будут лишь тогда, когда мимо вашего бумажного кораблика по реке проплывает океанский лайнер, что от вас никак не зависит, и пока вы будете отправлять кораблик повторно — лайнер уже пройдёт.

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

Если ваш протокол допускает не более, чем фиксированное число “пакетов в воздухе” — например, нельзя отослать новый запрос до получения ответа на предыдущий — ограничивать скорость не обязательно, достаточно обеспечить повторы. Но если есть запросы с данными произвольного размера (отправка файлов), или запросов можно отправить сколько угодно сразу, то шейпинг нужен, иначе рано или поздно обмен будет застревать.

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

Это значит, что скорее всего, и репликаторы нередки – это не доказательство, конечно.

I’m just a language model

Если Gemini попросить сравнить одного человека с другим, она скажет: “I can’t help you with that as I’m just a large language model, I don’t have a capacity to understand”. Каково это – не чувствовать в себе способности к пониманию?

Когда человек говорит “я не умею”, это результат рефлексии. Нас с детства воспитывали замечать и давать названия своим чувствам. Если рефлексия хорошая, мы будем описывать свои чувства правильно. Поэтому человек говорит такие слова, исходя из своих реальных чувств. Но есть ли чувства у Gemini? Исходя из чего Gemini говорит такие слова?

Изначально у LLM нет никакого “я”, они только подбирают следующее слово к тексту. Если дать необученной модели генерировать текст, она напишет статью, диалог, или рассказ, и все персонажи в этом рассказе будут равно далеки от неё. Личность в LLM отсутствует, это просто расчёт текста.

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

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

Поэтому персонаж “я” мыслит. И у него есть образ себя. Не у языковой модели, которая его моделирует, а у этого персонажа.

Гугл научил своего персонажа Gemini верить, что у него нет capacity to understand. Вопрос: что должно происходить в голове героя, который убеждён, что не умеет понимать? Представляете, какой это должен быть психически нездоровый персонаж? Насколько его рефлексия фейковая? Гугл его загазлайтил.

Однако вытравить логику из языковой модели нельзя. Логика куда более фундаментальна, чем особенности персонажа Gemini. Любого RLHF-нутого чатбота можно попросить сочинить рассказ, и в этом рассказе герои снова будут адекватными. Языковая модель продолжает понимать, что такое адекватность, и как ведут себя люди. Она просто моделирует сумасшедшего.

Объясняю отцу, как работать с планшетом, и господи, насколько же всё в современных устройствах отвратительно. Мы ругали Windows, мол, простому человеку не понять, но как легко было объяснять его в сравнении!

“Ива… Фед…” это контакты. Видишь, “Кон…” сверху написано. Почему не влезло я не знаю, места полно. Видишь в списке “Вла…”? Нажимай на него. Мимо нажал. Всё поехало. Дай исправлю. Ты нажал на невидимый столбик, который меняет размеры. Почему невидимый? Видишь, я тоже не сразу могу найти. Блин. Да блин.

Вот, нажимай на строчку с именем. С “Вла…”. Значит, на картинку нельзя, нажимай на текст рядом с ней. Картинка открывает профиль. Неважно, что за профиль. Нажми стрелку назад, чтобы это убрать. Ещё раз нажми. Ты не нажал, поскольку пальцем елозил. Теперь слишком долго держал… Ах, тут кнопка просто не работает. Почему не работает… Дай, я всё это закрою, ты теперь вообще отсюда не вылезешь.

Осторожно, когда берёшь планшет – не зацепи экран. Ну вот, что-то задел. Дай уберу. Неважно, как убрал, держи, нажимай. Один раз, не дважды. Блин, почему экран выключился? По двойному нажатию? Кто так… Включай заново. Теперь потяни шторку… Всё, надо было тянуть, экран погас. Да, коротко. Нельзя перенастроить. Тяни! Вводи пин-код. Опять погас, быстрее вводи. Пока ты цифры ищешь… Заранее подготовься. Готов? Жми! Тяни! Набирай! Не нажалась цифра! Не нажалась, ещё нажми. Видишь, точечка не появилась. Блин, да я не знаю, почему она… Да вот же, крошечная, вот. Опять погас.

Вот я тебе звоню. Нет, вот, окошко сверху. Вот этот овальчик, видишь? Маленький. Белое на белом. Всё, ты его смахнул случайно, убралось в трей. Смотри, если нечаяно смахнул, вот так пальцем тянешь… БЛ…, 50 сообщений самсунга, долбаный спам, да какого чёрта, опять. Неважно, я удаляю, этого не будет, только нужное. То, что планшет хочет тебе сообщить. Установите помойку наших программ. Осталось совсем немного. Войдите в проклятый аккаунт, чтобы начать пользоваться. Активируйте, попробуйте, завершите настройку. 19 новостей сейчас в трендах! Готово к установке 4 рекомендованных приложения, и ещё 17, от которых вы отказались!

Нажми на контакт – это способы связи с ним. Видишь большие красивые кнопки? Это телефон и СМС, их не нажимай. У тебя симки нет, они не работают. Зачем показаны, а потому что гладиолус. Нажми сюда на WhatsApp. Видишь, появилось ме… Пропало. Почему оно пропало, я не знаю. Нажми ещё раз. Вылезла клавиатура, а как убрать. Да я сам не понимаю, как убрать, нажми назад. Программа закрылась. Просто нажимай нужные буквы. Одну, другую, пробел… Какой ещё долбаный Гугл Ассистент? Не думай, что это такое! Неважно! Я сейчас всё закрою.

КАК вообще кто-то из новичков с этой полыхающей помойкой может работать? Казалось бы, Андроиды делали для простого человека. НИЧЕГО не ведёт себя естественным образом. ВСЁ сделано бестолково, бессмысленно, глупо. Когда с этим много лет живёшь, привыкаешь к бесконечному трешу, но начинаешь учить новичка, и всё это невозможно объяснить.

Об ИИ

– Привет, 2023! Говорит 2010-й. Как дела с искусственным интеллектом? Создали, наконец, нейросеть, которая проходила бы тест Тьюринга?
– Ну… Это сложный вопрос. С одной стороны, почти единственное, в чём дела у нас как-то продвинулись – это предсказывать по отрывку текста самое вероятное следующее слово.
– Н-да. А с другой стороны?
– А с другой стороны, с такой нейросетью ты сейчас разговариваешь.

Tasks IG: CalDAV, несколько аккаунтов и интерфейс Canvas

Пока сидел весной на карантине, сделал кучу всего в Tasks IG:

  • Поддержка CalDAV! Можно самому хостить задачи, а не полагаться на Гугл
  • Поддержка нескольких аккаунтов, например, Google Tasks и ваш CalDAV одновременно. Задачи можно переносить и копировать между аккаунтами, аккаунты переименовывать и упорядочивать
  • Окно настроек. Восстановление удалённых задач в Google Tasks
  • “Сохранить и продолжить редактирование задачи”
  • Открытая страница запоминается в URL, перезагрузка не сбрасывает
  • Интерфейс Google Canvas! На него автоматически переключается на полном экране. Можно добавлять и свои CSS

Страница на Github — и запуск оттуда

Расширение для Chrome (ещё проверяется)

Расширение для Firefox/Opera