7.Закрой руфус и подключи мышь в синий порт 3.0, а клаву в чёрный 2.0
8.Выключи пк и включи
9.Выбери запуск с флешки.
10.Выбери пункт первый
11.Тести
Если не сработало на пк то тести на Virtual BOX. Если захочешь установить на диск смотри что я делал на видео. Если нашёл баги пиши в коменты. Смотри чтобы работало надо чтобы была и клавиатура и мышь. Ставь лайк и подпишись чтобы поддержать меня!
Благодарю за ваш комментарий! Чего-то в таком роде я и пытаюсь добиться. Из наиболее похожих «предвестников» подобной самоорганизации есть вот такая конфигурация.
На момент публикации сервис Github Pages прилег отдохнуть, потому ссылка может открываться не с первого раза — потому добавлю видео (симуляция в нем воспроизводится ускоренно).
Хочу рассказать об эксперименте, целью которого было продемонстрировать, что с помощью небольшого набора правил можно создавать сложные, интересно устроенные виртуальные миры прямо в окне браузера.
Это своего рода симуляция «цифровой химии» — межатомных взаимодействий в 2D- и 3D-пространствах:
коллизии и отскоки частиц при контакте;
силы притяжения и отталкивания между частицами;
связи между частицами и влияние других частиц на эти связи;
влияние температуры и других факторов среды (макропараметров) на поведение частиц.
Основные цели данного проекта заключаются в изучении самоорганизующихся систем, синтезе конфигураций с большим многообразием сложных соединений, а также сложных реакций между ними. В идеале — в получении «молекул», имеющих формальные признаки жизни — саморепликацию, наследственную изменчивость и метаболизм.
Частицы разных типов визуализируются разными цветами. От типа частицы зависят их свойства, представленные в конфигурации мира:
Матрица коэффициентов гравитации несвязанных частиц показывает, будет ли частица одного типа притягиваться или отталкиваться от частицы другого типа в случае, когда они не связаны между собой, и с какой силой.
Матрица коэффициентов гравитации связанных частиц показывает, будет ли частица одного типа притягиваться или отталкиваться от частицы другого типа в случае, когда они связаны между собой, и с какой силой.
Список лимитов связей показывает, какое максимальное количество связей могут иметь частицы каждого типа.
Матрица лимитов связей показывает, какое максимальное количество связей могут иметь частицы каждого типа с частицами разных типов.
Тензор влияния частиц на связи своих соседей (как близость частицы типа A влияет на прочность связи частицы типа B с частицей типа C).
На последнем пункте остановимся поподробнее. Без этого правила почти все сгенерированные вселенные через какое-то время застывали или приходили в вечное движение, но без регулярного образования новых связей. Для решения этой проблемы я ввел правило, по которому частица каждого типа имеет возможность повлиять на максимальную длину связей частиц разных типов в сторону увеличения или уменьшения. Таким образом получилось достичь эффекта непрекращающегося синтеза и распада сложных «молекулярных» соединений.
Всеми основными параметрами симуляции можно управлять через пользовательский интерфейс, меняя таким образом «физику» мира. Кроме того, за счет настраиваемой рандомизации можно создавать практически неограниченное количество уникальных новых «вселенных» со своими неповторимыми законами. В общем, получилась занимательная и залипательная штука.
Для высокопроизводительной обработки взаимодействий между тысячами частиц пришлось применить множество приемов оптимизации (объектный пул, прокси-фасад, кубическая кластеризация пространства и другие). Расти в этом направлении еще есть куда, но эту работу я уже буду продолжать на Python с использованием Numpy и Numba, потому что браузер позволяет использовать только одно ядро процессора на одну открытую вкладку, что сильно ограничивает возможности масштабирования.
Вот ссылки на демо нескольких любопытных конфигураций со сложным поведением частиц:
Потыкать и почувствовать себя демиургом можно здесь. Исходный код живет на гитхабе. Поделиться ссылкой на интересную конфигурацию можно здесь, в комментариях, или в специальном issue.
Кстати, встретив интересный набор законов, не хочется, чтобы он канул в лету после закрытия окна браузера, — поэтому я внедрил кнопку создания ссылки на запуск симуляции с заданным набором параметров. А поделиться ссылками на интересные конфигурации можно в специальном issue либо здесь, в комментариях.
Все началось с рабочей задачи по реализации весьма специфичной web-панели мониторинга и управления различным оборудованием, в которой нужно было получать данные и отправлять команды по разнообразным сценариям (периодический опрос, подписка на websocket-события, https-запросы и т.д.), а также выводить состояние и графики в реальном времени, динамически комбинируя различные источники данных в разных виджетах.
Кроме того, у панели было предусмотрено несколько настраиваемых режимов работы, которые переключались по запросу пользователя, что требовало массового управления маршрутами потоков данных внутри системы.
В первой итерации с использованием RxJS получилось много неструктурированного и сложно поддерживаемого кода, так как архитектура на RxJS вынуждала императивно описывать перестроение топологии при изменении правил маршрутизации «на лету». В нашем специфичном кейсе с динамическими виджетами это приводило к сайд-эффектам и сложностям в отладке. Кроме того, местами размывалась строгая типизация и мы лишались compile-time гарантий. Так появилась идея разработать собственное решение на основе альтернативной концепции — модели графа потоков данных.
В результате получившаяся модель продемонстрировала предсказуемое поведение и низкую связность компонентов, а кодовая база сократилась на ~30% и приобрела более декларативный вид. Убедившись в эффективности решения, мы решили оформить его в виде отдельной библиотеки с открытым исходным кодом — Transferum.
И что, получилась просто еще одна реактивная библиотека?
Не совсем. Классические FRP-библиотеки (RxJS, Bacon, Most) построены вокруг единственного примитива (Observable). Transferum же основан на композиции различных типов узлов с явно определенным поведением.
Каждый узел в графе потоков распространения данных явно декларирует свои способности: может ли он принимать данные через push, отдавать через pull, распространять полученный сигнал подписчикам, опрашивать источник, фильтровать, блокировать поток и т.д.
Объявленные узлом возможности являются одновременно флагами для использования в runtime и compile-time гарантиями наличия соответствующих методов, определяющих его поведение.
Ключевая идея: поведение системы описывается как композиция независимых возможностей, которые одновременно определяют тип, реализацию и правила взаимодействия.
Transferum предоставляет четыре слоя абстракции:
Трансферы — узлы графа (каналы, поллеры, мапперы, буферы, разветвители и концентраторы, реализации debounce, throttle, switchMap и т.д.).
Мосты — ребра графа — управляемые вентили между узлами с динамической маршрутизацией и гейтингом.
Операторы — stateless-трансформаторы и фильтры данных (используются трансферами, отвечающими за конвертацию данных).
Билдеры — fluent-конструкторы композитных трансферов из цепочек трансферов-примитивов.
Концептуальная и архитектурная основа — capability flags system. Каждый трансфер реализует CommunicationContractInterface — набор булевых флагов, определяющих его возможности.
Флаги isPushable, isPullable, isSubscribable, isGate и другие — это не просто свойства объекта. Это метаданные, которые:
Определяют TypeScript-интерфейс трансфера на этапе компиляции.
Управляют стратегией связывания с другими трансферами в рантайме (с помощью функции linkTransfers()).
Обеспечивают совместимость в билдерах без приведений типов.
Один набор флагов — три потребителя. Это единый источник истины для всей системы.
Когда флаг равен true, соответствующий метод входит в TypeScript-интерфейс трансфера. Это позволяет предоставлять трансфер пользователю вот так:
Transfer
// гомогенный трансфер: T -> [ Transfer ] -> T
Или вот так:
Transfer
// гетерогенный трансфер: TInput -> [ Transfer ] -> TOutput
Именно в таком формате типов фабрики в библиотеке возвращают трансферы. Например:
const pushChannel: Transfer;
const converter: Transfer;
// содержат методы push(), subscribe()
const manualBuffer: Transfer;
// содержит методы push(), pull(), trigger()
// trigger() в данном случае нужен, чтобы сделать запушенное значение
// доступным для чтения через pull()
const pollingProxy: Transfer
// содержит методы pull(), subscribe(), trigger(), activate(), deactivate(), toggle()
// может быть связан с pullable-источником благодаря поддержке поллинга
Эта «магия» работает в compile-time благодаря несколько замысловатой системе вычислимых типов:
Трансфер определяет своё поведение (push, pull, subscribe и др.), но никогда не ссылается и не проверяет класс другого трансфера. Он не знает, что является upstream или downstream — лишь выполняет свой контракт. Пользователь может создать свой трансфер, объявить и реализовать его возможности — и он органично и бесшовно впишется в экосистему.
2. Мосты не знают конкретных реализаций
Мост инспектирует capability flags, а не имена классов. Нет цепочки instanceof, нет переключения по имени класса. Любой output-трансфер может быть соединен с любым input-трансфером — при условии совместимости их флагов, о чем мы поговорим чуть ниже. Это применимо и к тем узлам, которые еще не существуют и будут созданы пользователем.
3. Значение undefined никогда не распространяется
В Transferum undefined означает «нет данных», а не «пустое значение». Оно подавляется на уровне внутренней реализации менеджера подписок — подписчики никогда не уведомляются с undefined. При этом для явных маркеров пустых значений можно использовать null. Мы сознательно пошли на этот компромисс, чтобы избежать runtime-оверхеда и сохранить нативную скорость работы на плотных потоках данных.
Связывание трансферов
Функция linkTransfers(lhs, rhs) соединяет output-трансфер (lhs) с input-трансфером (rhs) с автоматическим выбором стратегии связывания на основе возможностей этих трансферов:
Protocol-oriented design: механизм не спрашивает «какой это класс?» — он выясняет, какие у него есть возможности. Любая пара трансферов с совместимыми возможностями является linkable. Добавление нового класса трансфера требует только объявления его флагов и реализации соответствующих методов — как связать его с другим трансфером, связующий алгоритм разберется сам.
Синхронные и асинхронные трансферы сосуществуют и могут быть связаны между собой. linkTransfers() предпочитает sync-связывание, когда это возможно, а async-стратегии применяет только когда sync неприменим. Нет отдельного «асинхронного мира».
Поддержка backpressure
Ряд асинхронных трансферов (AsyncSinkTransfer, AsyncWriteTransfer, AsyncConvertTransfer, AsyncConditionTransfer) поддерживают необязательные поля в конфигурации: maxConcurrency, bufferSize и onBufferOverflow — для ограничения параллельных async-операций, очереди избыточных данных и graceful-обработки переполнения. По умолчанию — неограниченная обработка, без буферизации.
Локальная обработка ошибок
Transferum использует единую модель обработки ошибок для всех трансферов. Каждый трансфер, который может столкнуться с runtime-ошибкой, принимает опциональный onError-хэндлер в своей конфигурации.
А теперь — к примерам использования
Вот так можно просто и декларативно описать опрос и агрегирование данных из нескольких источников:
А вот как можно организовать динамический роутинг:
import {
createPushStoredChannelTransfer,
createBridgeMultiSelector,
createBridgeSelector,
createPassBridge,
} from 'transferum';
// Вариант 1. Выбор одного реципиента
const commandRouter = createBridgeSelector({
bridges: {
light: createPassBridge({ source: commandChannel, target: lightController, activated: false }),
thermostat: createPassBridge({ source: commandChannel, target: thermostatController, activated: false }),
lock: createPassBridge({ source: commandChannel, target: lockController, activated: false }),
},
initialKey: 'thermostat', // выбор по умолчанию
activated: true,
owned: true,
});
commandRouter.select('lock'); // выберем другой вариант
// Вариант 2. Выбор нескольких реципиентов
const loggersRouter = createBridgeMultiSelector({
bridges: {
prometheus: createPassBridge({ source: metricsChannel, target: prometheusWriter, activated: false }),
elk: createPassBridge({ source: metricsChannel, target: elkWriter, activated: false }),
sentry: createPassBridge({ source: metricsChannel, target: sentryWriter, activated: false }),
},
initialKeys: ['prometheus', 'elk'], // будут активированы по умолчанию
activated: true,
owned: true,
});
loggersRouter.check('elk'); // теперь выбраны все три
loggersRouter.uncheck('prometheus'); // выбраны elk, sentry
loggersRouter.select(['prometheus', 'sentry']); // выбраны prometheus, sentry
А вот пример c организацией игровой механики:
import {
createDebounceTransfer,
createConvertTransfer,
createMapOperator,
createBridgeSelector,
createPassBridge,
linkTransfers,
} from 'transferum';
// Источник: debounce нажатий клавиш (16ms ~ 1 кадр при 60 FPS)
const rawInputSource = createDebounceTransfer({ delay: 16 });
// Конвертер: KeyboardEvent -> код клавиши
const inputConverter = createConvertTransfer({
operator: createMapOperator((event) => event.code),
});
// Целевые системы-потребители пользовательских событий
const carSystem = { push: (cmd: string) => console.log(🚗 Car executing: ${cmd}) };
const planeSystem = { push: (cmd: string) => console.log(✈️ Plane executing: ${cmd}) };
const menuSystem = { push: (cmd: string) => console.log(📋 Menu processing: ${cmd}) };
// Роутер: динамическое переключение между игровыми контекстами
const gameplayRouter = createBridgeSelector({
bridges: {
driving: createPassBridge({ source: inputConverter, target: carSystem }),
flying: createPassBridge({ source: inputConverter, target: planeSystem }),
ui: createPassBridge({ source: inputConverter, target: menuSystem }),
},
initialKey: 'driving', // игрок начинает в машине
activated: true,
});
// Связывание источника с конвертером с автовыбором стратегии
linkTransfers(rawInputSource, inputConverter);
// Демонстрация:
// Игрок в машине нажимает "W"
rawInputSource.push(new KeyboardEvent('keydown', { code: 'KeyW' }));
// Через 16ms: 🚗 Car: KeyW
// ==================
// Переключаемся на самолёт
gameplayRouter.select('flying');
// Та же клавиша теперь управляет самолётом
rawInputSource.push(new KeyboardEvent('keydown', { code: 'KeyW' }));
// Через 16ms: ✈️ Plane: KeyW
Когда имеет смысл попробовать Transferum
Библиотека подойдет для:
TypeScript-first проектов — благодаря максимально строгой типизации и compile-time вычислению доступных методов любого трансфера на основе объявленных у него флагов возможностей.
Работы с pull-based источниками данных — polling API, датчиков, хранилищ с PollingProxy.
Смешанных sync/async пайплайнов — в единой модели без ручного преобразования.
Явного flow control — gates, bridges, selectors для runtime-маршрутизации.
Game development / IoT — frame-aligned tickers, idle polling, sensor aggregation.
Устойчивой обработки ошибок — локальная, non-fatal обработка: одна стадия не убивает пайплайн при условии переданного в конфиге обработчика ошибок, ничего не подавляется молча.
Результаты и планы
Библиотека уже используется в двух наших внутренних проектах и показывает свою эффективность. Код доступен на GitHub под лицензией MIT, библиотека не имеет внешних зависимостей и поставляется с подробной документацией (README + API Reference).
В одном из проектов граф состоит из ~80 узлов и стабильно обрабатывает несколько сотен событий в секунду без деградации. На основе этих данных в том числе рендерится 3D-сцена в Babylon.js со стабильным фреймрейтом ~60 FPS без микрофризов.
Тесты библиотеки покрывают не только отдельные трансферы, но и поведение системы в динамике: переподключение мостов, обработку ошибок в длинных асинхронных цепочках, а также разнообразные граничные случаи. Покрытие — 100%.
В дальнейшем планируем реализовать хуки и утилиты для более удобного и нативного использования Transferum с Vue и React. Если они окажутся в достаточной мере переиспользуемыми, оформим в отдельные пакеты-адаптеры.
Буду рад, если вы заглянете в репозиторий, попробуете библиотеку в деле и поделитесь замечаниями — обратная связь поможет сделать Transferum лучше.
P. S. Если вы сталкивались с похожими задачами и решили их как-то иначе — буду рад прочитать о вашем опыте в комментариях.
1. Нельзя гуглить, надо помнить: можно и нужно. Профессионалы гуглят синтаксис, который знают десять лет. Память —она для логики, а не для команд.
2. Нельзя копировать чужой код: можно, если разбираете что скопировали и свой тоже пишете. Копипаста с пониманием — нормальная работа. Проблемой она становится без понимания.
3. Нельзя браться за проект, пока не выучил основы: можно. Все основы выучить невозможно. Проект сам покажет чего не хватает — и тогда вы это выучите с интересом.
4. Нельзя изобретать велосипеды: на этапе учёбы — нужно. Собранный своими руками велосипед учит в сто раз больше купленного.
5. Нельзя задавать глупые вопросы: глупых вопросов нет. Есть люди, которым лень объяснять — ну так идите к другим, таких много. У меня вот есть целое сообщество таких людей, которые на любой вопрос готовы ответить, и оно не одно такое, я уверен.
6. Нельзя писать плохой код: можно. Работающий кривой код лучше идеального ненаписанного, особенно когда только учитесь. Улучшите потом — когда будет что улучшать. Да и переписывание кода это одна из вещей, которые профессионалы постоянно делают, потому важно тренироваться это делать
Нет. Я не буду лезть в дебри шифрования, я посмотрю на это с другой стороны.
Наткнулся на статью, начал почитывать и возникла, возможно крамольная мысля, которую и хочу донести. Возможно я не прав, но всё же. И так, в статье идёт сравнение старого ГОСТ 28147-89 с новыми ГОСТ Р 34.12-2015 (Магма) и ГОСТ Р 34.13-2015 (Кузнечик).
“Базовый алгоритм криптографического преобразования шифра «Магма» совпадает с алгоритмом ГОСТ-89 – длина блока n = 64 бита, длина ключа k = 256 бит. Отличие «Магмы» от ГОСТ-89 заключается в том, что для первого используемые восемь 4-битовых s-боксовопределены и описаны в самом стандарте ГОСТ Р 34.12-2015. В стандарте ГОСТ 28147-89 подобное описание подстановок отсутствовало, что оставляло разработчику право выбора и реализации s-боксов. За криптографически качественными s-боксами разработчики СКЗИ обычно обращались к регулятору. Качественные s-боксы существенно усложняют (в криптографическом смысле) раундовую функцию шифра, поэтому фиксация значений подстановок позволяет унифицировать реализации алгоритмов, описанных в стандарте, и исключает использование «слабых» s-боксов при реализации блочного шифра.”
Да, усилили сами s-боксы, но, отобрали право разработчику самому определять таблицу подстановок. Неизвестная для криптоаналитика “хорошая“ таблица подстановок значительно увеличивает время взлома шифра, а тут она прописана в ГОСТе. Что-то намекает мне, что это сделано совсем не для унификации алгоритмов…
Если кому интересно, то вот сам ГОСТ Р 34.12-2015 - в нём только математика и намертво прописанные параметры.
З.Ы. Если я что-то не правильно понял, пните меня в правильном направлении, плиз.
Тут тусуются чуваки, что пытаются самоделить в погроммировании. Я уже при общении с одной самоудалившейся обиженкой упоминал, что решил поиграться в аврдуино, была закуплена платка ESP32-C3, размер чуть больше ногтя моего большого пальца на руке. Зато умеет дофига. По факту это 32битный проц на частоте 160МГц с периферией, да, ядро одно, но его можно сравнить с первым пентиумом.
Конечно мыргать светодиодиком (эдакий “hello world” в мире ардуино) неинтересно. Учитывая, что у него есть на борту WiFi и Free RTOS то появилась идея наладить общение с домашней сетью. Гугель, как всегда, не позволяет тратить время на чтение документации, потому вышло достаточно легко, но долго, т.к. разбирался с самой Arduino IDE. После ентого, опять же с помощью гугеля наваял на ентой малютке веб-сервер, который как раз и мыргает светодиодиком.
И, когда получилось сделать асинхронный (работающий в фоне) веб-сервер, тогда и загорелся сделать свою метеостанцию. Да, будет долго и дорого. Но то, что продаётся “за дёшево“ на, пока ещё не погоревших маркетплейсах, не умеют мерить атмосферное давление, только температура и влажность - экономят на датчике.
За качество видео не пиняйте - снял как смог, ну и ватерпас от сайта - лень было вспоминать ffmpeg скрипт для сжатия. И да, шнурок чисто для питалова - в панели задач запущены только бравзеры.
Разработчик Marsa Chain только что выкатил критически важное обновление, которое окончательно закрывает рты всем диванным критикам. Проект официально стал Open Source!
Помните дорожную карту на сайте? Пункт про открытие, кода стоял на второй квартал 2026 года. И разработчик выполнил обещание в срок. Вся техническая начинка блокчейна теперь лежит в открытом доступе на GitHub. Это колоссальная работа. В ней более 42-х тысяч, Карл, строк!
Что именно открыли для аудита?
1. Ядро блокчейна (Fullnode): Весь код узлов сети - от логики консенсуса и валидации блоков до сетевого взаимодействия (p2p) и майнинг-API. Всё написано на C++, с нотками других языковых моделей, как и заявлялось. С конкретным процентным соотношением, можете ознакомится на GitHub.
2.Клиентская часть: Код кошелька, интерфейсы и пользовательские инструменты. Полная прозрачность.
3.История изменений: Репозиторий открыт вместе со всей историей разработки, так что можно увидеть эволюцию проекта изнутри.
Почему это фундаментальный сдвиг?
● Нулевой риск скама: В крипте доверяют только коду. Открытый код означает, что в проекте нет скрытых уязвимостей, скрытых комиссий создателей или механизмов «скам-слива».
● Независимый аудит: Теперь любое криптосообщество, майнеры и сторонние разработчики могут лично проверить логику протокола Commitment-Challenge.
● Безопасность: Открытый код развивается в разы быстрее, так как комьюнити помогает находить и закрывать мелкие баги до того, как они станут проблемой.
Что это значит для нас с вами?
Marsa Chain подтверждает статус серьезного технологического продукта, а не очередной краткосрочной «тапалки». Проект строится с заделом на будущее, и мы зашли в него на самом старте.
Если среди читающих есть разработчики, то залетайте в репозиторий, изучайте C++ код и проверяйте архитектуру. А для всех остальных - это зеленый свет, чтобы скачивать официальный APK-клиент с сайта и спокойно майнить монеты до первого халвинга.
Решил я поиграться в ардуинки. Выбор пал на ESP32-C3 с 0,42-Дюймовым OLED-Модулем за какие-то там 200 руб. Пока оно едет из Китая думаю, дай потыкаюсь со средой разработки. Раньше дела с ней не имел.
Оказывается есть две версии под линухой. Одна на электроне v. 2.3.8 и старая 1.8.19 на Java. Но об ентом я ещё не знал, естественно выбрал поновее и получил засаду - вечно крутится на заставке. Думал наши разрабы АльтЛинухи накосячили с опакечиванием, перепробовал кучу сборок со стороны (не из репов Альта) - везде одно и тоже - вечно крутится заставка. Запустил иде из консоли и увидел туеву хучу ошибок с невозможностью чего-то там скачать. Направление гугления тут же изменилось и выяснилось, что www.arduino.cc лочит россиян из-за Cloudflare (эдакий сервис для защиты сайтов от хакерских атак). Что и и как произошло между Cloudflare и РФ вспоминать не стал и начал думать как пустить Ардуино-ИДЕ через тор-сеть. Придумать не удалось
Вот тогда я и узнал, что разница между старой и новой ИДЕ исключительно в интерфейсе, более того, настроек сети в новой версии я не нагуглил (возможно пальчиками где-то в конфигах и прописывается). А вот в старой версии пожалуйста Файл-->Настройки->Сеть:
При этом все библиотеки и "платы" начали загружаться. И да, версия из репозиториев Альта. Между прочим, ардуинки часто используются не только как хобби, но и в образовательных целях. Но политиканам насрать на это.
Всем доброго времени суток, с вами на связи Lis-ST, и сегодня мы с вами более подробно ознакомимся с нейросетями, которые чаще всего и называют ИИ, а именно с языковыми моделями. Начнём от простого, к сложному.
Восприятие языковых нейронок.
Как нейросеть видит нашу письменность.
Модели не понимают буквы и слова как люди. Их родной язык — числа. Решить эту проблему довольно просто, ведь правда? Просто присваиваем каждой букве и знаку число - проблема решена! Но практика показала обратное, на обработку текста в таком формате требовалось очень много вычислительных мощностей и времени, а при увеличении длины текста требования росли в квадратичной зависимости. Причина банальна, внутри скрытого слоя каждый символ должен "взаимодействовать" с каждым, и это не единственная проблема.
Первый шаг в решении данной проблемы, разбить текст на части - "токены". А раз уж решили прибегнуть к такому способу и так как нейросеть всё-равно работает с числами, почему бы их не сделать из наиболее часто встречающихся частей текста:
С одно стороны, когда у нас были символы, наш словарь состоял из 256 значений, а токенов в той же GPT более 50000... Какая-то оптимизация наоборот, скажете вы и будете не правы. Всё дело в том, что если токеновая модель обрабатывает последовательность из 1000 токенов за условные 10 секунд, то символьной модели для обработки того же текста потребуется уже минимум 160 секунд, неплохая такая разница?
Вкратце затронем эмбеддинги - так называемый вектор. Зачем нам какой-то вектор, ведь токены у нас, числа им присвоены? Но нужно же как-то определять, в каком порядке токены размещены в тексте. Не забываем о контексте за который отвечает механизм внимания (Self-Attention), работающий так-же в скрытом слое, всё также путём присвоения дополнительных значений токенам.
Генерация - не сердце, но суть нейросетей.
Валера, что-то не нравится мне этот расклад, как бы чего плохого не случилось.
Языковая модель — этоочень умный писатель, он никогда не видит весь текст сразу, а пишет по кусочкам (токенам). И каждый раз, когда нужно выбрать следующий кусочек, в его голове происходит невидимое "голосование".
После того как модель прочитала всё, что вы написали, она составляетвнутренний рейтинг всех возможных продолжений. У неё в голове есть огромная доска рейтинга на 50 000 мест (по числу токенов). У каждого варианта — своя оценка. Эти оценки — не про "правильность", а протипичность. Модель спрашивает себя: "Что в моей обучающей библиотеке чаще всего шло после такого начала?"
Пример: вы написали "Сегодня хорошая...". В голове модели:
место №1: "погода" - (очень высокий балл)
место №2: "." (точка) - средний балл
место №3: "для" - небольшой балл
место №1000: "крокодил" - почти ноль
Модельникогда не уверена на 100%, у неё есть тольковеса предпочтений.
Что происходит с этими весами дальше? Два Варианта:
Вариант №1: Точность.
Модель всегда берётсамый верхний вариантиз рейтинга. Увидела "погода" - напечатала "погода". Потом снова смотрит рейтинг для "Сегодня хорошая погода", опять берёт самый верхний... В итоге получается очень предсказуемый, сухой,бездумно-правильныйтекст. Как говорят: "модель включила режим калькулятора". Плюс: не ошибается, минус: нет творчества, повторяет штампы.
Такой режим используется, когда нужен точный факт, код или перевод. Но общаться с таким собеседником скучно и бесполезно, но главное, абсолютно бесперспективно, если вы сунетесь к нейронке с тем, чему она не обучена (запомните главный принцип, касательно "проблем", если решения вашей проблемы нет в интернете, вероятность того, что поможет нейросеть, стремится к нулю, даже при варианте №2).
Вариант №2: Обычный человек.
Модель смотрит на рейтинг иподбрасывает волшебный кубик, где грани взвешены по весам. Вариант с весом 80% занимает 80% граней кубика, вариант с 15% - 15% граней и т.д.. Так она иногда может выбрать и "погоду", и неожиданно «.», и даже очень редко "крокодила", если кубик так выпадет.
Именно за счёт случайноститекст становится живым, разнообразным, иногда остроумным. Но изредка - странным или глупым. Это плата за "человечность" и творчество.
Температура.
Температура за бортом.
Температура - это ручка управления "креативностью" нейросети.
Холодная температура (низкая, например 0.2).
Модель как быувеличивает контрастмежду первым местом и всеми остальными. Первое место становитсягигантским, а все остальные - крошечными. Кубик почти всегда падает на топ-1 результат. Текст становится сухим, однообразным, как диктор новостей, читающий по бумажке.
Лучше всего для:фактов, инструкций, кода, перевода.
Комнатная температура (1.0 - стандарт).
Это естественное состояние модели, то, чему её обучили. Разница между первым и вторым местом естественная. Кубик отражает реальные статистические веса. Текст получаетсяпохожим на обычную человеческую речь- с предсказуемыми, но иногда слегка неожиданными поворотами.
Лучше всего для:обычного чата, деловых писем, новостей.
Горячая температура (высокая, например 1.5).
Модельсглаживает оценки: первое место уже ненамного выше второго, а сотый вариант получает заметный шанс. Кубик становится "расслабленным" - он может выбросить редкое слово, необычную конструкцию, даже неуклюжий, носвежийоборот. Текст получается творческим, иногда странным, иногда гениальным, иногда бредовым.
Лучше всего для:стихов, шуток, креативных идей.
Кипящая температура (очень высокая, например 2.5+).
Все варианты становятся почти равноправными. "Погода" и "крокодил" получают почти одинаковые шансы. Кубик выпадает практически случайно. Текст превращается вбессмысленный словесный шум - связные слова, но нелепые сочетания ("Сегодня хорошая крокодил на завтрак"). Полезно разве что для демонстрации того, как модель ломается.
Есть ещё более умные настройки, дополняющие температуру, но статья и так уже не маленькая, а это плохо.
Манипуляции нейросетью.
Да, я такой.
Чтобы задать нейросети нужный "настрой" или стиль, используют два главных инструмента:ручки температуры(о которых мы говорили) иволшебные слова в начале диалога(промпты).
1. Задаём "характер" словами.
Представьте, что вы нанимаете актёра. Вы не просто говорите "говори", а даётевводную о роли:
"Ты - научный популяризатор, который объясняет сложные вещи на пальцах. Ты не используешь формулы и термины, если без них можно обойтись. Ты любишь метафоры, примеры из жизни и немного юмора. Твой стиль - как у хорошего учителя или ведущего научно-популярного шоу."
В GPT это называетсяsystem prompt(системное сообщение). В других моделях - просто первое сообщение, которое задаёт контекст.
Что ещё можно прописать в настройку:
"отвечай кратко, не более трёх абзацев"
"используй маркированные списки, но без markdown"
"называй меня на "ты""
"добавляй примеры из кулинарии/спорта/путешествий"
Это самый мощный способ изменить стиль, потому что модель начинает "вживаться" в роль.
Вот несколько самых интересных примеров того, на что способен системный промпт за пределами привычных сценариев:
Придумать "анти-совет" для вашей идеи (Адвокат Дьявола):
Нейронка по умолчанию старается быть вежливой и соглашаться. Но промпт может превратить её в беспристрастного критика, задача которого - найти слабые места в вашем бизнес-плане или проекте, чтобы вы могли его улучшить.
Подготовиться к сложному интервью:
Попросите нейросеть представить себя журналистом, который задаст вам каверзные вопросы. Это поможет вам заранее подготовиться к разговору с реальным экспертом.
Писать стихи в стиле числа "π":
В этом промпте каждое слово стихотворения должно строго соответствовать цифрам числа Пи (3,14,15…), где первое слово - из трёх букв, второе - из одной, третье - из четырёх и т.д.
Заключение? Итог? Выводы?
А теперь можно вернуться к вопросу, существует ли ИИ на сегодняшний день? Но чтоб разобраться в данном вопросе, нужно в первую очередь понять, что такое ИИ.
Исходя из словосочетания, ИИ, это интеллект, но искусственный, а интеллект - это качество психики, состоящее из способности осознавать новые ситуации, способности к обучению и запоминанию на основе опыта, пониманию и применению абстрактных концепций, и использованию своих знаний для управления средой обитания человека.
Да, это сухое, весьма размытое определение, которое не даёт чёткого представления о том, что-же это такое. Если же посмотреть на то, с помощью чего он реализуется, всё становится на свои места: способности познавать, обучаться, мыслить логически, систематизировать информацию путём её анализа, определять её применимость, находить в ней связи, закономерности и отличия, ассоциировать её с подобной информацией, оценивать её достоверность, актуальность и многое другое...
И опять вернёмся непосредственно к вопросу, являются ли нейросети - искусственным интеллектом? На все 100% нет, и даже близко ничего общего с ним не имеют. По своей сути нейронки - поисковик, работающий на глюках.
П.С.:
У Лисёнка голова бобо. Тут хотел написать в рифму к первому предложению, но видимо ещё не совсем.
Всем спасибо за внимание, с вами был Lis - Silver Tail. Ссылка на первый пост об основах нейросетей ниже.(блин, это же ещё всё вычитывать...(здесь был смайлик))
Всем доброго времени суток, с вами на связи Lis-ST. Это мой первый пост, не на данном сайте, а вообще, (не зря же я состоял в "Лиге лени"), но на общем фоне нейроистерии и всё большего распространения нейросетей кто-то должен хотя бы минимально объяснить, что же такое "Нейросеть", а так-же как правильно с ними работать и чего в принципе от них можно ожидать. В данном посте затронем только самые основы.
Немного истории
Здесь можно было бы надергать текста с вики, различных ресурсов, прогнать всё это через нейронку и вставить тысячи нудных строк на 2 часа чтения, но мне лень, поэтому пробежим вкратце по основным моментам.
Сама идея, создать что-то, что работало бы схожим образом с мозгом, как ни удивительно, появилась задолго до появления компьютеров. Первая математическая модель нейрона была создана ещё в 1943 году.
Первая же нейросеть появилась в 1950 году, примерно в это время начали появляться первые предшественники современных компьютеров. Умела она немного, могла только отличить круг от квадрата, или квадрат от круга, может ещё от треугольника, но ничего сложнее. И на этом всё развитие данной идеи практически остановилось по банальной причине - недостаток вычислительной мощности. Но, это не значит, что от идеи полностью отказались. Её постепенно развивали, предлагались новые модели, способы тренировки но очень существенный толчок в развитии нейронок я связываю с 2015 годом, именно в этот год была основана OpenAI и в 2016 году она положила начало нейроистерии, выпустив в публичный доступ, нет, не нейросеть, а платформу для разработки и обучения нейронок.
Основы
Тут определённо стоило бы начать с определения того, что такое нейрон, но чем больше будет определений, формул и подобного, тем хуже для восприятия будет текст, поэтому простыми словами - это то, что может принимать, обрабатывать, хранить и передавать информацию. Нейронная сеть - попытка повторить данные свойства нейрона.
Примитивное сравнение мозга и нейронки, не передающее суть.
На сегодняшний день придумано множество разных нейронок, разберём самую примитивную, как на картинке выше, она состоит из трёх слоёв: входной, скрытый и выходной.
Входной слой: на него в нейронку поступают какие либо данные - текст, числа, изображения, координаты и т.п.. Здесь
данные приводятся к удобному для нейронки виду (обычно это числа от 0 до
1), чтобы слишком большие значения не «свели сеть с ума» или не спалили ваш компьютер. У вас закономерно возникнет вопрос, как можно фото котика представить в виде обычного числа? Всё просто, это не одно число, а тысячи, на каждый пиксель выделяется по входному нейрону, который просто задаёт удерживает числовый значения. Так, для картинки 1024 на 1024 пикселя нам потребуется 1 048 576 входных нейронов.
Скрытый слой, на нем остановимся намного подробней, так как он и ответственен за всю магию нейронных сетей. Это по сути «сито», которое фильтрует данные, чтобы найти в них смысл. Нейрон скрытого слоя берет данные на входе, преобразованные в числовые значения и умножает их на «важность» (вес). Например, при
поиске кошки на фото — острые уши и хвост важны, а цвет фона — нет. Затем все результаты складывает в одно число, а полученная сумма сравнивается с порогом, который сформировался при обучении нейронки. Если число достаточно большое, нейрон
«просыпается» и передает сигнал дальше. Если нет — молчит.
Выходной слой — это финал, где нейросеть выдает готовый ответ. Он превращает сложные вычисления скрытых слоев в понятный формат. Если в скрытых слоях нейроны «ищут признаки», то в выходном слое они просто «голосуют» за итоговый результат.
Архитектура и типы нейросетей
В попытках получить наилучший результат, уменьшить требуемые вычислительные мощности для работы нейронок, постоянно придумывались новые варианты их архитектуры, способов тренировки, обработки данных. Так появились на свет нейросети с несколькими скрытыми слоями, каскады нейросетей, свёрточные нейронки и многие другие.
Здесь всё очень сложно, пока на этом не будем заострять внимания, но для общего понимания вот очень краткий список основных архитектур и более подробная картинка для наглядности:
ANN (Нейросети прямого распространения / Перцептроны)
CNN (Сверточные нейросети)
RNN (Рекуррентные нейросети)
LSTM / GRU (Сети с долгой краткосрочной памятью)
Transformers (Трансформеры — основа современных GPT)
GAN (Генеративно-состязательные сети)
Autoencoders (Автоэнкодеры)
GNN (Графовые нейросети)
... наглядности северного пушного зверька. Актуально на сентябрь 2025г.
Завершение
Пока мы коснулись только того, из чего состоит нейросеть, самые основы её работы, но без более подробного разбора мы не придём к пониманию того, почему же у меня от некоторых постов, связанных с нейросетями, весьма не слабо горит кресло. К данному вопросу мы перейдём завтра.
П.С.:
Как-то не так я себе это представлял, капля текста, две картинки, куда два часа исчезли то?
Всё чаще встречаю фразу "навайбкодили". Вот у мну есть скачанные 3 тома "Искусство программирования" от Эрвина Дональда Кнута. Я даже первый его том толком не прошёл по его задачкам на уровне более чем начальный. А у него там есть "задачки со звёздочкой".
Вопрос. Хоть какая-нибудь нейросеть сумела порешать хотя бы с десяток "задач*" не плагиатя то, что уже есть в тырнете?
Короткий познавательный пост, основанный на моей больной фантазии. Все совпадения случайны.
Обратился как-то один человек на профильном форуме с вопросом, как запустить (не сказать чтобы старую) игру на Windows 10. Игра (хотя я бы назвал это технодемо) была разработана на легендарном XNA 4.0 (земля пухом) и планировалась к выпуску через Steam Greenlight (и ему земля пухом) еще в далеком 2012, после чего заброшена и убрана со всех магазинов.
Игра была куплена тем человеком еще в тот момент, когда она легально продавалась. А спустя годы она просто перестала подавать признаки жизни. $5 за полную версию уплочены, а поиграть нельзя. Обидно.
Так как типовые решения по типу установки XNA Redistributable не помогли, то был предложен единственно возможный выход из ситуации - отладка через dnSpy.
Внимание: обратная разработка хоть прямо и не запрещена законодательно, но разрешенные случаи весьма ограниченны. В других странах разрешен явный запрет любых манипуляций через лицензию, превращающий это занятие во вполне наказуемое. Не повторяйте дома.
Так как ПО было приобретено легально и оно не работает, то этот теоретический случай допустим в соответствии со статьей 1280 гражданского кодекса.
Демонстрировать буду на бесплатной демоверсии, скачать можно здесь.
dnSpy
Театр начинается с вешалки, а программа на C# с атрибутов сборки. Они нам сейчас не сильно интересны, поэтому пытаемся сразу запускать отладку. С неизвестными программами лучше использовать виртуальную машину, так как может быть встроена какая-нибудь пакость для кулхацкеров, но мне можно и так.
Ошибка. Открываем стек вызовов и ищем место, где произошел провальный запрос в сеть.
А вот и виновник торжества. По сообщению из исключения можно сделать вполне однозначный вывод, что проблемой является скупердяйство и непредусмотрительность автора, который решил перестать платить за домен и хостинг, а вместе с этим случайно (а может и намеренно) сделал запуск игры невозможным без интернета. Так как на сайте заявлено отсутствие DRM, то это явно недосмотр.
Что тут происходит?
Если почитать документацию на XNA, то этот метод предназначен для загрузки контента и вызывается автоматически при запуске игры. Первым делом выполняется инициализация некоторых вещей, после чего открывается файл настроек (options.xml) и начинает последовательно считываться. Как только считываются параметры аккаунта для таблицы рекордов, то происходит отправка логина+пароля на официальный сайт и попытка получить ID. Если сервер возвращает Failure, то открывается диалог входа, который можно пропустить. Если сервер возвращает число, то игра запускается. А вот если сервер недоступен, то вылетает исключение, которое никак не обрабатывается и приводит к молчаливому вылету.
Диалог входа официально можно пропустить.
На этом этапе есть 2 варианта действий:
Вручную отредактировать настройки и убрать пункт об аккаунте. Тогда игра будет всегда запускаться без входа.
Физически убрать запрос на несуществующий сайт.
Нормальные герои всегда идут в обход, так что переходим к написанию небольшого патча. (На самом деле, о первом варианте я додумался не сразу. Более того, полная версия зависает при убирании этого пункта из настроек).
Выделяем строчку с запросом и нажимает "Изменить инструкции IL". Открывается окно с заголовком "Изменение тела метода".
Это - язык MSIL. Он очень прост и сильно напоминает Forth, на самом деле, но новичка может отпугнуть.
Ключевым элементом является стек. Что такое стек я уже когда-то рассказывал. Это некоторое место, на вершину которого можно последовательно добавлять значения (числа, строки и прочие объекты), а так же снимать их в обратном порядке.
Не эти стеки, но суть та же. Можно добавлять и снимать сверху.
ldloc.2: Значение локальной переменной под номером 2 (с типом строки)
ldstr: Строку "&p=".
ldloc.3: Значение локальной переменной под номером 3 (тоже строка).
Потом мы вызываем String::Concat(), принимающий в себя 4 строки и соединяющий их вместе. При вызове метода будут сняты 4 верхние строки со стека и добавлена новая строка.
Вызов следующего метода (WebClient::DownloadString()) снимает строку, полученную от String::Concat(), и веб-клиент. В результате должна остаться только 1 строка, возвращенная WebClient::DownloadString().
Следующим этапом мы должны снять эту строку со стека и сохранить её в локальную переменную 1, но этого не произойдет, так как WebClient::DownloadString() всегда будет проваливаться и выбрасывать исключение. Исключение, если его не обработать сразу, будет раз за разом проваливаться глубже по стеку вызовов, пока не достигнет обработчика или дна. Так как никаких обработчиков по пути нет, то исключение достигает дна и приводит к вылету.
Чтобы избежать получения исключения, мы можем убрать всё, что предназначено для запроса в сеть. Примерно вот так:
8 инструкций превратились в 2: загрузка строки с числом (которое может быть любым) и сохранение в локальную переменную под номером 1.
Сохраняем и проверяем результат.
Было.
Стало.
Из декомпилированного кода полностью исчез кусок с запросом. Осталась лишь загрузка константной строки и сравнение с "Failure", которое всегда будет успешным.
Сохраняем модуль и пытаемся запускать опять.
Жопиздан!
С этой задачей успешно справился человек, который не смыслит в программировании вообще ничего. По его словам, он джва года ждал эту игру!
Но не всё так просто. Если попытаться пройти любой уровень, то вылетит то же самое исключение.
Для исправления точно так же выделяем строку и опять редактируем инструкции в теле метода. Но так как отправка статистики нонче ни на что не влияет, то просто удаляем выделенные инструкции без остатка.
А для надежности выделяем WebClient, нажимаем "Анализировать" и смотрим, где еще может ждать нас подлянка.
В Finish.Update() мы ошибку только что исправили, в Game1.LoadContent() исправили в самом начале, а Login.button1_Click(), Program.Main() и Title.Update() нас не интересуют, так как достаточно просто не делать того, что приведет к обращению в сеть (а конкретно: не открывать диалог входа, не указывать никакие аргументы при запуске и не пытаться авторизоваться через главное меню (вроде бы не реализовано)).
Числа Фибоначчи - это последовательность, где каждое очередное число равно сумме двух предыдущих. 1 = 0+1, 2 = 1+1, 3 = 2+1, 5 = 3+2, 8 = 5+3, ...
В программировании для вычисления этой и подобных последовательностей (факториалы, степени, если нет прямой возможности...) используются циклы.
Цикл представляет собой некоторые условия: начальные условия, условия завершения, изменение данных для достижения условий завершения. (Заметка для тех кто в теме, это касается любых циклов, а не только цикла for)
А вот то, что делается внутри цикла называется ТЕЛОМ цикла.
Тысячи работников технологической отрасли теряют рабочие места. Atlassian сократила 1600 сотрудников, финтех-компания Block Джека Дорси уволила почти половину персонала. По слухам, последняя волна сокращений в компании Цукерберга затронет более 20 процентов компании. Общая черта всех этих увольнений – руководители компаний ссылаются на возможности ИИ, утверждая, что технология сделала уволенных работников ненужными.
Соответствуют ли эти заявления реальности, или сокращения на самом деле вызваны корпоративным раздуванием штата и избыточным наймом пандемийной эпохи – вопрос, ответ на который пока сложно найти.
На этом фоне глава OpenAI Сэм Альтман опубликовал на этой неделе пост, который многие восприняли как удар по больному.
Я испытываю огромную благодарность к людям, которые писали невероятно сложный софт символ за символом. Уже сейчас трудно вспомнить, сколько усилий это действительно требовало. Спасибо, что довели нас до этой точки.
Высказывание вызвало шквал ярости. Пользователи восприняли слова как циничное признание того, что эпоха традиционного программирования подходит к концу – из уст человека, чья компания активно продвигает инструменты для замены разработчиков.
Один из пользователей сказал:
Пожалуйста. Приятно знать, что наша награда – потеря работы.
Другие назвали Альтмана "гребаным психопатом" и "подонком".
Ничто не говорит "вас заменят" так убедительно, как сердечная благодарность от человека, который вас заменяет.
Критики также напоминают, что ИИ-модели OpenAI обучались на данных, массово собранных из интернета без разрешения авторов – практика, породившая множество исков о нарушении авторских прав. Слова Альтмана в этом контексте выглядят как окончательный отказ от идеи справедливой компенсации создателям контента и кода, на чьей работе построены продукты компании.
Пост появился на фоне усиливающегося давления на OpenAI со стороны конкурентов. По данным The Wall Street Journal, руководство компании забило тревогу, призвав сосредоточиться на корпоративных клиентах и инструментах для программирования.
Глава подразделения приложений OpenAI Фиджи Симо в служебной записке заявила сотрудникам:
Мы не можем упустить этот момент из-за того, что отвлекаемся на побочные квесты. Мы действительно должны добиться продуктивности в целом и особенно продуктивности на бизнес-фронте.
Тем временем Anthropic, конкурент OpenAI, добилась серьёзных успехов – чат-боты Claude Code и Cowork в прошлом месяце спровоцировали распродажу акций на триллион долларов на фоне опасений, что ИИ может сделать традиционное корпоративное ПО устаревшим.
В итоге высказывание Альтмана сложно прочитать иначе, чем как рекламный ход – прямое использование массовых страхов перед "ИИ-апокалипсисом" на рынке труда для продвижения продуктов собственной компании.
Spotify сделала громкое заявление во время презентации финансовых результатов за четвертый квартал: лучшие разработчики компании не написали ни строчки кода с декабря. Об этом сообщил сооснователь и со-глава Spotify Густав Сёдерстрём, рассказывая о том, как компания использует ИИ для ускорения разработки.
За 2025 год Spotify выпустила более 50 новых функций и изменений в приложении. Среди последних – плейлисты на основе текстовых запросов с помощью ИИ, функция Page Match для аудиокниг и About This Song, которые появились в последние недели.
Инженеры Spotify используют внутреннюю систему Honk для ускорения написания кода и повышения скорости выпуска продуктов. Система позволяет удаленно развертывать код в режиме реального времени с помощью Claude Code.
Конкретный пример: инженер Spotify во время утренней поездки на работу может через Slack на телефоне попросить Claude исправить баг или добавить новую функцию в iOS-приложение. После завершения работы инженер получает новую версию приложения прямо в Slack на телефон и может отправить её в продакшн еще до прибытия в офис.
Компания отметила, что система значительно ускоряет процесс написания кода и развертывания обновлений.
Мы не считаем это концом пути в разработке с помощью ИИ – это только начало.
Глава также рассказал о способности Spotify создавать уникальный датасет, который другие большие языковые модели не смогут присвоить, как это происходит с другими онлайн-ресурсами вроде Wikipedia. Причина в том, что для музыкальных вопросов не всегда существует однозначный ответ.
Например, на вопрос о музыке для тренировок люди дадут разные ответы в зависимости от географии. Американцы в целом предпочитают хип-хоп, хотя миллионы выбирают дэт-метал. Многие европейцы тренируются под электронную музыку, а скандинавы часто слушают хэви-метал.
Это датасет, который мы строим прямо сейчас, и никто другой его не создает. Он не существует в таком масштабе. И мы видим улучшения каждый раз, когда переобучаем наши моделию.
Аналитики также спросили о подходе Spotify к музыке, созданной ИИ. Компания пояснила, что позволяет артистам и лейблам указывать в метаданных трека, как была создана композиция, но при этом продолжает отслеживать платформу на предмет спама.