home   |   А-Я   |   A-Z   |   меню




Субота, 29 серпня, 04:16 (UTC –4) «EN-2», другий інженерний корпус


— Я можу почати працювати над програмою прямо зараз, — мовив Тимур. — Все одно не засну.

— Скільки тобі потрібно часу? — спитала Лаура.

— Не знаю, думаю, небагато. Максимум — кілька годин.

— Ти впораєшся так швидко?

— Це проста процедура. Крім того, я встиг добре розібратися в командах мозкового компілятора.

— Тоді до роботи!

Тимур перелопатив достатньо уривків програмного коду, щоби зрозуміти принципи програмування ботів. Більшість функцій детально описані і проілюстровані прикладами в мануалі, складеному Кейтаро, Вадимом Хортом та іншими програмістами, що працювали на «NGF Lab». Українець без особливих зусиль вималював у голові алгоритм і за дві години до світанку приступив до реалізації.

Насамперед створювався екземпляр класу nfBrainAction. Тимур назвав його Operation. Наступним оголошувався примірник класу nfImpact. Він ініціювався функцією NewImpact (), що викликалася з Operation. На цьому етапі Тимур отримував доступ до мозку, виходив за межі мозкового процесора. Далі задавався тип операції (om_Stimulation — стимуляція, а не зчитування імпульсів) і частина головного мозку, в якій проходитиме стимуляція (LIMBUS — лімбічна система). У змінну Coordinates типу nfImpactCoordinates записувались координати майбутньої стимуляції — HYPOTHALAMUS — гіпоталамус. Куди посилати імпульси, визначила Лаура; саме в гіпоталамусі знаходиться центр задоволення. Параметри імпульсів налаштовувались у структурі Imparam (типу nfImpactParam). Туди передавалися значення інтенсивності (ii_Normal — середня) та інтервалу, через який запускатимуться імпульси (100 мілісекунд). Робоча частина програми складалася з конечного циклу. Шістсот разів викликалася функція Delight.Activate (). Враховуючи заданий інтервал, стимуляція мала тривати рівно 60 секунд.

У самому кінці психіатр порадила додати функцію Imparam.HormoneCheckupOn (). Власне, функцію вибирав Тимур. Лаура лиш пояснила фізичний принцип, який мав бути закладений у програму і без якого стимулятор найбільш імовірно не працюватиме. Річ у тім, що за чуттєве задоволення у людини відповідає допамін — гормон, який виробляється мозковою речовиною надниркових залоз, а також багатьма іншими органами. Цей гормон діє безпосередньо на центр задоволення. Більшість наркотиків збільшують потік допаміну в 5—10 разів, даючи можливість людям, що їх споживають, отримувати задоволення. Так, амфетамін напряму збільшує викид допаміну, впливаючи на механізм його транспортування. Кокаїн блокує механізми зворотного захоплення допаміну, збільшуючи його концентрацію в синаптичному просторі. Алкоголь нейтралізує дію антагоністів[111] допаміну. Якщо наркоман продовжує стимулювати центр задоволення, мозок адаптується до штучного підвищення рівня допаміну, гальмуючи виробництво гормону і зменшуючи кількість рецепторів, що на нього реагують. Подальший розвиток хімічної толерантності призводить до незворотних змін у нейронах. Задоволення притупляється, а згодом зникає зовсім. Знайдена Тимуром функція HormoneCheckupOn () дозволяла «виключати» перевірку будь-якого гормону, примушуючи мозок ігнорувати згубний вплив на організм. Таким чином Тимур та Лаура перестраховувалися від того, що мозок ботів може адаптуватися до великої концентрації допаміну (hc_Dopamine).

Остаточно функція стимуляції набула такого вигляду:


nfBrainAction

Operation (System.GetOperation (NEW_DIRECT_ACTION));

if (!Operation.m_lpDispatch) return;

nfImpact

Delight (Operation.NewImpact (BRAIN_GLOBAL_PENETRATION));

if (Delight.m_lpDispatch)

{

Delight.SetOperationMode (om_Stimulation, TRUE);

Delight.SubGlobalTarget (LIMBUS);


nfImpactCoordinates

Coordinates (Delight.GetPosition (HYPOTHALAMUS));

if (Coordinates.m_lpDispatch)

{

Delight.SetTargetCoordinates (Coordinates);

Delight.SetOperationType (ot_Pulse, ot_Point);


nfImpactParam

Imparam (Delight.GetImpactParamDefinition ());

if (Imparam.m_lpDispatch)

{

Imparam.SetImpulseIntensity (ii_Normal);

Imparam.HormoneCheckupOn (hc_Dopamine, FALSE);

Imparam.SetInterval (100);

Imparam.Update ();

}

}

else return;

for (int i=0; i=600; i++) Delight.Activate ();

Clear ();

}


О 7:45 суботнього ранку бота, який до цього часу безперервно бавився з кнопкою «DLGHT», відірвали від пульта. «Малюк» довго оговтувався. Його лихоманило.

Очунявши, бот повернувся до депресивного, напівкататонічного стану.

Тимур наклав на його голову спеціальні електроди і скомпілював написаний код на мозкові плати. Запис процедури пройшов успішно, про що свідчило повідомлення по центру інформаційної панелі: PROCEDURE IS CHECKED AND COMPILED SUCCESSFULLY.

Тимур телющився на екран, на якому зависло повідомлення. Секунди спливали, але з ботом нічого не відбувалося. Подеколи він відключався, поринаючи у важку дрімоту. Потім прокидався і починав тихенько квилити, тягнучись пальцями до пульта, на якому блискала кнопка «DLGHT».

— Ну давай… давай же… — шепотів Тимур. Від напруження на скронях хлопця виступили краплини поту. — Запускай, ну… Здогадайся!

Після припинення стимуляції у бота впав кров’яний тиск, почалася брадикардія. Ніхто не знав достеменно, чи він куняє, чи втрачає свідомість.

Минуло кілька хвилин. Тимур повторив компіляцію. Процедура наново записалась на мозкові плати. І знову успішно — процесор «сприйняв» код. Утім, бот не запускав модуль. Він або не розумів, або не хотів його активувати.

Алан та Ріно скоса зиркали на програміста.

— Я думаю, йому потрібен час, — розгублено пробубнів Тимур. Хоч він і підозрював, що проблема не в часі. Можливо, бот не може вибудувати логічний ланцюжок «стимуляція — кнопка DLGHT — заборона користуватися кнопкою — запис процедури». Він просто не вловлює суть процедури.

— Спробуй додати команду на самозапуск після компіляції, — запропонував Алан.

Тимур вставив перед тілом основної процедури системну функцію — SetAutoRun (). Вона автоматично запускала модуль на виконання відразу після компіляції. І спробував скомпілювати змінений код.

Результат вийшов очікуваним. Реалізований Хортом функціонал по обробці макросів заблокував компіляцію. На інформаційній панелі вискочив червоний знак оклику і напис: COMPILATION FAILED! ERROR 117: INVALID DESCRIPTOR.

— Воно не хоче компілюватись, — зціпивши зуби, проказав Тимур.

— Бачу, — спохмурнів Алан.

— Що означає ця помилка? — ткнула пальцем в екран Лаура.

— INVALID DESCRIPTOR — неправильний вказівник на функцію чи процедуру. Компілятор не може заштовхати в голову бота функцію SetAutoRun (). Відповідно, решта коду також лишається не скомпільованою.

— І що тепер? — докинув з-за їхніх спин Хедхантер.

— Тільки чекати, — сказав програміст. — Чекати, поки бот не запустить стимулятор сам. Вибору у нас нема.

Ріно Хедхантер піднявся і залишив лабораторію. Вийшовши з будівлі «EN-2», амбал потрусив цигарки в останній пачці. Лишилося п’ять. Більше в цьому клятому лабораторному комплексі не знайти ні крихти тютюну. Зітхнувши, Ріно витягнув одну і закурив.




Субота, 29 серпня, 03:00 (UTC –4) «EN-2», другий інженерний корпус Лабораторія програмування | Бот | cледующая глава