Мой друг,

Моя обязанность — приглашать меню по вызову. А эти письма к вам — считаю своим долгом. Не забывайте о моём титуле.

С искренней любовью,
барон фон Гамбургер.


Барон фон Гамбургер

Глава 2.

Миссия

Пройдя сквозь гиперссылку кот не спеша уселся перед королём. Занял достойную позу и посмотрел в два раза пристальнее обычного.

Есть очень важное задание, — рассказал кот. — Я буду смотреть на тебя, а ты должен помогать. ТЭЗЭ уже составлено, нужен взгляд специалиста.

ТЭЗЭ

Задача: достать Модель DNA со дна озера

Озеро: рядом

Модель DNA: на дне

Варианты решений: В воду я точно не полезу. Можно откачать воду из озера, но оно большое. Надо построить резервуар достаточного размера, чтобы хранить там откачанную воду, пока я сбегаю за моделью. Если не получится откачать, тогда есть инженерное решение — труба широкая и длинная. Чтобы от поверхности озера достала до самого дна. Ты ведь сможешь придумать ступеньки внутри трубы? Чтобы я смог спуститься — это легко, я ловкий. Сделай чертёж и найди кого-нибудь, кто изготавливает трубы. Мой размер ты видишь, надо такого диаметра, чтобы я пролез... и вылез вместе с моделью. Она побольше меня будет в два или в три раза. Я не знаю точно, поэтому сделай размер с запасом. Все расходы, разумеется, беру на себя. Только запланируй затраты наперёд, — если будет дороже, чем аренда подводной лодки, тогда нет смысла придумывать велосипед. У меня товарищ по хорошей цене может предложить батискаф. Я уже ходил на нём в море и умею управлять. Был бы сейчас такой, в вмиг бы задачу выполнил. Тебя обязательно взял бы с собой, чтобы показать удивительный подводный мир. Жаль, что товарищ далеко от озера живёт. В батискафе хватило бы места нам обоим, даже с моделью. Кстати! Можем именно так отпразновать после выполнения миссии. Достанем модель дна и отправимся на дно :) Креативный план!

Сроки: желательно до четверга, плюс-минус пятница

Бергамот пристально смотрит

Почему ты дёргаешься?, — спросил кот.

Король на самом деле подёргивался от смеха, читая описание задачи. После вопроса он прекратил и извинился.

Прошу прощения, меня повеселило слово тэзэ, — объяснил король. — Очень смешно звучит, словно муха назойливая жужжит в поисках выхода. И всё в целом тоже очень смешно. Что ты от меня хочешь?
король Апп

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

Король Апп по отдельности понимал каждое слово из сказанного, но целая картина ситуации не складывалась в голове.

Кот был настроен решительно и продолжал смотреть.

Я всё ещё смотрю на тебя, а ты ничем не помогаешь, — настаивал кот.
Смотреть на меня, это изощрённая пытка или награда? — спросил король.

Это эффективный метод. Я поделюсь формулой успеха для достижения цели — всегда смотреть прямо в цель. Вот конкретный пример: в начале XXI века, жил Никита Апофеоз — известный радиоведущий и блогер. Я лично у него под окнами каждый день сидел и смотрел, чтобы он меня сфотографировал и в блог выложил. В блоге появилась куча комментариев, одни спрашивали почему кот смотрит, другие придумывали варианты ответов. Самые разные, вплоть до идей заговора и инопланетного вторжения. И никто не мог догадаться, что я просто смотрю. Только я об этом знал. Позвал даже других котов на следующий день, чтобы вместе смотреть. Это была абсолютная победа!

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

Король и кот вместе спустились к берегу большого озера.


Дорога к озеру Хеад

Спасение модели DNA

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

Вода чистая, можно увидеть где лежит модель. Как думаешь, если через трубу...

Король Апп посмотрел на дно озера и немедленно прыгнул в воду с криком «Это же ребёнок!». Вытащил и положил на лужайку девочку, она не двигалась и её глаза были закрыты.

Кот посмотрел:

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

Модель DNA спит до обеда

Рис. 6. Положение модели DNA и кота до обеда.


Если до обеда, значит для спасения требуется немедленно приступить к приготовлению еды. Король Апп стал собирать ветки для костра, и спросил кота о девочке:

Зачем она тебе нужна?
Хочу, чтобы была моей служанкой. Чтобы всю жизнь кормила и убирала.

Кот тщательно обнюхал своё приобретение. Девочка лежала без движения, крепко сжимая тапочки. Кот аккуратно потрогал лапой мокрые волосы, затем повернулся и сел девочке на лицо — каждый кот знает как разбудить человека, даже браузер.

Девочка проснулась и сориентировалась очень быстро, примерно через 250 милисекунд, — четверть секунды, это приемлимое время ожидания реакции на нажатие, — кот попал в объятия девочки вместо тапочек.

Сама же девочка радостно закричала: Какой милый котик!

Теперь я буду твоей хозяйкой! Буду всю жизнь кормить и обнимать.

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

Как тебя зовут?, — спросила девочка. Меня зовут Берppгамот. Я не котик, я брppаузер.

Король Апп тоже представился и спросил, всё ли в порядке у девочки? И хорошо ли она себя чувствует?

Девочка отпустила кота и подумала. У неё ничего не болит. И ей никуда не надо в спешке собираться. Всё кажется в порядке, но нет восторга.

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

Нет, со мной не всё в порядке. Мои волосы не слушаются, ведут себя, словно не я тут главная.

Король Апп снял с головы золотую корону и отломал кусочек металла. Согнул в нескольких местах и смастерил красивую заколку, которую протянул девочке. Та приняла подарок с удивлёнными глазами.

Это так мило, спасибо! Она золотая? Я обязательно продам на ярмарке. Непослушным волосам сгодятся простые решения...

Девочка высмотрела на земле сухой корешок и заплела в волосы. Королевскую заколку прицепила к платью, как брошку.

Модель DNA проснулась

Рис. 7. Модель DNA схематично показана вместе с заколкой, корешком, перчатками и тапочками.


Пока девочка приводила себя в порядок, король Апп успел разжечь небольшой костер и сварить в перевёрнутой короне горсть гречки из кармана. Пока крупа готовилась, король раскопал песок на берегу и нашёл кладку консервов — пару банок король добавил в гречку.

NB: Самка тунца часто закапывает свои консервы поблизости от водоёма, чтобы уберечь от хищников.

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


Синхронные и асинхронные процессы во время обеда

Рис. 8. Процессы под влиянием тунца. Беглый анализ во время послеобеденного отдыха.

Девочка заинтересовалась схемами.

Почему вы подписаны именами, а про меня написано «девочка»?, — спросила девочка. — Мне так не нравится. Моментально поменяем, — согласился король Апп. — Дай своё имя, я заменю девочку.

Девочка замешкалась. Она не могла ничего дать.

Кот удивился и подошёл проверить. Тщательно обнюхал, но только чихнул:

Андефайнед!
undefined

И немедленно создал миссию...

Имя для девочки

Задача: найти имя для девочки

Варианты решений: Хорошие имена водятся в карбонских болотах неподалёку. Там много других примитивов и в целом — слякоть. Фу, отвратительное место. В такие места надо сапоги носить. Но имена отменные получаются! Вы слушали Элеонору Рузвельт? Чудесно, не правда ли? Чувствуется лёгкий аромат позднего карбона. Надо идти брать, пока есть.

Сроки: до ужина

Звучит интересно, но я не хочу в тапочках гулять по болоту, — запротестовала девочка. — Можно как-нибудь проще? Где взять имя? Есть другие варианты?, — спросил король.

Других вариантов никто не смог придумать. Девочка, кот и король Апп отправились к Карбонским болотам.

Дорога к Карбонским болотам

Карбонские болота

Карбон — второе название каменноугольного периода в истории Земли. В те годы ещё не появились динозавры, но уже обитали разнообразные амфибии и рептилии. Суша была покрыта тёплыми болотами и хвойными лесами. Старые деревья опускались в илистое дно и медленно превращались в каменный уголь, который через триста миллионов лет будут откапывать шахтёры.

300 миллионов лет назад

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

Здесь живут примитивы: Були, Инты, Стринги и другие племена. Выглядят как ящерицы самых разных форм и размеров. Из всех прочих, нам нужна небольшая ящерка Стринг, она умеет запоминать имя и хранить его вечно...

А вот огромный хищный Массив — он нам сейчас не нужен!

Король Апп указал на огромную рептилию в глубине болот — размером с многоэтажный дом.

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

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

Нам нужна армия?, — спросила девочка у короля. Определённо да! Отряд из пятидесяти дизайнеров, чтобы отогнать Массив. Почему пятидесяти? Для гарантированного эффекта. Представь пятьдесят дизайнеров, бегущих на тебя с криком «Сейчас всё поправлю!». Такая сила способна прогнать рептилию размером с Ост-Индийскую компанию.
Армия из пятидесяти дизайнеров

Рис. 16. Пятьдесят случайных дизайнеров

девочка говорит

Рис. 17. (повторение рис. 7.)

Одна конкретная девочка

Девочка представила и спросила:

Можно я пойду вместо армии?

Король Апп согласился. Существует не нулевой шанс, что маленькая девочка может выполнить взрослую миссию. И даже сможет заменить пол-сотни обученных солдат. Кто осмелится возразить, что маленькая девочка способна* одолеть тысячу огромных монстров, пройти километры болот и сыграть победную сюиту на белоснежном рояле.

* в теории

Никто не возражает, вот только сложно будет обойтись без приёма Рояль-в-Кустах, — так называют искусственный поворот сюжета, плохо замаскированный под случайность. Это очень скучный приём.

Поэтому, нет. Король Апп не согласился.

А если я повзрослею?, — предложила девочка. Вот это будет намного интереснее.

Девочка повернулась к болотам и закрыла глаза...


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

Вы повзрослели?, — осторожно поинтересовалась одна ящерка. Да, — ответила девочка.

Ящерки оживились и бросились задавать много вопросов:

Девочка улыбнулась и постаралась разом ответить на все вопросы:

Я просто повзрослела. Подумала о себе, о своём отношении к вам и стала иначе себя вести. А девочкой меня называют, потому что нет другого имени, кроме девочка или Модель Дна...
Ещё один вопрос, пожалуйста, спасибо! Каким конкретно образом вы собираетесь одолеть меня, размером с небольшой филиал страховой компании? Есть сдвиги в этом направлении?

Это прошипел огромный Массив, который к этому времени успел подползти к общей конференции на тему взросления.

«Пятьдесят дизайнеров!, — закричал король Апп и выхватил меч».

Девочка прикоснулась к плечу короля, прося разрешение на ответ. Затем обратилась к Массиву с вежливым поклоном.

«Сдвиги есть. И есть взаимовыгодное предложение: вы расскажете лекцию о примитивах, кто вы такие, зачем вы здесь, какая ваша история? Мы послушаем лекцию, потом вы позволите забрать одну ящерку.»

Все ящерки одобрительно зашипели и Массив принял предложение.

Лекция о примитивах

Данные — осколки информации для удобного хранения. Данные можно передавать или обрабатывать.

Простые типы данных (примитивы)

Були (boolean) — либо «да», либо «нет»

Нули (null) — нет данных, нет информации, ничего нет

Анды Файнеды (undefined) — данных всё еще нет, но хотя-бы понятно, где их ждать

Стринги (string) — "текст внутри кавычек"

Намберы (number) — состоят из цифр, обозначают числа

Большие Намберы (bigint) — если обычные намберы не справляются

Непростые типы данных

Массив (array) — цепочка из других ...


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

Рис. 10. Модель DNA находит имя в Карбонских болотах

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

«Какая красивая!, — прошептала девочка и посадила ящерку к себе на плечо. — Ты будешь хранить красивое имя — Шонталь.»

Ящерка тоже с интересом рассматривала девочку и думала:

Бедняжка. Такая хорошенькая, а уже растеряла свои кавычки. Только одна осталась — заколка в волосах. Позабочусь о бедной сиротке.
DnaModel = {
    name: "Шонталь"
}

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

Лекция окончена. Всем спасибо.

Укрощение имени

В предыдущих главах:

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


"Шонталь"

По дороге из болот, Шонталь радовалась новому имени и знакомилась с каждым встречным:

Здравствуйте, меня зовут Шонталь! Добавьте меня в свою контактную книжку.
Но, позвольте, — возразил один встречный, — ваше имя не Шонталь, а Чик-Чирик

«Какой ещё Чик-Чирик? Почему?, — удивилась Чик-Чирик».

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

"Чик-Чирик"

А через несколько секунд:

"Давай поиграем"

Ещё через мгновение, имя вновь поменялось:

"Слоник прыгает в лавандовых полях"

«Как же так?, — огорчилась Слоник прыгает в лавандовых полях, — неужели моё красивое имя пропало? И как теперь жить, если имя меняется каждую секунду?»

"Не расстраивайся"

Не расстраивайся расстроилась и обратилась к королю за помощью. Король Апп внимательно осмотрел ящерку, проверил кавычки с обеих сторон, но не понял в чём дело. Только шаманские танцы с бубном помогут разобраться.

Король сделал бубен из королевской короны — натянул нитки и прикрепил бубенцы из сухих семян.

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

По радуге, с весёлыми криками и звонким хохотом, вниз скатились две старушки.

Две старушки спускаются по радуге

Рис. 18. Эффектное появление Гетеры и Сетеры

Старушки увидели ящерку и засмеялись ещё громче:

Ха-ха, знакомый пациент. С чем у вас играется? С именами? Вам ещё повезло, в прошлом году ей доверили пароль от вай-фая, вот это был конфуз! Меня зовут Сетера, это моя сестра Гетера. Мы справляемся с такими ящерками на раз-два.

Старушка Сетера запрыгнула на камень на счёт раз, и бесцеремонно села на ящерку на счёт два. Ящерка отчаянно сопротивлялась, но выбраться из под старушки не было шансов.

"Отпусти меня, старая ведьма"

«Чем беспокоит?», — спросила старушка у Отпусти меня, старая... спросила у девочки, лучше так продолжим её называть пока ящерка не образумится... Девочка попросила, чтобы ящерка не меняла имя «Шонталь» ни на что другое, а то совсем неудобно.

Старушка пообещала сделать «Шонталь» константой — так называют неизменяемое значение — и слегка надавила на ящерку. Ящерка сперва поддалась давлению:

"Шонталь"

Но через пару секунд, ящерка взбунтовалась.

"Немедленно отпусти"
"Я"
"Никогда"
"Не буду"
"Работать"
"По вашим"
"Скучным"
"Правилам"
"Отвалите, пожалуйста!"
Тут, думаю, сложный случай, — сказала старушка и отпустила ящерку. — Не хочет быть неизменной константой. К сестре надо обращаться.

Сестра Гетера всё это время танцевала с бабочками в лучах радуги. Услышав обращение, подошла к ящерке, наклонилась и нежно поцеловала в нос.

"Константа" Вы же хотели Константу?, — спросила старушка Гетера и вернулась к танцам не дожидаясь ответа.
DnaModel = {
    name: "Вы меня не остановите!",
    get name() {
        return "Константа"
    }
}

Константе понравилось имя «Константа», пусть не похоже на прежнее, но не менее красивое.

Ящерка тоже успокоилась. Теперь она могла что угодно писать в своих кавычках, и её никто не попрекал.

Старушки Гетера и Сетера попрощались, схватились за радугу и вместе с ней улетели в небо.

Король Апп запечатлел момент высекая надпись на камне:

Здесь были Константа с Ящеркой, Браузер Бергамот и Король Апп. Ты, который прочитаешь наши имена отпечатанные во времени, веди себя хорошо. Отзывайся на помощь ближнему, береги природу.
Теперь меня называют по имени, — обрадовалась Константа. — Что дальше? Понравились приключения?, — спросил король Апп. Да! Мне больше всего понравился обед. Так сильно понравился, что страстно желаю ужин. Создать миссию?, — спросил Бергамот. Не стоит, я бы предпочёл горячий суп. Давайте оставим этот камень молчаливым свидетелем произошедшего. Нам бы пересечь горный хребет, пока солнце светит. За хребтом — обитаемая долина Хеадер с ресторанами и ночлегами.

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

Model-View-Controller (MVC) — стратагема в программировании. Суть в разделении обязанностей по трём направлениям в названии.

Есть модель, которая знает что хочет и как должно быть.

Есть кот, который отвечает за отображение того, что дают.

И есть король-контроллер, который на всё реагирует и командует мелкими функциями.

Стратагема старая как Сунь-Тзы и давно обросла потомками с дивными именами: MVP, MVVM, MCCCP...тысячи их. Да и само сравнение персонажей натянуто, как носок на чайник. Если внимательнее приглядется к идущей команде, можно увидеть что это КЯББКА.

Константа с Ящеркой, Браузер Бергамот и Король Апп

Рис. 19. Обновлённая команда главных персонажей

Константа с Ящеркой, Браузер Бергамот и Король Апп

КЯББКА-1


Камень