Для любого программиста знание что такое биты и байты, что такое системы счисления, является обязательным даже в современном мире. И значимость этого не меньше, чем много лет назад.
Элементарной единицей информации является бит, который может принимать одно из двух состояний – истина и ложь. В электронных схемах истина выражается в виде напряжения 5 вольт, либо 3.3 вольта, либо ещё как-то больше нуля (всё зависит от параметров электронной схемы), а значение ложь в виде отсутствии напряжения. В цифровом виде истина представляется значением 1 (единица), а ложь значением 0 (ноль).
Биты принято объединять в группы. Элементарной группой является байт, который равен восьми битам. Почему именно 8 бит, а не 10 и не 100, станет понятно позже, а если не станет, то я расскажу.
Как мы обычно привыкли записывать число? Ну как? – Вот так:
123 – сто двадцать три
Но на самом деле, с точки зрения математики, это выглядит вот так:
123 = 1 * 100 + 2 * 10 + 3 * 1
где * (звездочка) – так обозначается знак умножения.
Т.е. цифры в своих разрядах, дают нам конечное число именно по такой формуле. Однако и это не полностью адекватная запись, по тому что ещё более правильно было записать так:
123 = 1 * 10 ^ 2 + 2 * 10 ^ 1 + 3 * 10 ^ 0
где ^ (галка) – степень числа
Вспоминаем математику, что любое число в степени ноль – это единица, и 10 ^ 0 – не исключение
Тут видим, что именно степень числа и определяет полностью разряд числа (за плюсом 1). Т.е. в школе учили нас, что справа стоит первый разряд числа, но в программировании это нулевой разряд. Заметьте, каждый разряд содержит основание 10, меняется только множитель и его степень, но степень зависит только от разряда. По этому наше число для наглядности выглядит так:
– наши цифры 1, 2 и 3 от числа 123 показаны в скобках, 10 – постоянный в каждом разряде, а степени 2, 1 и 0 – это просто номера разрядов числа (справа налево). Вот и всё – это наше число так выглядит. Теперь важный момент. За счет того, что везде основание стоит 10, эта наша система счисления, который мы пользуемся в повседневной жизни, называется десятичная; вот как раз по тому, что основание 10. Это означает, что цифры, которыми мы ведем счет (значения в скобках) могут быть только от 0 (нуля) до 9 (девять). Цифры 10 нет в нашей системе счисления, т.к. запись числа 10 уже не простая. 10 – это:
10 = 1 * 10 ^ 1 + 0 * 10 ^ 0
Вот по тому цифры 10 и нет в нашей десятичной системе счисления, потому что иначе бы запись стала не упрощённой.
Всё это хорошо, только для повседневной жизни, потому что мы к этому привыкли, нас с детства начинают учить считать до 10 (по числу пальцев на руках), но в мире информационных технологий хранение информации в десятичном представлении расточительно. Почему так – далее.
Как понимаете, если есть десятичное представление числа, то есть наверно и ещё какое либо. Что будет, если мы вместо 10 в основание поставим 2. Как будет выглядеть, например, число 6?
6 = 1 * 2 ^ 2 + 1 * 2
а теперь запишем по всем предыдущим правилам:
6 = ( 1 ) * 2^2 + ( 1 ) * 2^1 + ( 0 ) * 2^0
получается, что это число 110, но только в двоичной системе счисления, т.к. основание здесь 2, а не 10. Т.е. для записи используется только две цифры – ноль и один (по тому и система двоичная).
ВНИМАНИЕ! Число 110 в двоичной системе – это НЕ(!) сто десять(!!!),- это число один один ноль!
Чтобы как-то понимать, что это в двоичной системе, принято записывать это так:
Однако, в двоичной системе не всегда удобно записывать числа, особенно большие. Например, обычное для нас число 700120 (семьсот тысяч сто двадцать) в двоичной системе выглядит так:
10101010111011011000b
Ну, тут и без объяснения понятно, что сложно работать с числом в таком виде, и такая запись используется только в определенных случаях. По этому чаще числа представляются в другой системе счисления, в шестнадцатиричной. Т.е. системе, где счет цифр идёт от нуля до 15. Ну, подождите!- скажите вы. Что это за цифра такая 15, это число такое 15, а цифры такой нет; да и 14 такой цифры тоже нет, и вообще цифр больше 9 цивилизации не известно! Так то оно так, и вы в чём-то правы, но вы наверно не знали, что цивилизация уже придумала такие цифры, но только для программистов)). Откройте стандартный калькулятор в Windows и переключите его в режим “Программист”:
Получится так:
Введем число 700120:
А теперь переключим режим представления числа на Hex (шестнадцатиричную систему счисления, от слова Hexadecimal):
Вот так и выглядит это число. Правильные записи этого числа (понятные другим программистам) будут такие:
Часто шрифтом написать подстрочный текст 16 бывает невозможно, особенно в редакторах типа Блокнота, по этому предпочитают линейным текстом, т.е. AAED8hex, AAED8h (маленькими буквами признак системы счисления), но чаще всего выглядит так – 0xAAED8 (ноль икс перед числом).
Кто-то может догадался, что эти буквы означают, а кто-то нет. Ответ вот:
A – это цифра 10
B – это цифра 11
C – это цифра 12
D – это цифра 13
E – это цифра 14
F – это цифра 15
Получается, что наше число 700120 будет выглядеть при правильной записи так:
Теперь возвращаемся к вопросу расточительности, запишем число 255 (двести пятьдесят пять) сразу в трех системах счисления:
В десятичной системе число занимает три разряда (разряды 0, 1, 2), в шестнадцатиричной системе – два разряда, а в двоичной 8 разрядов. Наиболее компактная запись получилась как раз в шестнадцатиричной системе счисления.
Но погодите! Вы же внимательно читали этут статью с самого начала! Я как раз писал, что бит имеет только два состояния 1 или 0 (истина или ложь), а в двоичной системе как раз тоже используется только две цифры 0 и 1, так может быть биты записывать было бы удобно в двоичной системе? О да! Это так, для этого и используют двоичную систему счисления, как раз в тех случаях, когда и нужно работать с какими-то данными именно в битовом представлении, т.е. когда сама информация важна с точки зрения отдельных битов, а числа целиком. Но что с нашим числом 255? Если вы были ещё более внимательны, то увидите, что число 255 – это как раз максимальное число, которое можно представить восемью битами, т.е. одним байтом. Мало того – это максимальное число которое можно представить двумя разрядами шестнадцатиричного числа, а именно – FF. Именно по этому, когда речь идет о каких-то хранящихся внутри системы данных, которые иногда называют бинарными данными, их принято представлять либо в шестнадцатиричном исполнении двумя разрядами, либо в двоичной системе, если важна именно битовая составляющая. Так наше число 700120 (0xAAED8) в виде бинарных данных по два разряда в каждом выглядело бы так:
0A AE D8
Заметьте, к левому разряду пришлось слева подставить ноль, который как вы понимаете, никак не влияет на результат ( 0xAAED8 = 0x0AAED8 ), а сами байты разделить пробелом для лучшего визуального восприятия. Теперь, глядя на эту запись стало понятно, что для хранения числа 700120 компьютеру потребуется выделить три байта памяти (как понимаете, все числа от нуля до 700120 в три байта тоже запихнуть получится). Теперь наоборот, а интересно какое максимальное число можно поместить в три байта? Конечно же это число FF FF FF, а “по-нашему” – 16 777 215. Т.е. любое число от 0 до 16777215 включительно можно сохранить в компьютере используя не более трех байт.
Вот для чего по прежнему используются системы счисления в современном мире – чтобы иметь полное представление сколько памяти нужно выделить для хранения той или иной информации, чтобы это было и не расточительно и перекрывало все необходимые требования (и забегая вперед – не только для этого). Вы скажите может быть,- Да что такое один байт в современном мире, его никто не будет считать?! А вот и нет. Все мы наверно часто работаем в сети интернет, читаем тексты, смотрим картинки, видео. Каждая картинка или один кадр видео – это набор пикселов, каждый представленный чаще всего тремя байтами – по одному байту на каждую компоненту цвета (красный, зеленый, синий). Если вы вместо трех байт выделите четыре, то это увеличит объём необходимых накопителей для хранения картинок и видео на 1/3, что примерно также увеличит и стоимость и обслуживание. Мало того, любое расточительное использование памяти, не вызовет уважение у ваших коллег, если они это заметят, т.к. каждый понимает, что в программировании расточительство ресурсов – это признак дурного тона, непрофессионализм, безалаберность, качества несолидного человека, разгельдяя. Делайте хороший код, старайтесь беречь ресурсы, демонстрируйте этим свой профессионализм!
В этой статье пойдет речь с чего начать вообще программировать, не важно на каком языке, базовые основы.
К моменту прочтения этой статьи, вам желательно иметь навыки продвинутого пользователя. Это действительно необходимо, в ином случае вы несколько спешите заниматься программированием и даже погружаться в этот мир, так как сложно объяснить что такое спидометр, если человек не знаете в чём измеряется расстояние и как выглядят часы. Однако, если вы способны самостоятельно найти и прочитать в Дзене эту статью, то будьте уверены – вы на правильном пути, и понемногу уже можно начинать)).
Компьютеры сейчас практически в любых электронных устройствах – стиральные машины, холодильники, утюги, термометры, не говоря уже о мобильниках, моноблоках и т.п. В среде информационных технологий это принято называть ёмким словом «железо», а у программистов принято называть «устройство». С точки зрения программирования, компьютер – это обычный калькулятор с расширенным набором функций. Единственное, что отличает его от калькулятора, это то, что в компьютере вы одной командой можете запустить выполнение сразу миллиарда различных действий, а в калькуляторе только одно (умножить, разделить и т.д.). Такое получается по тому, что в любом компьютере действия выполняются по программе, т.е. заранее подготовленной последовательности команд. Вы их подготовили, убедились, что всё верно, и запустили выполнение. И вот этот набор команд начал выполняться до тех пор, пока не завершится выполнение всех команд, пока их выполнение кто-то не остановит специальной командой, либо пока в коде что-то не сломается, т.е. была ошибка, её не заметили, но проявилась она не сразу, а по мере выполнения. Такое поведение в компьютерах принято соответственно называть терминами «запустить программу», «прервать выполнение программы», «ошибка выполнения программы». Часто эти термины встречаются в англоязычном представлении:
run, exec, execute – запустить выполнение break, abort, cancel, terminate, stop, exit, kill, die – прервать выполнение run-time error – ошибка выполнения
Вообще, если строго говорить, то англоязычного очень много в программировании, если конечно вы не хотите изучать только язык 1С и ничего больше, но как правило, это маловероятно. Однако, английский язык вам специально изучать не нужно, просто в этом нет необходимости. Во время изучения какого-либо языка программирования, вам так или иначе нужно будет запоминать команды, что они делают, а их названия достаточно отождествлены с их смыслом. Например, команда input (пер.: ввод, подвод, подводимый) в языках программирования – это ввод данных, по смыслу подходит. Но если вы обладатель хороших знаний английского языка и встречаете команду print (пер.: печатать, напечатать, печатный), то чисто английский вам мало поможет, а может даже и навредит, т.к. на самом деле никуда на бумагу печатать ничего не будет, а это просто вывод на экран строки символов. Эта команда – история программирования, идёт с тех времен, когда на клавиатуре не писали, а печатали, а на экране синхронно выводился текст; говорили не «писать текст программы», а «печатать текст программы». Также лепту внес и древний язык бейсик, где команда, если не ошибаюсь PRINT#1, как раз выводила текст на тогда ещё матричный принтер. В общем, в современном мире программирования это вывод на экран строки текста, причём на большом количестве языков программирования. Ну привыкли все к этой команде, зачем менять. По этому нужен ли английский знать, ну так, нужен, но не в этом. Пригодиться язык может только для того, чтобы читать англоязычные форумы, где публикуют большое количество решений различных проблем, как то сделать, как это, а почему у меня не работает код, который написал, а что нужно написать, чтобы это заработало. Я часто бываю на этих форумах, но пользуюсь либо Гуглом для перевода, либо Яндексом))…Но уже сейчас замечаю, что что-то стал понимать и без переводчика, причём иногда даже если пишут фразу «Wt u know about…» (What you know about… – что вы думаете о…) или «I lkn 4…» (I looking for… – я ищу…). Опять таки, по многим языкам программирования есть огромное количество и русскоязычных форумов.
Что внутри компа?
Внутри любого компьютера (компа), есть следующие основные вещи:
1. Процессор, которым часто называют ящик на столе, который на самом деле системный блок. По факту процессор – это большая микросхема внутри системного блока, в которой и происходят все вычисления и координация действий всего компьютера. 2. Оперативная память, которая работает очень быстро, но способна хранить в себе данные только пока компьютер включен (синонимы – ОЗУ. RAM, DDR). 3. Постоянная память, которая работает намного медленнее оперативной памяти, но способна хранить информацию даже если всё выключено (жесткие диски – HDD, твердотельные диски – SSD, флешки) 4. Периферия – устройства соединяющие все внешние устройства (клавиатуры, мыши, принтеры, наушники, мониторы, очки виртуальной реальности, сетевые карты и т.п.) с процессором и оперативной памятью. Функционал периферии выполнен как правило на материнских платах (возможно этот термин вам уже встречался) и устройствах размещенные непосредственно на них. Однако есть и периферия, которая выполнена вне материнских плат, например, внешние жесткие диски, внешние аудио-карты для написания музыки, внешние устройства для захвата видео изображения и т.п. С точки зрения программирования, всё что пишет программист – это написание функционала взаимодействия между этими устройствами. И вот тут есть важный момент, о котором чуть подробнее. Работа компьютера с точки зрения программирования сводится к следующему принципу на протяжении многих десятков лет:
1. Ваша программа загружается из постоянной памяти в оперативную при помощи другой (системной) программы. 2. В оперативной памяти системная программа (которая загружала вашу) по ряду признаков определяет, где в вашей программе просто обычные данные, например обычные слова типа «Введите логин и пароль», которые вы часто видите на экране, и где в вашей программе код из набора команд, которые будут переданы процессору на выполнение. 3. Запускает выполнение кода программы. 4. Завершает выполнение кода программы 5. Стирает из оперативной памяти программу, освобождая драгоценное место (из постоянной не стирается)
Как из предыдущего можно понять, что пока программа находится в постоянной памяти на накопителе, это просто обычные данные, но как только они загружаются в оперативную память, часть из них становиться кодом выполнения, а часть продолжают оставаться в виде обычных данных. Чтобы такое происходило безотказно и компьютер всегда знал что у вас код, который нужно выполнять, а что есть просто данные типа фразы «Введите логин и пароль», нужно предварительно правильно подготовить вашу программу для запуска. Этот процесс называет компиляцией программы. Т.е. вы написали программу на языке программирования, но в таком виде процессор компьютера её не поймет. Теперь нужно её скомпилировать чтобы компилятор (программа, которая компилирует вашу программу) преобразовал её в тот вид, в котором процессор вашего компьютера её поймет и однозначно сможет определить где в ней находится код выполнения, а где простые данные. Как можно понять из вышеперечисленного, что в современном компьютере выполняется не одна какая-то программа, а одна программа передаёт выполнение другой, которая была загружена вами ранее или была загружена автоматически, и все внутри взаимодействует как большой электронный организм. Выполнение каждых программ регламентировано и происходит по разным правилам и с разными условиям. Например, вы по экрану водите мышкой и кликаете в браузере загрузить страницу, в этот момент происходит лавинный запуск сотен программ, одни грузят страницу из сети интернет, другие программы отображают её на экране, третьи проверяют не продолжаете ли вы двигать мышью по экрану, ещё одна продолжает отображать часы в углу экрана и ещё миллионы других действий. Всё это происходит в строгой последовательности со скоростью в десятки миллиардов раз за одну секунду, по этому кажется с виду, что всё запускается одновременно. По этому знание и понимание этого очень важно для программирования. Сначала, когда вы включаете компьютер, запускается операционная система (Windows, Linux и т.п.), с точки зрения компьютера это тоже программа, которую писали программисты операционной системы. Потом, вы как программист, хотите написать свою первую программу. Для этого вам нужно загрузить среду разработки, это тоже некая программа, написанная другими программистами. Вы её загрузили, в ней написали свою программу, после этого запускаете в среде разработки компиляцию уже вашей программы. Теперь у вас есть готовый для запуска код, который вы уже можете запустить без среды разработки или передать друзьям знакомым, опубликовать в интернете и все, кто работает на такой же операционной системе как у вас, сможет выполнить написанную вами программу. Так и происходит весь этот процесс в общих чертах от программирования до конечного пользователя. Как я уже ранее написал, в компьютере происходит взаимодействие различных программ. Их можно разделить на несколько типов с точки зрения уровня использования. 1. Операционная система. Это программа, которая является средством согласования различных пользовательских программ с конкретным вашим устройством. Например, вы наверно замечали, что в мире множество производителей мобильных устройств, ещё больше производителей микрочипов. Общего международного стандарта никакого нет, каждый производитель чипов как считает его функционал оптимальным, выгодным и конкуретноспособным, так и выпускает его. Получается так, что он определил какие команды будет этот процессор обрабатывать, а какие нет. При этом доминирующие операционные системы для мобильных устройств только две iOS и Android. Например, для Андроид зарегистрировано более 10 тысяч моделей различных телефонов на разных процессорах. И вот вы скачиваете на Samsung например приложение от Сбера, а ваш знакомый на Xiaomi скачивает это же приложение. И там и там оно работает. Как может быть такое чудо, ведь процессоры разные, команды делали их производители под то, как им удобно, а приложение выполняется и там и там. Это всё заслуга программистов операционных систем. Они написали специальные программы-драйверы для каждого процессора и каждого из 10 тысяч устройств. Эти драйверы являются частью операционных систем и являются промежуточным звеном к той же программе от Сбера, которые говорят, например «Слушай, Сбер, скажи пользователю, что я не могу оплатить покупку телефоном, т.к. в нем нет устройства NFC». А другой драйвер говорит, «Слушай, приложение камеры, предложи пользователю вариант включить свет на вспышке, т.к. уже темно в помещении». И это всё для каждого типа устройств писали программисты. Теперь понимаете, держа в руках телефон, какая титаническая работа десятков тысяч программистов была проделана, что бы каждый из нас мог пользоваться тем устройством, какое подходит под наш типаж, мировоззрение и комфорт? С точки зрения персональных компьютеров, всё примерно также как и в мобильных устройствах. 2. Драйвер устройства. Как уже упомянул, это программа часть операционной системы, но выделяет её в отдельную категорию лишь то, что поставляться драйвер устройства может отдельно от операционной системы. Такое раньше можно было часто встретить, например, при покупке новой мыши прилагался компакт диск с драйверами. В современных операционных системах большинство драйверов устройств уже есть изначально, но иногда их всё же нужно устанавливать. Правда, сейчас они чаще идут не на компакт-дисках, а находятся на официальных сайтах производителей оборудования. Например, купили видео карту, но операционная система поняла, что это видео карта и монитор показывает изображение, но производитель уже успел внести в её схему дополнения повышающее её производительность и возможности, но операционная система может об этом ещё не знать. По этому нужно этот драйвер скачать с официального сайта, установить и он станет частью операционной системы и откроет все возможности вашей видео карты. 3. Пользовательские программы. Это те программы, которые мы используем в повседневной жизни – текстовый редактор, калькулятор, бухгалтерские программы, компьютерные игры и т.п.
Первые два пункта – это стезя системных программистов. Здесь нужны глубокие знания в узкоспециализированной информации. Часто это информация скрыта и доступна только производителям оборудования или операционных систем. По этому стать программистом-системщиком (так их иногда называют) сидя за домашним компом попивая чаёк, крайне сложно, и всё потому, что документации найти сложно, а спрос на такие программы примерно равен нулю – никто не будет пользоваться вашими написанными драйверами, если есть драйвера производителя. Причины две – производитель лучше знает как должно правильно работать его устройство, информационная безопасность сильно страдает, так как часто драйвера обладают уровнем привилегий и прав больше обычных, и в случае неправильной работы могут навредить либо информации, находящейся на компьютере, либо самому компьютеру. Эта работа только для тех, кто работает непосредственно в организации по производству оборудования, либо у производителя операционных систем. Вопрос философский, куда пойдет программист-системщик, если уволится, ведь у него большие знания только в области одного типа/производителя оборудования? Сколько будет искать новую работу? Как на новом месте сможет адаптировать свои знания к новой структуре, может мгновенно, а может придётся с нуля приобретать новый опыт. Но, чаще всего, зарплаты там очень крутые, и увольняться обычно никого не тянет, кто-то наверно всю жизнь и работает на одной работе.
Что внутри программы?
Как я уже говорил ранее, программа – это набор команд. Программа выполняется сверху (сначала) вниз (в конец). Все команды программы (любого языка программирования) делятся на несколько типов.
1. Присвоение значения переменной. Нужно чтобы потом удобно было работать с формулами – вы меняете значение только вначале, а дальше в формуле оно будет вычислено автоматически. Иначе нужно будет менять число далее во всех формулах, где встречается, и можно тут где-то случайно пропустить или ошибиться. Грубо говоря – это аналог математической переменной (кто в школе учил математику в 5 классе). Присвоение значения переменной принято называть инициализацией переменной. В некоторых языка программирования это обязательное условие компиляции, т.е. компилятор не позволяет как-то использовать переменную, пока вы дадите ей какое-то начальное значение.
a = 1
Как правило имя переменной может быть различным:
result = 0
Есть некоторые негласные правила имен переменных. Они выработаны в долгих поисках и чтении чужого когда, да и своего тоже, и придуманы не мной, а огромной командой программистов всех времен. Во многих языках программирования переменные можно писать только латинскими буквами с цифрами и знаками _ (подчеркивание). Другие символы запрещены. Если это правило есть и в том языке, который вы будете изучать, то тогда сами переменные называйте английскими словами.
MoiResultat = 0; // НЕПРАВИЛЬНО – тут человек может взгляд сломать. Возми гугл, переведи и дай название переменной на английском, что ли…
MyResult = 0; // ПРАВИЛЬНО – название переменной латинскими буквами на английском языке
МойРезультат = 0; // ПРАВИЛЬНО – если язык программирования позволяет вводить кириллицей (например язык 1С), то так будет правильно
МайРизалт = 0; // НЕПРАВИЛЬНО – ты что бюргер что ли?
Иногда в название переменной закладывают сразу несколько слов, чтобы наделить её сразу смыслом. Если название переменной состоит из нескольких слов, то начинайте каждое слово с большой буквы.
myresultwhenigotinthemyfunctionfactorial = 1; // НЕПРАВИЛЬНО – Нормальный человек в здравом уме такое не прочитает…и не напишет…и представьте, что весь код такой и его сотни страниц…
MyResultWhenIGotInTheMyFunctionFactorial = 1; // ПРАВИЛЬНО – ну согласитесь, такое читать куда легче
myResultWhenIGotInTheMyFunctionFactorial = 1; // ПРАВИЛЬНО – первую букву иногда заглавной не делают, т.к. например в языке C и Java принято с заглавной буквы называть объекты, а с маленькой – их переменные.
ТаблицаВыгрузкиСальдоБухгалтерскихСчетовБезАналитикиСводноПоМесяцамКромеЗабалансовых = Неопределено; // ПРАВИЛЬНО – это 1С, товарищ, не хиханьки и не хаханьки! (это всё название переменной, без этого в 1С была бы засада)
В некоторых языках программировании при первой инициализации переменной необходимо обязательно указать тип данных, которые она будет хранить:
int a = 1; // Переменная a будет хранить только целые числа. Попытка запихнуть туда что-то другое, вызовет сначала недоумение компилятора и он попробует преобразовать это в целое число, например, 1.1922324 будет всё равно 1, либо просто начнет ругаться string b = “Hello, world!”; // Норм! Так пойдёт! строку хранит переменная с типом строки int a = “Hello, world!”; // СОВСЕМ НЕ НОРМ! – что за бодяга? как эта строка может быть целым числом??? С точки зрения компилятора – никак.
Разных типов может быть бесчисленное множество, так как программист может создавать свои собственные, но есть всё таки базовый набор простых типов, такие как: Булево (bool) – тип переменной, которая может принять только одно из двух значений – истина или ложь Целое число (byte, int, long, word, dword) – переменная может хранить только целые числа. Типов целого числа много, тут всё зависит от того до какого предельного значения вы хотите хранить целое число и нужен ли будет математический знак минуса (иногда необходимо хранить только положительные числа), это и определяет вариант. Вещественное число (float, double) – числа, где нужно хранить дробную часть. Иногда их называют числа с плавающей точкой или плавающей запятой (оттуда и название float). Также их несколько и определяют точность дробной части. Символ (char) – хранит символ Строка (string) – хранит множество символов. В мире программирования постоянно происходят метания что при случае выбрать массив char или переменную string (см.далее массивы). Эти метания в основном связаны со спецификой работы каждого типа и функциональными особенностями языка, но по здравому смыслу это одно и тоже.
Переменная может быть массивом (о чем только что писал):
int p[100];
Это значит, что будет создано 100 переменных p, но доступ каждой из них будет по индексу, т.е. p[0], p[1] и т.д. Это удобно, когда нужно выполнить действия сразу над множеством значений одной смысловой группы, например, вы производили 10 замеров температуры на кухне до и после приготовления жаркого, и у вас есть 10 значений. Но вам нужно среднее, чтобы понять превышало ли это среднюю норму домашнего труда или нет. Можно конечно задать так: a = 23; b = 25; c = 27; d = 28; …. j = 24;
и потом посчитать по формуле: Tc = (a + b + c +…+ j) / 10;
Tc = 0; // Так надо, мы не начали ещё считать температуру, значение полинома равно нулю for (i = 0; i < 10; i++) { // Перебирает от 0 до 9 значения i, а потом использует их как индексы массива для расчета среднего Tc += temp [i] ; } Tc /= 10; // Взять из Tc значение и поделить на 10, а потом запихнуть обратно в Tc
Когда речь идет о сотнях или миллионах чисел, то массив – это единственное решение. Лично я, если чего-то такого больше двух, то как правило делаю массив. Процесс выбора правильного алгоритма, в каком случае взять массив, а в каком создать пару отдельных переменных, как назвать их чтобы потом было понятно, называется творчеством, по этому кто говорит, что программирование – это конвейерная рутинная работа – неправ!
2. Выражение. Иными словами, это формула с числами, переменными или иными величинами.
b = a+2
или
с = sin(alfa)
3. Условие. Когда при соблюдении какого-то условия нужно выполнить один код, а в ином случае его не выполнять. Например, для синтаксиса языка типа Си, это выглядит так
If (b == 2) { // Что-то выполнить здесь, если вдруг окажется, что благодаря каким-то действиям компьютера это значение станет равным 2, то выполнить нужно код заключенный в эти фигурные скобки, в ином случае просто проигнорировать этот код и перейти дальше }
Для языка 1С тоже самое:
Если Б = 2 Тогда // Что-то тут КонецЕсли;
Для Бейсика:
if b = 2 then // ??? end
4. Циклы. Чтобы не быть как в анекдоте про нового русского, когда он летит в самолете, а стюардесса объявляет «Наш самолет летит в Баден-Баден», новый русский её останавливает и говорит «Слыш, тут чё лохи летят, зачем Баден два раза повторять?». Так вот чтобы не быть лохом, в программировании придумали циклы, т.е. конструкцию, которая позволяет выполнять одинаковую часть кода несколько раз.
Если делать неправильно, новый русский лохом бы назвал:
print(‘Мы летим в’); for( i = 1; i < 3; i = i+1) { // Перебирать от 1 пока i будет меньше 3, т.е. только значения 1 и 2 print(‘Баден’); }
Но как бы не делали, в результате на экране будет всё равно одно и то же: Мы летим в Баден Баден
Всё как в анекдоте)))…ну, или не летим…))
5. Создание функций. Иногда они называются методами, иногда процедурами возвращающими значение, иногда подпрограммами, всё зависит от конкретного языка программирования. Это конструкции, которые позволяют делать что-то, что после некоторых манипуляций и алгоритмов будет возвращать результат какого-то выражения.
a = sin(alfa); // это стандартная функция вычисления синуса
function mySin(alfa) { // Тут, если владеете математикой, раскладываете расчет синуса в ряд Тейлора-Маклорена, и пишите код, который будет вычислять его по вашему алгоритму. Например, если вам нужна бОльшая точность, чем вычисляет это стандартная функция }
a = mySin(alfa); // А теперь можно наслаждаться результатом
6. Класс. Современные языки позволяют делать иерархию методов (см.п.5), когда несколько методов и/или переменных объединяются по смыслу в один объект – класс. Например, вы делаете приложение чем кормить ваших питомцев. Вам нужно по каждому из них хранить информацию, мол как зовут, что хавает, когда кормил последний раз, где нас***, да вообще как он чувствует себя после этого. Мы делаем класс и называем его ёмким словом «Питомец» (Pet)
class Pet { string name = “???” string type = “???” string eat = “???”
function ThrowASlipperAtItBecauseItMadeAMess() { // Тут какой-то код }
function GiveCookies () { // Тут какой-то код } }
Пока мы объявили только этот класс как иерархию, но чтобы каждого нашего питомца отразить нужно будет создать на каждого из них экземпляр этого питомца.
pet1. ThrowASlipperAtItBecauseItMadeAMess(); // Выполнить код, запускающий в него тапок
Pet pet2 = new Pet();
pet2.name = ‘Барбос; pet2.type = ‘Пёс’; pet2.eat = ‘Принёс назад тапок для запуска его в кота, дал печеньку’;
pet2. GiveCookies (); // Этот код даёт питомцу печеньку
В класса есть такая штука как расширение одного класс другим. Например, для кота Петрония и пса Барбоса есть общие переменные, такие как имя, тип и еда, но вот давать печеньки коту глупо, а пулять тапком в собаку не безопасно. Т.е. для пса выполнить метод ThrowASlipperAtItBecauseItMadeAMess() (переводится как «запустить тапком, так как съел сметану») можно только в шаговой недоступности. По этому эти методы по идее должны быть уникальными для каждого типа. Это можно делать так:
class Pet() { string name = “???” string type = “???” string eat = “???” }
class PetCat() extends Pet { function ThrowASlipperAtItBecauseItMadeAMess() { // Тут какой-то код } }
class PetDog() extends Pet { function GiveCookies () { // Тут какой-то код } }
pet2.name = ‘Барбос; pet2.type = ‘Пёс’; pet2.eat = ‘Принёс назад тапок для запуска его в кота, дать печеньку’;
pet2. GiveCookies (); // Этот код даёт питомцу печеньку
Но никто не мешает делать, конечно, и так:
Pet pet1 = new PetCat(); // Всё внимание на тип вначале! Найдите отличия. Pet pet2 = new PetDog(); // pet2 тоже с тем же типом, хотя создаётся экземпляр другого объекта (уже расширенного)
Но тогда перед тем как вызвать функцию, нужно сначала убедиться в типе этого объекта, т.к тип Pet ничего не знает и не ведает о том, что его где-то кто-то стал расширять.
Теперь уже не получится запульнуть в пса тапком и дать коту печеньку, т.е. например, так не выйдет – pet1. GiveCookies (); – этот метод теперь только для объекта PetDog(), компилятор скажет, что у этого объекта нет такого метода.
Как вы заметили, переменные объявляются только один раз в родительском классе (классе, функционал которого мы расширяем).
Этот способ позволяет делать библиотеки кода, когда вы компилируете свой класс, хотите поделиться им с кем-то, но не хотите чтобы кто-то узнал по какой формуле будет лететь тапок, и из какой химической гадости будут сделаны даваемые псу печеньки. Так вот, вы компилируете класс, создаете библиотеку, но позволяете другим программистам расширять ваш класс своими функциями, например общую для них – погладить по голове, или индивидуальные – почесать за ухом, дать ещё сметаны))). И если они сочтут, что ваш тапок летит в кота недостаточно быстро, то могут написать даже свой аналог функции ThrowASlipperAtItBecauseItMadeAMess(). Их компилятор увидит, что такая функция есть в вашей библиотеке, программист её расширяет, но у него тоже есть такая же функция, тут его компилятор и принимает решение, что код этого программиста всё-таки важнее вашего и даст ему расширить класс своим методом на замену.
7. Комментарии. Это те части кода, которые просто нужны чтобы программист сделал какие-то заметки для себя или других программистов, которые могут работать с этим кодом. Компилятор будет их полностью игнорировать.
Философия “Hello World!”
Когда-то в далёком эээ…уже не помню каком году, мы с одноклассниками сидели на табуретках с электрогитарами в руках и спорили нужно ли для хорошей игры учить пассажи известных музыкантов, таких как Джо Сатриани или Ван Халена. Мне говорили обязательно нужно, иначе не будешь знать основ и не сможешь нормально играть, а я говорил, что если я буду учить других, то мне сложно будет придумать своё, а в музыке это означает потерять индивидуальность. И как показала жизнь, у каждого была тогда своя правда. В программировании так же. Здесь нужно всего в меру, меньше неё будет недостаточно для написания рационального и лаконичного кода, а если будет слишком много – разрушит элементы творчества, ты просто превращаешься в великого комбинатора – взял там кусок кода, взял тут готовый метод…хотя, это тоже в некотором роде творчество. Приведу пример. Некогда я писал много и для души на ассемблере. Часто приходилось обнулять 32-битный регистр, т.е. записывать в него значение ноль. Я делал это таким способом, кстати, строго по умной книжке:
MOV EAX, 0
Эта команда занимала, если не соврать, 5 байт в режиме 32 битного режима процессора по умолчанию. Но потом дизассемблируя чей-то код из игрухи типа «Принц оф Персия», я увидел интересную конструкцию:
XOR EAX, EAX
которая занимала уже только 1 байт. Результат тот же, но логическое действие совершенно не очевидное, эта команда не помещает ноль в регистр, она берёт то, что там уже есть и исключает само себя. Согласитесь, это красиво как любимая женщина (с мужской стороны, как для милых дам написать, я не знаю, что для вас сравнимо по красоте)) ). Тут то я и понял, насколько важно всё-таки иногда заглядывать на то, как делают другие, и о чём в книгах могут не написать. При изучении нового языка программирования, уже так повелось, люди первым делом пишут вывод фразы «Hello, world!», ну или «Привет, мир!» (кому как удобнее). И вот какой в этом смысл: 1. Вы понимаете, что у вас работает среда разработки 2. Вы понимаете, что у вас правильно настроен и работает компилятор 3. Вы понимаете какой именно код заставил миллиарды транзисторов вашего устройства выстроить такую последовательность сигналов, что это привело к написании на вашем устройстве этой фразы, и на этом этапе всё, что вы делали правильно, и это работает…кстати, иногда пишут и такую фразу «It’s work!» (это работает). Моя рекомендация – начинайте всегда изучать языки программирования с этой фразы. Она даёт дозу того самого волшебного пинка – психологически, если сразу что-то начинает работать, хотя ты только начал изучать, сильно бодрит, внушает чувство власти тебя над вычислительной системой, она выполняет команды, которые ты вводишь как верный пёс)), как любовь с первого взгляда.
Соблюдайте следующие принципы программирования
1. Пишите правильные комментарии Это значит, что вы их должны писать тогда и только тогда, когда это действительно нужно или требуется, и не пишите их для всего подряд.
Не делайте избыточные комментарии:
a = 0; // Поместить в a ноль чтобы проверить как на него делить – ПРАВИЛЬНО
b = 1 / a; // Поделить 1 на a, которое содержит ноль – НЕПРАВИЛЬНО (избыточно), и так ясно, что здесь 1 делиться на a, которое содержит ноль, что тоже указано в предыдущем комментарии
Не делайте код совсем без комментариев. Часто бывает, что текущий проект нужно отложить на время. Потом, когда вы сможете к нему возвратиться, вам точно будет сложно понимать некоторые вещи, особенно если проект большой. Если вы ведете командную разработку, то это может быть иногда даже обязательным условием – уважайте время других программистов, напишите почему вы делаете этот алгоритм именно таким, хотя бы вначале, вкратце.
Пишите комментарии в строгом стиле, не используйте личные окончания глаголов:
a = 0; // Поместим в a ноль и проверим как на него делить – НЕПРАВИЛЬНО – вы может и помещаете, а лично Мы – нет.
a = 0; // Помещаю в a ноль чтобы проверить как на него делить – НЕПРАВИЛЬНО – ну и хорошо, помещай дальше что хочешь, я тут при чём? Мне что за тобой следить нужно? И давай уже решайся быстрее что туда помещать!
a = 0; // Помещаем в a ноль чтобы проверить как на него делить – НЕПРАВИЛЬНО – я уже ответил про вас, мы не помещаем ничего никуда, тем более в перманентном процессе, да, это будет, но только один раз…и без вас
a = 0; // Помести в a ноль и проверь как на него делить – НЕПРАВИЛЬНО – как ты груб с компом, фу!
a = 0; // Поместить в a ноль чтобы проверить как на него делить – ПРАВИЛЬНО – да, нужно поместить, а уж пометит ли он на самом деле и определяет что ты за программист и на каком железе работаешь)).
Кстати, в математике нельзя поделить число на ноль, но в компьютерных процессорах – можно. Результат будет «не число». Но большинство программ отрабатывают этот результат деления как ошибку «Деление на ноль», ну чтобы не вводить в заблуждение рядового пользователя)).
2. На каком бы языке вы не программировали, делайте код таким, чтобы он был наиболее удобно читаемым.
ЕслИ а = 1 ТОгДА ЧтоТоОБъЯвляюЗдесьПотомВыход = Истина; КонЕцЕсли; // НЕПРАВИЛЬНО – буквы скачут, всё условие в одну строку. Это всё равно что программиста, который будет этот код читать, обматерить в грубой форме
// ПРАВИЛЬНО – удобно читать код, код аккуратен. Если а = 1 Тогда ЧтоТоОбъявляюЗдесьПотомВыход = Истина; КонецЕсли;
Например, я когда пишу, могу для удобства даже разделять смысловые методы пустой строкой, так читать удобнее и искать нужное гораздо быстрее, когда часами проводишь за компом…или перед компом…
Так пишу я:
Хотя никто не запрещает писать так:
Но согласитесь, в первом варианте читать намного легче и при этом код не загромождается. Очень быстро визуально искать нужное.
3. Сам язык программирования (любой) выучить не сложно, имеется ввиду его синтаксис, потому что выучить все методы современного языка физически невозможно, их десятки тысяч, да и кому это нужно. Например, зачем вам глубоко погружаться в специфику программирования для работы с устройствами Bluetooth, если вы никогда не будете их программировать в обозримом будущем, а только по этим классам сотни методов. С другой стороны, знание только языка вряд ли сможет закрыть вопросы решения современных задач. Так или иначе нужно изучать смежные технологии. Например, если вы решили сделать программу, которая передаёт файл по сети в другую такую же программу, то вам как минимум нужно будет понимать как работает сеть, чтобы знать логику и порядок выполнения тех или иных команд, их значения. Например, невозможно это сделать в ряде случаев, если вы не знаете что такое IP адрес, доменное имя или что такое сокет, не знаете, что сокет нужно открывать, а после использования закрывать. Даже не знание простых вещей иногда приводит к неверной работе программы. Например, вы в своей программе выделяете место в оперативной памяти, и как это сделать вам даст изучение языка, но нужно ли потом принудительно освобождать память и в каких случаях это нужно делать принудительно, а в каких система сама разберется с этим лучше, чем кто либо, знание только языка программирования вам не даст. Там например будет просто описание функции free() – освобождает память, а зачем она это делает, а зачем вообще это нужно, ни одно описание языка программирования вам это не скажет. Многие описания предполагают принцип «Вы конкретно знаете что хотите сделать, но определенно не знаете как это сделать».
Итог
Теперь остается только хорошенько всё обдумать, выбрать нужный язык программирования и приступить к созданию своей первой программы.
Это выдуманная история, которой вообще никогда не было…наверно…
Это был тёплый летний день. Иногда ветер поднимал вверх городскую пыль и нёс её через улицы и проспекты, и закручивал на площадях. Иногда вдруг появлялись тучи и начинал лить дождь; он падая на горячий асфальт, в тот же миг превращался в пар и медленно полз вдоль домов, окутывая собой всё на своём пути. Андрей шёл вдоль одного из домов и воспоминания о его юности стали охватывать его. Вот там за сквером они с ребятами собирались после школы с магнитофоном в руках и слушали запрещенные музыкальные группы, вот у этого дома он в детстве сильно подрался с Мишкой, там за канавой он навернулся на велосипеде и долго не мог сказать отцу, что сломал «звёздочку», пока тот сам это не увидел. Андрей оглядывался по сторонам пытаясь усмотреть что-нибудь ещё, что могло ему напомнить про то прекрасное время, когда каждый день был насыщен различными событиями и встречами. Он понимал, что сейчас его жизнь совсем не такая – с работы идёт домой, дома жена, подросток сын, все живут своей жизнью, а потом спать и снова на работу. Выходные с друзьями могли бы разнообразить его жизнь, но у него не было большого числа друзей. Все они остались в юности, а потом куда-то разбежались. Он считал, что жизнь его пресная как талая вода, в ней нет и не предвидится ничего интересного и необычного, хотя до старости ему ещё далеко. Андрей перешел улицу, завернул за угол очередного дома и пошёл старым невзрачным двором. Вокруг были только тополя и трехэтажные здания постройки первой половины двадцатого века. Этот двор был всё таким же как и раньше, но ещё более обветшалым. Посторонние сюда захаживали редко, но только те, кто жил здесь знали, что путь через этот двор позволяет сократить расстояние почти вдвое. Вдруг на третьем этаже широко распахнулось одно из окон. Оттуда появилась прекрасная светловолосая девушка и обратилась: – Молодой человек, Вы не могли бы мне помочь? – Денег нет! – даже не отвлекаясь от своего пути рявкнул в пустоту Андрей. – Да нет, деньги тут не при чём.- сквозь смех ответила девушка. Тут Андрей остановился и обернулся, но никого рядом не было. Тогда он повёл взглядом чуть выше и только сейчас заметил в окне эту прекрасную незнакомку. Ей было лет тридцать, но были в ней какие-то черты присущие только двадцатилетним. Её непосредственный и добрый взгляд, красивая и искренняя улыбка говорили о том, что ей ещё не довелось перенести все тяготы современной и бурной жизни, как и её последствия. У неё была какая-то очень сложная и замысловатая причёска, при этом её светлые локоны свисающие с двух сторон лица в совокупности с ярким макияжем, придавали внешности невероятную пикантность. Андрей непонимающе ещё несколько секунд простоял в неловком молчании, потом оглянулся по сторонам, сомнений не было – девушка обратилась именно к нему. – Вы хотите чтобы я Вам как-то помог? – произнес Андрей. – Если Вам будет не сложно. – ответила девушка. – Что нужно сделать? – Мне должно прийти важное письмо, я Вам сброшу ключи, а Вы возьмите из почтового ящика и занесите пожалуйста его мне. – А Вы боитесь выйти из дома? – решил пошутить Андрей, не понимая в чём причина у девушки спуститься на три этажа и получить почту самой. – К сожалению, я не могу одна с этим справиться, я болею. – Ладно, хорошо, положите ключи в пакет, завяжите его и сбросьте. Какой у вас номер квартиры? – У меня одиннадцатая квартира. Она на минуту скрылась, после чего появилась с полиэтиленовым пакетом. Немного прицелившись, она взмахнула рукой и пакет полетел вниз с приглушенно звенящими внутри ключами. Андрей подобрал его, раскрыл, взглянул мельком на девушку и вошёл в подъезд. Почтовый ящик был забит какими-то бумагами, рекламными листками, среди которых действительно оказался конверт. Он быстрым шагом поднялся на этаж. Дверь одиннадцатой квартиры была немного раскрыта и постучав костяшкой пальца в неё, он переступил порог. Прихожая была обветшалой и давно не видящей настоящего ремонта. Деревянный пошарпанный пол поскрипывал и постукивал. Посередине прихожей в старой инвалидной коляске сидела эта прекрасная девушка. На ней было короткое платье и дорогие яркие туфли. Андрей стал внимательно её разглядывать и понимать насколько она прекрасна. Обычно будучи человеком решительным, сейчас он стоял и не мог ничего придумать чтобы начать разговор. – Может быть Вы отдадите мне пою почту? – улыбаясь проговорила она. – А, да! Там я посмотрел, действительно было для Вас какое-то письмо. – Это очень хорошо, положите это на трюмо, я потом разберу. Спасибо Вам, мы меня выручили, можно я угощу Вас за это чаем, если Вы не торопитесь? – Да нет, не тороплюсь. – Тогда вот проходите сюда в комнату, у меня на кухне немного не убрано. Присаживайтесь вот сюда на кровать к столику. Андрей присел на кровать и оглядел комнату. В комнате был старый советский сервант, старая тумба, столик у кровати и торшер. Ещё советские жёлто-коричневые обои уже имели засаленный вид, кое-где отходили от стены и несли на себе полувековые трещины и потёртости. Однако, кровать была большой и современной с новым двуспальным матрацем, что выделяло её из всего комнатного колорита. Она подкатила коляску к столику и разместилась напротив него. – Меня зовут Лида. – Я – Андрей.- перебивая першение в горле и пристально на неё уставившись, произнес он. Сквозь окно пробивался яркий солнечный свет и именно сейчас так прекрасно передавал все утонченные черты её завораживающей внешности. Она выглядела такой женственной, как актриса из фильмов пятидесятых годов. Он мысленно стал искать темы для беседы, но ни одна толком так и не приходила. – Я Вас раньше здесь не видела.- вдруг нарушая молчание произнесла она. – Я жил здесь давно. Примерно пятнадцать лет назад переехал отсюда, живу сейчас в другом районе. Здесь сдавал родительскую квартиру, нужно привести её немного в порядок. Вы живёте одна? – Одна бы я не справилась. Ко мне два раза в неделю приезжает моя племянница; привезет еду, бросит на пороге и убегает; а вообще да, одна – поговорить не с кем, обсудить, поспорить. – Я могу к Вам приезжать, если хотите, со мной можно и поговорить и поспорить, могу составить Вам компанию.- Сказал Андрей, решив воспользоваться удобной темой разговора. После этих слов он замолчал и задумался. Он понял, что все годы совместной жизни с женой ему не хотелось ни поговорить с ней, ни поспорить, а последнее время компания с ней его просто тяготила. Он искал любые возможности побыть либо в компании знакомых, либо наедине. В его жене не было ни какой-то искры, ни активности, общение с ней у него навевало уныние. Сейчас же он смотрел на эту прекрасную девушку, которую так ударила жизнь, и понимал насколько она полна жизненной энергией, стремлением и желанием жить, как она светится этим и излучает этот свет на всё вокруг. Насколько она сильна в своем этом желании и насколько велика её способность радоваться жизни даже сквозь такую невероятную жизненную беду. – Вот Вам чай свежий, с добавлением различных трав, такой Вы не купите в обычном магазине. Он отхлебнул и понял, что действительно никогда такого вкусного чая он не пробовал. Смесь каких-то трав, из которых он смог узнать только тонкий аромат мяты и резкий аромат клевера, проникал внутрь его и создавал невероятное чувство удовлетворения. Вкус был настолько прекрасен и насыщенным, что это даже вызвало у него улыбку. – Лида, что это за прекрасный рецепт, я действительно никогда ничего подобного не пил? Где можно купить такой чай? – Нет, Андрей, такой купить Вы не сможете. Это очень редкий сорт чая. Андрей поднял и потрогал кружку. Чай был не очень горячим, он добавил ещё ложку сахара, размешал и выпил его почти одним глотком. – Лида, невероятно, какой же он вкусный! Как Вам удается делать такой чай?! Можно я ещё одну кружку налью? Она захохотала раскатистым смехом, который обычно бывает только у шеф-повара дорого ресторана, когда говорят, что у него опять аншлаг. Она подняла заварной чайник, налила ему в кружку ещё заварки и залила уже подостывшим кипятком. Андрей немедля положил туда пару ложек сахара, быстро размешал и снова одним глотком выпил всю кружку. Опять насыщенный травами аромат стал растекаться по всему организму. Он от удовольствия закрыл глаза и понял, что большая часть всех ароматов ему знакома. Он стал чувствовать как он может выделить каждый из них, как профессиональный дирижер может разложить незнакомую мелодию на каждую партию и ноту. Да, сейчас каждый отдельный аромат этого чая звучал своей отдельной нотой, и единственное что, он никак не мог вспомнить их названия. Этот прекрасный чай с этой прекрасной женщиной, как же это невероятно, подумал он.
***
Было почти тихо, из-за плотно закрытого окна едва доносилось пение цикад. Он открыл глаза, но мысли к нему как-то медленно возвращались. Он просто лежал и созерцал происходящее вокруг. Вдруг он понял, что то, что он видит перед собой в паре метров – это не что иное как потолок. Андрей повернул голову и перед глазами в полумраке возникла поверхность кровати. Руки онемели и затекли. Он попробовал их поднять над собой, как это обычно привык делать, но руки почему-то не поднимались. Он попытался сделать это ещё раз, как вдруг где-то рядом зазвонил какой-то колокольчик. Через несколько мгновений послышался шорох и в комнате включился свет. Только теперь Андрей мог рассмотреть что вокруг происходит. Он лежал на кровати на спине. На руках были толстые синтетические веревки, которые подтягивали руки к противоположным сторонам. Он попробовал подтянуть ноги, но они тоже были привязанными. Он перевел взгляд на дверь в комнату. Там сидела на коляске Лидия с лёгкой улыбкой. – Вижу уже заметили, Андрей, что Вы привязаны.- Произнесла она нейтральным голосом. – Зачем это, что Вы собираетесь делать? – Сказал Андрей, стараясь не впадать в панические настроения. Он понимал, насколько он сейчас скован и беспомощен, насколько он не может распоряжаться своим телом. Он стал мотать головой и дергать руками и ногами. – Нет, развяжите меня сейчас же.- Повышая тон произнёс он. После этого Лида, подкатила свою коляску вплотную к кровати, поднесла указательный палец к своим губам и тихо произнесла: – Т-с-с-с! – Вы что делаете, развяжите говорю! – Не унимался Андрей, после чего она проговорила. – Андрей, давайте договоримся так – Вы не будете ни кричать, ни звать на помощь, ни ещё что-то подобное делать. От этого зависит Ваша жизнь и от того, какая она будет. Я пролежала почти вот так как Вы восемь лет и не жалуюсь на жизнь, наоборот, это меня сделало сильней, я стала больше её любить и ценить. У меня изменились и жизненные приоритеты и цели. Самой главной мечтой в моей жизни было желание встать с этой больничной кровати и побежать, побежать к своей мечте. Какие у вас, у простых людей желания в жизни? Купить квартиру, машину, заработать денег, съездить на море на отдых, правильно? А у таких как я оно одно единственное настоящее – встать и побежать. Для вас это желание повседневно и обычно, и вы даже не замечаете этого желания, но для нас оно сложное и труднодостижимое. – Да Вы просто больной человек, но болезнь Ваша не в ногах, а с другой стороны! – произнес Андрей с кривой улыбкой. Лида широко улыбнулась, но никак не стала комментировать его слова, а решила продолжить разговор дальше. – Андрей, не будем отходить от темы разговора. Я тут немного успела с Вами познакомиться. Она взяла со столика барсетку и открыла её. Первое, что попалось там был паспорт Андрея. – Какое Вы право имеете копаться в моих вещах? – Андрей, не в Вашем положении задавать мне такие вопросы. Так что, смотрим, что нам дано – Андрей Павлович, старше меня на семь лет, женат, есть уже почти взрослый сын, других интересных отметок больше никаких нет, убираем обратно. Так это что, ага, водительское удостоверение. Категории – а, б, ц. Очень интересно, но всё равно убираем обратно. Так, это что, документы какие-то, деньги, ключи, бумаги. Вот Андрей Павлович, скажите, зачем Вам барсетка, это что всё нельзя в карманах носить? – Да какая Вам разница, моё дело как и что носить. – Андрей Павлович, скажу сразу, хамить симпатичной девушке в привязанном состоянии плохая идея, Вы может быть не совсем поняли, что встать с этой кровати Вы сможете только лет через пять-восемь, как я решу, по этому ведите себя прилично! Любая попытка вырваться, отвязаться, покричать будет для вас либо предпоследней, либо последней. Всё зависит от глубины этой проблемы. Вы взрослый человек, раз попались – терпеть! – Да Вы просто ненормальная какая-то! После этого она достала из трюмо шприц с иглой, в котором была какая-то жидкость. – Андрей Павлович, вот то, о чём я говорю – это моя гарантия, хотите получить свой последний укол в жизни, можете и кричать и на помощь звать, если не хотите – лежите здесь восемь лет, потом встаёте и идёте к своей семье. Других вариантов нет! Андрей посмотрел ей в глаза и прочитал в них решимость полностью выполнить всё, что она только сказала. – У меня уже спину ломит, пролежни так будут. – Ну вот прямо так сразу не будут, потом поверну, когда спать будете. – Я есть хочу, мясо хочу, картошку. – Мяса нет, есть рыба, картошки Вам много нельзя, вот тучность повышенная, нужна небольшая диета. С утра покормлю, ночью еды нет. – Да Вы просто садистка какая-то! – проговорил без всяких эмоций Андрей.
***
За окном кружился и падал осенний снег. Сосульки свисали с крыши дома и закрывали большую часть окна, но яркий солнечный луч многогранно отражался, распадался и долетал до стены комнаты в виде импровизированной радуги. – Чем думаете сегодня заняться, Андрей? – произнесла Лидия. – Хотел бы посочинять рассказы, например об этих сосульках, что висят за окном. – Хорошая мысль, мне нравится. Брать бумагу? – Да. Она достала из тумбы зеленую тетрадку в клетку, подкатила свою коляску к столику, взяла ручку и приготовилась записывать. Андрей надиктовал ей несколько абзацев свежепридуманного рассказа о деревянной крыше, сосульках и насколько весной это опасно, она всё внимательно записала, иногда корректируя его фразы. – Лида, ты всё обещаешь рассказать, что заставило тебя взять и сломать жизнь случайному человеку? Кстати, руки и ноги опять отекли, и спина снова болит. – Ты думаешь, что можно только не случайному? Лучше расскажи, как ты проводил свои дни уже старшеклассником, ходил ли на выпускной, много ли было друзей? – Да как проводил, как и многие ребята – играли на гитарах, слушали музыку, с девчонками знакомились. – А девчонок потом на мотоцикл и по ночному городу от милиции? – улыбнувшись проговорила она. – Да нет, почему сразу так. – У тебя не было ни мотоцикла, ни девушки? – Мотоцикл был, а девушки не было.- Произнес Андрей и на его лице отразились печальные воспоминания. – Разве такое бывает? – стала расспрашивать Лида,- Если есть мотоцикл, то рано или поздно на нём будет сидеть сзади девушка, а у тебя разве не так? – Нет, он у меня не долго был, я его продал. – Как так? Раньше же в очередь нужно было стоять чтобы его купить, деньги переплачивали, никто не хотел продавать, это было символом настоящего парня. – Со мной одна плохая история произошла, я её никогда никому не рассказывал. – Расскажи мне.- с интересом произнесла Лида. – Хорошо. Мы ехали с приятелем из области на моём мотоцикле, весёлые озорные. Причём не выпивали, просто настроение хорошее было. По трассе гнали сто двадцать, ветер взвивал волосы, сердце стучит быстро. А у меня ещё опыта не так много было, перед этим только весной права получил. Сколько мне тогда было, не помню уже, да, вроде восемнадцать. И вот съезжаем с трассы, едем уже среди домов, подъезжаем недалеко отсюда в двух кварталах у железки, заруливаем за дом, как вдруг девчонка выбежала. Я хотя и почти успел затормозить, но сбил её, она упала лицом на землю, и я колесом передним ещё по ней переехал. Слез с мотоцикла подбежал, лицо у неё в крови и из носа кровь течет. Приятель кричит, мол Дрон, валим по-быстрому или сейчас в тюрьму посадят, я испугался, прыгнул обратно на мотоцикл и газанул оттуда. Ночью тогда не спал, кошмары мучали, а с утра решил мотоцикл продать. – А приятель что же твой, тоже никому не рассказал? – Нет, с приятелем через полгода на стройке несчастный случай произошёл, погиб, только я единственным свидетелем и остался. – И что, ты не пошёл в милицию, не признался? – Нет, я не смог, я струсил и поступил как последний негодяй, эта тяжесть со мной теперь всю жизнь. Каждый раз когда думаю об этой истории, искренне надеюсь, что ничего страшного с ней тогда не произошло. – Андрей, твоя надежда подводит тебя, знаю это, потому что девочку ту Лида звали. После этих слов Андрей молча несколько секунд посмотрел Лиде прямо в глаза. Его лицо ничего не выражало, оно было как каменная стена – без эмоций и без выражения. Он отвел взгляд, повернул голову и уставился в потолок. Пролежав так молча примерно половину минуты, он слегка кивнул и произнес. – Это ещё хорошо, что ты меня решила наказать именно так, а не как-нибудь по другому. Теперь я всё понял. Я своим поступком испортил, сломал тебе жизнь, прекрасной девушке. Я несколько месяцев лежу на этой кровати и с ума схожу, а ты пролежала на ней восемь лет из-за моей беспечности и легкомыслия, из-за моей трусости. Представляю какую низкую жалость я у тебя все эти годы вызывал, сколько досады в тебе было, какой несправедливостью ты считала эти события. Если бы тогда меня поймали и посадили, я бы не понял этого и за несколько лет, что ты заставила меня понять за гораздо меньший срок. Искусная месть, высшего порядка. – Андрей, мне не нравится слово «месть», это просто урок, который тебе рано или поздно нужно было выучить и сдать. Просто лежи готовься к его сдаче. Она убрала зелёную тетрадку обратно в тумбу, посмотрела на секунду на лежащего Андрея, и поехала в другую комнату. В этот день они больше не общались.
***
Андрей проснулся от яркого солнечного света бьющего в окно, такого, что даже занавески не помогали его удерживать. На улице был слышен веселый крик детворы, а откуда-то издалека раздавались хлопки от петард. В прихожей послышался скрип половиц и появилась на коляске Лида. – С Новым Годом! У меня для тебя подарок.- проговорила она. – Подарок? Надеюсь это не скакалка.- Без каких-либо эмоций пошутил Андрей. – Нет, это новая тетрадь для твоих рассказов. – ответила Лида и достала из-за спины спрятанный подарок. – К сожалению, у меня нет для тебя подарка, разве что потом стихотворение про тебя напишу.- проговорил Андрей. – Это будет вполне достаточно. Она поехала на кухню и стала привозить из холодильника оставшиеся салаты, колбасы и соленья. – Дети веселятся! – Решила прокомментировать раздающийся за окном детский крик она.- Я хотела чтобы у меня были мальчик и девочка. Она подкатила свою коляску к окну и заглянула что происходит на улице. – Ой, Андрей, там столько фейерверков прямо у дома сейчас запустят, несколько больших коробок принесли. Ты тоже сможешь увидеть через окно. Здорово! Уже поджигают. Из-за окна послышалось шипение и свист взлетающего салюта. – Ой как их много, как красиво! Они даже как в старых фильмах, прямо с земли хлопают в разные стороны! – Это как это с земли? – поинтересовался Андрей.- Они должны сначала высоко взлетать, потом там хлопать и разлетаться. – А эти нет, они прямо с земли разлетаются.- уточнила свои слова Лида. – Лида, так не бывает, что-то значит… Тут вдруг несколько свистящих ракет стукнули по окну, так что оно завибрировало. Снизу послышался звук разбивающихся стёкол и визг взрывающегося салюта где-то прямо перед окном. Послышался крик людей. Где-то внизу что-то хлопнуло, за чем последовал громкий скрежет. Лида испуганно откатилась от окна и направилась к входной двери и распахнула её. С лестницы валил дым и послышались голоса, кто-то закричал: – Выбрасывай канистру, только аккуратно, нет, не та-а-ак, не так! Не-ет! Тут вдруг что-то бряцнуло и огромное пламя поднялось через всю лестничную клетку. Языки пламени подлетели к квартире и Лида быстро закрыла дверь. – Андрей, лестница горит, в доме пожар! Тут не пройти. – Развяжи меня! – Она быстро торопясь, подъехала к столику, взяла нож и стала разрезать верёвку, которой была привязана рука Андрея. Верёвка была крепкая, а нож не особо острым, тогда она стала пытаться развязать, но её руки от волнения дрожали и не могли ухватиться за узел. – Как же я так сильно завязала? Зачем же я это делала? Что я творила? – Лида, нет, не за эту тянешь, рядом вытягивай! Наконец узел поддался, но в этот момент черный дым стал быстро сочиться через входную дверь. Ещё через два узла левую руку удалось освободить. Тогда Андрей повернулся в другую сторону и стал сам развязывать другую руку. – Лида помоги, руки ослабли, держу за узел, а рука как онемевшая. Лида быстро закручивая колёса своей коляски обогнула кровать и подъехала с другой стороны. Вдвоём им удалось освободить и другую руку. Андрей попробовал сесть на кровати чтобы развязать себе ноги, но это ему не удалось, мышцы на животе как будто перестали работать, ему едва удалось согнуться в полулежачем состоянии и добраться до левой ноги. – Лида, развязывай мне пока правую ногу. Только сейчас согнувшись и добравшись до ноги он смог полноценно заглянуть в прихожую, которая заполнялась чёрным дымом. Через щели деревянной входной двери уже просачивалось пламя. Через минуту после долгих месяцев Андрей смог ощутить полную свободу своего тела, но ноги и руки были очень слабы и едва сгибались. Каждый их изгиб вызывал сильнейшую боль и в мышцах и в суставах. Насколько возможно быстро, он собрал веревку, сел на кровать и стал обвязывать её вокруг Лиды, протягивая веревку подмышками. – Что ты делаешь? Узел затянется и я задохнусь. – в страхе проговорила она. – Не задохнешься, это морской беседочный узел, он не затягивается.- произнес Андрей, не отвлекаясь от дела.- Открывай пока окно. Когда скажу ты перелезай, а я начну тебя вниз спускать! Он взял второй конец веревки, обвязал его шесть раз вокруг стояка центрального отопления и крикнул «Давай!». Он немного подтолкнул её вверх на окно, но она сама переместила центр тяжести и оказалась по ту сторону. В этот момент Андрей быстро намотал конец веревки на правую руку, протянул вокруг себя. Лида повисла с той стороны окна на натянутой верёвке, но она не опускалась. Тогда Андрей подтянул ещё себя ближе к стояку и понемногу стал стравливать, продолжая вцепившимися руками держать свободный конец. Все мышцы как будто простреливало от боли иглами, но он продолжал держать и небольшими движениями отпускать. Вдруг комната стала резко наполняться зловеще чёрным дымом. Андрей схватил с кровати одной рукой одеяло, как мог накинул его на себя вместе с головой и приблизился к окну. Выглянув в него он увидел как Лида всё ещё висит на уровне чуть ниже второго этажа. Под ней было несколько человек готовые её принять. Он ещё немного стравил веревку и понял как что-то ему жжёт спину. Внизу крикнули «Мы её поймали!». Тогда Андрей быстрым движением, завязал находящийся конец веревки на том же стояке несколькими узлами, подтянул свисающую веревку немного к себе, обвязал её вокруг левой руки, через спину, вокруг правой и затем вокруг каждой ноги, взялся за висящий конец и стал перелезать через окно. – Андрей, Андрей, скорее перелезай, над тобой огонь. Он сбросил с себя одеяло и в этот момент пламя охлестнуло его своими языками. – Андрей, нет! – Закричала, Лида.
***
Лида сидела на краю больничной кровати и держала в руках зелёную тетрадь в клеточку. Она открыла её и стала листать, на листы тетради капали слёзы. Каждая страница ей была знакома – она записывала все рассказы Андрея. Каждое название, каждая дата вызывали в ней определенные воспоминания. Эта тетрадь было единственное что оказалось тогда при ней, и это было самое ценное для неё – в ней были самые яркие события её жизни. Она перелистнула очередную страницу, там была дата тридцать первое декабря и почерк был не её. Далее следовали строки:
Я тобой опьянён и пленён я тобой, Я с тобой узнал кто я такой. Я понял с тобой и любовь и страдания, Как крепко живут их воспоминания, Как ярко звучит женский твой голос, Как прекрасен дарованный Богом твой образ. Как способна любовь нести откровение; Я с тобой узнал своё предназначение.
Эта история содержит некоторые вымышленные события.
Она тихим шагом подошла к автобусной остановке. Кругом была суета из скопившихся в заторе автомобилей. Они то и дело сигналили, спешили, не понятно кого пытаясь опередить, других таких же как они или сразу само время; и им было безразлично на тех, кто где-то там снаружи их персонального транспортного средства. Она была для них одной из множества случайных пешеходов.
– Алёна, ты что ли? – вдруг раздался знакомый голос. – Ой, Светочка, добрый день! – проговорила она. – Опять к Василию приходила? – К нему. – А что, сегодня пятница? – Да, первая пятница апреля. Я вот сейчас шла и думала, как здесь было пусто на Народной улице, особенно по вечерам. Сейчас машины и днём и ночью ездят, не протолкнуться. – А вы ведь где-то здесь с Васей познакомились? – Да, вон там через улицу,- ответила Алёна, показывая на дом у Володарского моста.- У этого высотного, он ещё строился. Я шла по набережной, а он шёл навстречу, останавливается и говорит «Девушка выходи замуж за простого токаря», а я ему – «Я уже выхожу замуж за будущего дипломата». Он сначала опешил, смутился и говорит – «Нет, этого не может быть!» – Да, я помню ты рассказывала. А я не поняла, был всё-таки дипломат или не было? – Был, он и сейчас есть, он мой муж. Правда, дипломатом он так и не стал – поссорился со своим отцом, стал писать доносы на его друзей, а те как раз на поступление гарантии и давали. Но всё равно хоть и не дипломатом, но тоже солидным человеком работал, сейчас на пенсии. – А я думала Василий твой муж, просто вместе не живёте. Так ты что же, как молодые от мужа бегаешь? – с удивленной улыбкой спросила Светлана. – Уже не бегаю. Сегодня последний раз приезжала. На следующей неделе еду в Ярославль, от брата квартира осталась, буду жить там одна. Давно начала понимать насколько мне с простым и добродушным человеком вместе легче, и насколько с серьёзным и категоричным – тяжело. – Алёна, а Василий простой и добродушный? – Знала бы ты насколько он лучше. – А что же ты его не позовёшь с собой в Ярославль?
Алёна грустно улыбнулась и посмотрела снова на высотку у Володарского моста. Потом разворачивается в противоположную сторону и говорит. – Посмотри на эту террасу у дома. Когда мы познакомились, то потом часто выходили сюда гулять. Он с таким интересом всегда рассказывал о своей работе на заводе, знал многих по именам, знал все станки как у них назывались, всякие детали. А потом я ему стала читать стихи Фета. После этого он больше мне ни разу не говорил ни о станках, ни о заводе. Как-то мы договорились встретиться с утра и пойти вместе, я шла в институт, а он на завод. Он пришёл с букетом ромашек и произнес «Я пришёл к тебе с приветом, рассказать, что солнце встало…». Оказалось, что он пошёл в библиотеку, прочитал все стихотворения Фета, выучил это и подарил его мне. Тут я поняла, что именно за него я и выйду замуж. Этот человек был готов совершать ради меня подвиги, а именно это и нужно было мне. И это не только стихи, он был открыт для свершения поступков, настоящих мужских, ради меня. – Так почему же вы тогда не поженились? – Мы шли поздним летним вечером. Помню, было очень тепло, пахло травой и тополями. Мы подошли к этой террасе. Наверх на неё забралось несколько ребят и девчонок, смеялись, играли на гитарах. Я всегда даже в очках в темное время суток видела очень плохо; мне кажется кто-то был там, кто меня знал. Один из парней в шутку крикнул,- Алена, мы всё расскажем твоему жениху-дипломату, что ты с другим гуляешь.- Эй, ты юморист,- сказал Василий,- она моя невеста и никакому дипломату я её не отдам!- После этого трое ребят скинули веревку и слезли по ней вниз. Они были очень высокого роста и мне показалось им было лет по двадцать пять – тридцать. Один из них подошёл к Васе и говорит,- А ты крепкий, жених?- и стукнул его в живот. Потом погоготал и они все трое быстро убежали. Вася поворачивается ко мне, держит рукой живот и говорит,- Ну и сильный же у него удар, мышца болит, аж живот схватило, я на физре так не напрягался.- Потом такой,- Алёнка, что-то у меня по руке течет. Я начинаю трогать, а у меня тоже по рукам что-то течёт, я смотрю, а это кровь. Погиб Василий по дороге в больницу.
Алена ещё несколько секунд молча постояла, а потом говорит,- Вот так я приходила после этого к Василию в гости в пятницу, постою у этой террасы, прочитаю стихи Фета, послушаю его рассказы о заводе и всяких механизмах, и ухожу.
Эта история содержит некоторые вымышленные события.
Она сняла с плиты кипяток, залила заварку и подошла к окну. Вдали из-за крыш городских домов стало подниматься летнее утреннее солнце. Окно было приоткрыто, и занавеска на слабом сквозняке немного шевелилась и щекотала ей лицо. Её взор переходил то на безоблачное небо, то на дома, то на огромную площадь простирающуюся между ними. Здесь пересекалось несколько улиц, а дома были уже типовой советской застройки начала 70-х. Через минуту её взгляд остановился, а на губах промелькнула лёгкая улыбка. – Лёша, ты помнишь как построили «Орбиту» и нам не удалось купить билеты? – негромко начала спрашивать она.- Сколько мне тогда было, тридцать, сорок? А ты помнишь как её строили, а мы гуляли вокруг и пытались угадать где будет кинозал? Лёша, а ты помнишь как мы молодыми гуляли по Коломенскому? Помнишь как мы мечтали, что будем гулять там с нашими детьми? Зимой с ними кататься на горках, а летом играть «в прятки» среди зелёных деревьев. Сколько мы хотели, троих?..Как жизнь распорядилась… В коридоре послышалось шорканье тапок и на кухню вошёл невысокого роста крепкий пожилой мужчина. Он подошёл к ней сзади и слегка прикоснулся своими пухлыми пальцами к её бокам. Она от неожиданности взвизгнула, после чего рассмеялась. – Зачем ты меня так пугаешь? – спросила она. – Тоня, что ты тут опять бормочешь себе под нос? – проигнорировав её вопрос, спросил он.- Опять стоишь у окна и что-то вспоминаешь? Я не буду пить чай, а то опять начну по вокзалам бегать уборные искать. Пойду пока одеваться и рюкзак ещё раз проверю. Через несколько минут они уже стояли на лестничной площадке и закрывали входную дверь. – Лёша, погоди, не торопись, сейчас я Паше ключи отдам. Она позвонила в соседнюю дверь и вскоре она открылась и из-за неё появилась глубоко пожилая женщина. – Паша, мы опять на дачу на выходные едем, Лёше что-то нужно забрать оттуда, а я помидоры полью, хотя они наверно уже за неделю опять засохли.- Безнадежно махнув рукой сказала Тоня,- Присмотрите пожалуйста за квартирой как обычно. – Да-да-да, хорошо, всё посмотрю, не переживай,- старческим голосом проговорила женщина.
***
Ещё мокрая от росы зелёная трава блестела на утреннем солнце. В воздухе жужжали шмели и пчёлы, а на крыше обветшалой веранды сидел и чирикал воробей. Алексей снял рюкзак и поставил его на скамейку рядом, вытер платком со лба пот, а она достала ключи и открыла дверь. – Хорошо хоть дождя не было, а то бы опять испачкались пока дошли.- Проговорила она, перед этим охватив взглядом окрестности. – Да что грязь?! Её и отмыть можно,- предложил своё мнение он,- Вот хорошо, что я насобираю еловых палочек, они подсохнут на солнце и возьму с собой в город, там сделаю что-нибудь полезное. Они ездили сюда ни сколько для хозяйства, а сколько для разнообразия. Им нравилось менять обстановку – проехаться в электричке, пройтись загородной дорогой, поделать что-нибудь по дачному дому. Они родились в Москве и были исключительно городскими, но доставшийся от родителей Тони загородный дом, дал им новую заботу, а потом просто непринужденно вклинился в их жизненный ритм. Они стали воспринимать его как возможность съездить и позаниматься подсобным хозяйством, хотя когда-то этот дом и приусадебный участок могли содержать целую семью. Чаще всего они приезжали сюда на выходные дни, потому что в это время все дачники приезжали сюда и село как будто оживало. Бегали дети, суетились люди, а трактора и грузовики на выходных не так часто тарахтели на пыльной дороге. Они достали из рюкзака консервы, бутерброды и по скорому расположились за обеденным столом. Свежий загородный воздух немного разыграл аппетит. Быстро перекусив, каждый занялся своими делами – Алексей открыл дверь в небольшую мастерскую, которая была частью дома и стал то звенеть ножовками, то стучать топориком, а Тоня пошла вытирать накопившуюся за неделю пыль, иногда выходя на улицу стряхивая тряпку и наблюдая с интересом чем занят её супруг. Выйдя в очередной раз на улицу, она увидела как Алексей ничего не делает, а находится в размышлениях, по этому решила, что если заговорит с ним, то не помешает его работе. – Лёша, ты помнишь как мы приехали на эту дачу первый раз вместе, я промочила ноги, а ты сочинил смешное стихотворение как у меня вода хлюпала в калошах? – А-а? Да, помню.- пробормотал он не отвлекаясь от размышлений, смотря то на рубанок, то на кусок какой-то деревяшки. – Лёша, а хочешь я схожу за молоком и сварю вкусной каши? – продолжала она. – А-а, да, свари-свари.- ответил он, продолжая о чём-то размышлять. – Лёша, а может сырников сделать? У Наташи ещё и творог есть. – Да нет, Тоня, кашу нормально.
***
Уже вечерело, воскресный день заканчивался, но Алексей почему-то суетился и заглядывал то в мастерскую, то на веранду. – Лёша, ты что ищешь? Мы так на электричку опоздаем, а следующая уже поздно будет, в это время трамвай прождём долго. Да и Паша спать уже ляжет, ключи не забрать будет. – Да вчера стругал палочки, положил вроде тут на скамейку чтобы по пути не забыть, да не найду, вроде я их сюда положил. Может как-то ненароком в мастерскую их отнёс или в дом. Ты не видела? – Лёша, а они тебе нужны были? – Ну да, я их делал вчера, сегодня хотел забрать в город, тебе в подарок вещь одну смастерить. – Лёша, ты знаешь, я вчера несла молоко от Наташи, задела бидоном за эти палочки, пролила молоко. В общем, психанула что-то и выбросила эти палочки. – Ой-ой-ой, придётся нам в следующую субботу опять ехать, а не то я к твоему дню рождения не успею. А очень хотел сделать. – Хорошо, давай так.
***
Утро следующей субботы было такое же светлое и солнечное, но летний жар начинал чувствоваться уже задолго до полудня. Однако, сегодня они решили ехать чуть позже. Она также стояла на кухне у окна и с улыбкой наблюдала за снующими из одной стороны в другую людьми. – Лёша, я посмотрела по расписанию, дневная электричка будет через час. Если сейчас выйдем, то успеем. – Хорошо, Тоня, я уже по-быстрому собрался, можем выходить. – А помнишь, как ты после армии быстро собирался? Вскочишь, оденешься за минуту и довольный такой улыбаешься? – Помню-помню. Побежали на электричку!
Сегодня они не стали заходить к Паше. Они решили съездить одним днем и к вечеру вернуться. На трамвайной остановке суетились люди. – Лёша, как думаешь, долго наш трамвай будем ждать? – Не знаю, может и полчаса не приехать. – Лёша, а как думаешь, трубу в ванне не прорвёт пока мы ездим? А то я боюсь как в прошлый раз затопим соседей. – Да не, не прорвет, мы же только туда и сюда. – Лёша, у тебя есть мелочь на проезд, а то я кажется кошелёк дома забыла? – Была где-то мелочовка в сумке, на проезд хватит.
Опять перед ними промчалась толпа людей, вышедших из очередного трамвая. Кто-то вспотев вытирал лоб и шею, кто-то обмахивался свежей газетой. Люди немного столпились, потом перешли улицу и спешно направились по своим делам. Стоять здесь на трамвайной остановке между двух потоков машин в такой жаркий день было невыносимым испытанием. Тут Тоня вдруг спешно стала водить рукой по своей сумочке. – Ой, Лёша, Лёша, я кажется ключи от дома забыла. – Как забыла? – Да, точно забыла, на кухне в другой сумке оставила. – Тоня, стой тут, я сейчас быстро сбегаю!
Алексей быстрым движением скинул полупустой рюкзак и побежал через дорогу за уходящей толпой. Тут он вдруг мельком взглянул на светофор, который едва сквозь солнечный блик казался красным. Он понял, что надо скорее вернуться и дождаться зелёного, и как он даже не посмотрел на него. Он быстро развернулся, но в этот момент увидел прямо перед собой синюю кабину несущегося грузовика. Удар в плечо сразу же повалил его на горячий асфальт. Перед глазами быстро промелькнули рессорные пружины, а огромное двухскатное колесо казалось пролетело прямо над грудью. Перед глазами вдруг возникло яркое солнечное небо. – Почему не чувствуются руки и ноги, всё как будто онемело, только щека сильно болит? Почему всё «кружится»? Почему невозможно подняться? Почему хочу что-то сказать, но губы не шевелятся? Почему не дышу?
Люди вышли на проезжую часть и окружили тело, лежавшее позади тягача. Никто не пытался что-то сделать. Только одна женщина подошла, потрогала пульс и молча опустила руку. Рядом встали трое ребят и внимательно смотрели что с человеком, кто-то из них сказал «Человека задавили». Подошла семейная пара – мужчина покачал головой, а девушка стала тихо плакать. Тут подбежала полноватая пожилая женщина невысокого роста и стала негромко кричать. – Ой, Лёша, Лёша, что это? Лёша, что случилось? Она слегка размахивала в разные стороны руками как крыльями, как птица, которая не может взлететь. Они взмахивали, но сразу же возвращались и хлопали по ногам. Она переходила с места на место, то подходила поближе к телу, то отходила, продолжая взмахивать руками.
***
В это утро она стояла у окна. Осенний дождь стучал по подоконнику. Хлопья белого мокрого снега иногда били по стеклу. – Лёша, ты помнишь как мы укрывались от дождя, забежали в подъезд и ты меня первый раз поцеловал?.. Она вдруг замолчала в надежде услышать привычное шорканье старых тапочек, но его не было…
Сон 2008 год. Незнакомый железнодорожный вокзал и незнакомка.Сон 2005 год. Кафе у незнакомого железнодорожного вокзалаСон 1999 год. Замок-небоскрёбСон 1995 год. Город над городомСон 1997 год. Тёплая планета-океанСон 1995 год. Красивый скалистый полуостров на планете-океанСон 1999. Вид космоса недалеко от планеты-океанСон 1992 год. Послание с планеты-океан
Сегодня в шесть утра пишет мне моя маманька в телеграмм, мол зачем мужчины делают изменения внешности. Должен сказать, что маманька – пенсионер, советской закалки, но не прямо рьяная такая, просто из числа обычных советских людей. В молодости работала экономистом в НИИ, но после перестройки смогла как-то перестроиться только весьма условно, т.е. мораль, мировоззрение и воспитания остались неперестроенными. Отсюда и часто возникают между нами некоторые недопонимания во взглядах. Приходится объяснять, что за совершением тех или иных действий в современном мире бывает нет никакой причинно-следственной связи, а людской быт делится в большинстве своём на два основных типа – у одних нет денег, но знают куда им нужно потратить, а у других есть деньги, но куда потратить не знают. Ну мол, мамань пойми, человек и рад бы их потратить с пользой и денег у него много, и возможностей и связей, и власть даже какая-то может быть, и популярность есть, но он тупо ничего в жизни не хочет. Но тратить должен, потому что по этому определяется его статус в обществе. Если он перестанет тратить, то все вокруг него начнут считать, что у него закончились деньги, что он обнищал, раз ничего не покупает, а это начнёт подмачивать его репутацию. Этого допускать никак нельзя.
Вот и получается, что он тратить должен. Всё что понимал зачем ему нужно – он уже купил, а теперь осталось ему покупать только то, что он не знает зачем оно ему. Элементы внешности тоже под это подпадают. Ну вот например, подходит к нему приятель и спрашивает, мол чего нового, а он да вот, брови поменял, пластику сделал на щеках, потратил лям баксов,- О-о-о это круто,- отвечает приятель,- Почётно, почётно, богато, молодец! Потом снова встречается, опять если скажешь что пластику на щеках сделал, то получится хрень, не прокатит, подумает дурит он, по этому к следующей встрече нужно что-то другое сделать, ну там наколки натыкать, губищи надуть. Тут ещё,- говорю,- мамань, тема такая, что знакомых у них обычно очень много, и если каждому что-то каждый раз показывать новое, то можно легко сбиться кому что уже показал, а кому нет, а записывать на бумаге правильно нужно ещё и уметь; от этого изменения во внешности и разные покупки превращаются в изнурительную каждодневную работу.
Маманька вроде после этих моих слов поняла, и решила закрепить мою мысль в своём сознании. По этому мы созвонились, но продолжили обмениваться скриншотами, так сказать по педагогически – раздаточным материалом, и объяснить очередной скрин я особо не смог. Вот он:
Говорю, мол мамань, ну что можно объяснить – наколки на организме, потому что говорит Богу, мол он плохо над телом постарался, по этому решил сам за него скульптуру доделать. Почему на груди портрет нездорового вида эмбриона? Я не знаю, мамань, но видимо на этом этапе и начала появляться у него идея привести созданное Богом тело в порядок. Цепь золотая тебе должна быть понятна зачем – ты же в юности занималась фигурным катанием, спортсменка, по этому хорошо знаешь, что цепь с таким весом хорошо тренирует широчайшую мышцу спины, настраивает правильную осанку, если бы взял алюминиевую цепь, ему бы пришлось брать толщиной с якорную, да и одёжу нужно не перепутать, а то цепь наружу будет, не комильфо. Губищи, маман, не знаю, ну ты вопросами меня валишь, не знаю я зачем у него губищи такие…Погоди, мамань, что ты спрашиваешь? А-а-а, ну да, я сказал “у него”. Ну да…Не, не у неё, а у него. Ага…Да точно…Так вот, губищи, мамань, наверно чтобы если какие проблемы серьёзные, то если надают, то не так заметно было. Опять-таки, если будет на губищи падать лицом на асфальт, то сработают как бампер…Мамань, ну почему не убедительно? Ну а как иначе, сурово нынче…Ну как всё неправда? Да ну, мамань, зачем валерьянку-то сразу пить, посмотри телик лучше…Уже лет пять не смотришь? Там такого не показывают?..Ну не знаю, мамань, ладно, потом ещё чего-нибудь обсудим…
Сегодня произошло в моей творческой карьере достаточно важное событие. Я таки завершил разработку наиболее серьёзного (по моим меркам) мобильного приложения – “Шахматы-онлайн”, и довёл его до стадии альфа-тестирования
Кстати, мой шахматный сервер развернут на VPS – партнёрская ссылка:
Я действительно могу рекомендовать этого хостера как наиболее надежного и дружелюбного. За три года хостинга не было никаких проблем, а все вопросы к службе поддержки решаются быстро и профессионально. У хостера есть бесплатные платформы, такие как WordPress, Jumla, движки интернет-магазинов и т.п. На днях я решил перейти у него с хостинга на VPS. Процесс оказался настолько прост, что это мне удалось сделать самостоятельно за один день. И как было не сделать, если у Beget есть разные стандартные пресеты операционных систем, в частности такие как LAMP-сервер. VPS очень масштабируемы – можно начать сначала с самой скромной конфигурации, а затем расширить число ядер, объем оперативной памяти и т.п. Что меня ещё удивило, что компания эта сама является регистратором доменов, по этому когда я регистрировал свои домены, цены на них оказались значительно ниже остальных (возможно оно и сейчас так). В общем, кто меня знает – ради пары рублей я хрень рекомендовать не буду, и уж тем более ей пользоваться ради экономии этих самых пары рублей.
Приложение позволяет играть, что характерно, в шахматы, причем по двум правилам. Первые – классические (рис.1), о которых все знают и тут останавливаться особо не на чем; вторые – малоизвестные, но очень интересные на мой взгляд – это шахматы Фишера (рис.2) или как их иногда называют Шахматы-960. Предложенный некогда вариант 11-м чемпионом мира по шахматам – Робертом Фишером, очень понравился мне. Ради возможности играть по второму варианту, я и решил замутить это приложение. Правила шахмат Фишера практически ничего не меняют в обычных, кроме как начальную расстановку фигур на поле – они располагаются случайно, пешки расставляются аналогично классическим шахматам.
Рис.1. Классические шахматы
Есть в шахматах Фишера в случайной расстановки фигур всё же некоторые правила: король обязательно должен быть где-то между двух ладей, слоны обязательно должны быть черного поля и белого поля, фигуры черных и белых расставляются симметрично относительно друг друга. Рокировка также доступна только один раз вправо или влево, но количество свободных полей (между королём и ладьёй) для её осуществления зависит от начальной позиции.
Рис.2. Один из 960 вариантов начальной позиции шахмат Фишера
Подобная расстановка позволяет игроку продемонстрировать не шахматную эрудицию, а мышление. Ведь не секрет, что много в партии зависит от первых нескольких ходов, и многие шахматисты просто выучили наиболее частые шахматные дебюты, в следствии чего шансы на успех всей партии существенно возрастают. Расстановка Шахматы-960 умножает на 960 количество вариантов шахматных дебютов, выучить которые практически невозможно. По этому игрок оказывается каждый раз в новой для себя позиции, заставляющей по новому строить свою тактику.
Теперь немного по самому приложению
После открытия приложение запросит от вас никнейм (рис.3). Введите удобное для вас имя.
Кликнув по картинке с шахматной доской вы попадаете на мой канал в Дзене. В случае другой картинки, ссылка может быть иная.
Рис.3. Начало работы с приложением
После установки соединения с сервером, вы оказываетесь в списке игровых столов (рис.4).
Рис.4. Список игровых столов
Здесь можно создать свой собственный со своими правилами удобным для вас цветом стороны (рис.5), либо присоединиться к уже существующему, приняв правила этого стола (рис.6).
Рис.5. Создание нового игрового стола.
Рис.6. Присоединение к существующему столу
Если вы присоединяетесь к пустому столу (за которым нет игроков), то у вас появляется возможность изменить его правила также, как если бы вы создавали новый игровой стол. Отсутствие игрока за столом отображается знаком “-//-” зелёного цвета на стороне той стороны-цвета, где игрока нет, либо с двух сторон, если за столом нет игрока. Полностью занятые столы двумя игроками могут в списке не отображаться совсем.
Оказываясь за столом, за которым кроме Вас никого нет, приложение находится в режиме ожидания присоединения другого игрока-оппонента (рис.7).
Рис.7. Приложение в режиме ожидания подключения оппонента.
В любой момент можно покинуть игровой стол стандартной кнопкой возврата, однако, если при этом была уже начата партия, то она будет автоматически завершена Вашим поражением (аналогично сдать партию).
При этом, если вы просто стандартно закроете приложение или переключитесь на другое приложение, то партия будет продолжать находиться в режиме игры, однако, и игровое время будет также считаться (такое действие НЕ приведет к остановке или прерыванию игрового времени).
После присоединения другого игрока к партии, надпись “Ожидание подключения игрока” исчезнет и приложение перейдет в режим готовности каждого игрока (рис.8). В этот момент каждый из двух игроков должен сообщить о своём намерении играть партию, кликнув по кнопке “Предложить новую игру”. Если другой игрок уже опередил Вас в намерении начать партию, то кнопка приобретёт вид “Согласиться на новую игру”, сохраняя при этом тот же смысл.
Рис.8. Ожидание готовности каждого игрока
После того как оба игрока выразили намерение играть партию, приложение переходит в режим игровой партии, а игровое время начнет счет (рис.9).
Рис.9. Ход игровой партии
В это режиме доступны следующие действия: произвести ход, сдаться, предложить игру, покинуть игровой стол признав при этом своё поражение. Когда один игрок предлагает ничью, другой получает на экране уведомление (рис.10).
Рис.10. Уведомление, когда другой оппонент предлагает ничью.
После того, как оппонент предложил ничью, возможны несколько вариантов: кликнуть нет, и предложение о ничье скроется, кликнуть да и тогда партия будет завершена ничьёй, продолжать обдумывать партию и совершать ходы, просто не обращая на это предложение внимания.
Для совершения хода кликните по своей фигуре один раз чтобы выделить ту фигуру, которой собираетесь ходить (рис. 11). При этом также буду подсвечены все доступные ходы этой фигуры. Если данной фигурой походить невозможно (либо нет свободных клеток, либо ход приведет к шаху “своего” короля), то подсвеченной будет только эта фигура (рис.12).
Рис.11. После клика на пешку e2. Подсвечиваются два возможных хода на e3 и e4, также подсвечивается сама клетка пешки e2.
Рис.12. Слоном c1 невозможно походить, т.к. он заблокирован другими фигурами, по этому подсвечивается только клетка слона на c1.
Повторный клик по подсвеченной фигуре снимает с неё выделение. Если в момент выделения одной фигуре кликнуть по другой, то выделение переставляется на другую фигуру, также подсвечивая доступные её ходы.
Для выполнения хода нужно кликнуть по одному из подсвеченных полей кроме поля, где находится сама фигура (Рис.13).
Рис.13. После того как была выделена пешка e2, клик по доступному полю на e4 привел к ходу пешки e2e4.
Для выполнения рокировки необходимо произвести “длинное нажатие” на соответствующую ладью пока это не приведет к перемещению фигур (рис.14). Если “недодержать” длительный клик, то программа “решит”, что вы хотите просто походить ладьёй вместо рокировки и выделит ладью.
Рис.14. Выполнение рокировки. Нужно длительно нажать на клетку h1, пока это не приведет к перестановке фигур.
Если в течение 20 минут за игровым столом не происходит хотя бы одной игры, стол автоматически закрывается.