Заметки Андрея Гейна

Заметка девятнадцатая. О математике в музыке и докторах философии

«У слова тон значений больше, чем снега в горах.»
Иоанн де Грокейо

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

Удивительно, но ответы на эти вопросы вы скорее услышите на уроках физики и математики, чем в музыкальной школе.

Немножко физики

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

Высота услышанной ноты зависит от частоты колебаний струны, то есть от того, сколько колебаний она успевает сделать за одну секунду. Например, ля первой октавы — это 440 Гц, то есть ровно 440 колебаний в секунду. У низких нот частота меньше, а у высоких — больше.

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

Музыканты в этот момент говорят, что звук, который вы слышите, образуется как сумма основного тона (например, ноты ля с частотой 440 Гц) и обертонов (от немецкого ober — высокий) — колебаний с частотой 880 Гц, 1320 Гц, 1760 Гц и так далее. Наше ухо воспринимает такую склейку позитивно, ведь все встречающиеся в природе звуки образуются ровно таким образом.

Здесь нам важно запомнить, что с точки зрения нашего уха колебания с частотами $\nu$, $2 \cdot \nu$, $3 \cdot \nu$, $4 \cdot \nu$ и так далее хорошо сочетаются друг с другом и приятно звучат. При этом частоты соседних колебаний относятся друг к другу как 1 к 2, 2 к 3, 3 к 4 и так далее. Благодаря этому факту появятся на свет приятные нашему слуху октавы, квинты, кварты и терции, но об этом чуть позже :-)

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

Именно поэтому две получившиеся ноты (построенные от частоты $\nu$ с её обертонами и от частоты $2 \cdot \nu$ с её обертонами) решили называть одинаково — и там ля, и тут ля. А чтобы эти ля различать, придумали, собственно, октавы. Нота, построенная на основной частоте 440 Гц — это ля первой октавы, а на основной частоте 880 Гц — ля второй октавы. Ля третьей октавы построено уже на 1760 Гц, дальше идёт ля четвёртой октавы и так далее. Октавы ниже первой тоже существуют — ля малой октавы строится на 220 Гц, ля большой — на 110 Гц и так далее.

Немножко математики

Окей, с октавами разобрались. Но откуда берутся остальные ноты внутри октавы? На самом деле они появляются достаточно естественным образом. Мы только что выяснили, что обертоны для ля первой октавы звучат на частотах 880 Гц, 1320 Гц и 1760 Гц. Про 880 Гц и 1760 Гц нам уже всё понятно — это ля второй и третьей октавы. А вот что такое 1320 Гц? Если частоты нот ля второй и третьей октавы относятся друг к другу как 1 к 2, то частота этой лежащей между ними ноты соотносится с ними как 2 к 3 и 3 к 4 (а $\frac{2}{3} \times \frac{3}{4}$ как раз равно $\frac{1}{2}$ — радует, что математически мы ещё нигде не ошиблись). Эта промежуточная нота — нота ми. На самом деле это не совсем современная нота ми, но мы об этом поговорим позже. Пока давайте считать, что это честная ми, образующая квинту с ля второй октавы и кварту с ля третьей октавы. Названия «квинта» и «кварта» на самом деле появятся позже, но уже сейчас нам нужно как-то обозначать музыкальные интервалы (промежутки между двумя нотами), вот давайте и воспользуемся правильными названиями: интервал между нотами с соотношением основных частот 2 к 3 будем называть квинтой, а с соотношением 3 к 4 — квартой.

Получается, что обертоны располагаются следующим образом: первый — через октаву после базового тона, второй — через квинту после первого обертона и третий — через кварту после второго (что то же самое, что через две октавы после базового тона). Ну а дальше аналогично появляются и остальные интервалы — большая терция (интервал с соотношением частот 4 к 5) и малая терция (5 к 6). Чтобы можно было сыграть такие интервалы на наших инструментах, внутри октавы появляются и другие ноты.

Вот только незадача — у музыкантов и математиков никак не получалось выбрать конечное (и желательно небольшое, конечно) количество нот и расположить их внутри октавы так, чтобы любая пара нот давала один из приятных интервалов, описанных выше, или составлялся из нескольких таких. То там, то сям что-нибудь не клеилось.

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

$$
\frac{8}{9} \hspace{4em} \frac{8}{9} \hspace{4em} \frac{243}{256} \hspace{4em} \frac{8}{9} \hspace{4em} \frac{8}{9} \hspace{4em} \frac{8}{9} \hspace{4em} \frac{243}{256}
$$

Обратите внимание — в этой последовательности встречается только два интервала — $\frac{8}{9}$, он побольше, и $\frac{243}{256}$, он поменьше (да, чем меньше число, тем больше интервал. Целая октава — это вообще $\frac{1}{2}$, как вы помните). Причём интервал $\frac{243}{256}$ встречается то через два больших интервала, то через три. Прямо как чёрные клавиши на фортепиано ;-)

Понятно, кстати, откуда здесь взялась дробь $\frac{8}{9}$ — это разность между двумя главными (после октавы, конечно) интервалами: квинтой и квартой.

$$\frac{2}{3} : \frac{3}{4} = \frac{8}{9}$$

В Пифагоровом строе не всё гладко — во-первых, эти двести-сорок-три двести-пятьдесят-шестых, которые появились как число, которого не хватало в ряду, чтобы произведение чисел во всём ряду было равно $\frac{1}{2}$. Смотрите: $\left(\frac{243}{256}\right)^2 \times \left(\frac{8}{9}\right)^5 = \frac{3^{5 \times 2}}{2^{8 \times 2}} \times \frac{2^{3 \times 5}}{3 ^ {2 \times 5}} = \frac{1}{2}$.

Во-вторых, фишкой пифагоровского строя было то, что от любой ноты можно было отложить не только октаву, но и чистую квинту, ведь $\frac{8}{9} \times \frac{8}{9} \times \frac{243}{256} \times \frac{8}{9} = \frac{1}{2}$. Исключение составляла только нота си, от неё квинта не откладывалась.

Пифагор попытался решить эту проблему добавлением в строй ещё пяти нот, тем самым разбив каждый из интервалов, равных $\frac{8}{9}$, на два более мелких интервала. С математической точки зрения он построил замыкание множества частот относительно операции откладывания квинты (то есть умножения и деления на $\frac{2}{3}$). Квинта от ля — это ми, квинта от ми — это си, но уже следующей октавы. Чтобы «вернуть» си в нашу октавы, просто делим частоту на два и продолжаем.

Немножко истории

Вы не поверите, но эта система просуществовала на протяжении 12 веков! Дольше, чем любая другая известная музыкальная система. Вот только музыкантов постоянно бесила так называемая волчья квинта. Дело в том, что если в системе Пифагора отложить квинту 12 раз, то мы должны получить исходную ноту, просто на 7 октав выше. Но на самом деле мы получим чуууть-чуть более высокую ноту, ведь $\left(\frac{3}{2}\right)^{12} \approx 129.746$, что чуть больше, чем $2^7=128$. Накопленную разницу называли пифагорейской коммой, и чтобы избавиться от неё, частоту какой-нибудь одной ноты немного подкручивали. В итоге одна из квинт внутри октавы получалась короче остальных и звучала абсолютно отвратительно, будто волки воют...

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

Этим кем-то стал Андреас Веркмейстер. Он сформулировал задачу так. Первое: нужно сохранить в октаве двенадцать традиционно устоявшихся звуков. Всё-таки 12 веков музыкальной истории так просто на помойку не выкинешь. Второе: никакой коммы быть не должно. И третье: все соотношения между соседними частотами должны быть абсолютно равными. Вот это было поистине революционное решение!

Математически Веркмейстер взял октаву с соотношением 1 к 2 и распределил её поровну между 12 нотами. Если две соседние ноты отличаются по своей частоте в $x$ раз, то $x^{12} = 2$, а значит, $x = \sqrt[^{12}]{2}$, вот и всё.

Частота ноты до-диез — это частота до, умноженная на $\sqrt[^{12}]{2}$. Частота ноты ре, следующей после до-диеза, это частота до-диеза, умноженная ещё на $\sqrt[^{12}]{2}$. И так далее! Через 12 нот получается идеальная октава.

Такие образом, Веркмейстер по сути равномерно распределил Пифагорову комму между всеми звуками внутри каждой октавы. Комма рассосалась и стала незаметной. Но досталось это счастье большой ценой: внутри октавы не осталось ни одного чистого интервала. Даже квинта — интервал, тысячелетиями считавшийся незыблемым — стала чуть короче, теперь она равна не $\frac{2}{3}$, а $\frac{1}{\sqrt[^{12}]{2}^7}$, то есть примерно $0,66742$.

Многих музыкантов поначалу возмутило предложение Веркмейстера. Однако через 30 лет почти все смирились с компромиссом, потому что разница между чистой настройкой и той, что предложил Веркмейстер, была едва уловимой, а достоинства нового строя постепенно стали очевидными. Исчезла волчья квинта. Стало возможным переходить из тональности в тональность и из мажора в минор как угодно. В ладу (например, в до-мажоре) остались те же семь основных звуков, но теперь лад мог начинаться с любой клавиши, хоть с белой, хоть с черной. Впервые делом доказал это великий Бах, написав цикл произведений для всех двадцати четырех тональностей — двенадцати минорных и двенадцати мажорных. До реформы Веркмейстера такое количество тональностей существовало лишь теоретически, а на практике было невыполнимо, ибо пришлось бы чуть не для каждой из них заново перестраивать инструмент.

Вместо заключения

Зачем я вам всё это рассказал? Во-первых, это красиво :-)

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

Бонус!

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

Заметка восемнадцатая. Разбор задания Wired CSV с Google CTF 2018

Год назад мы играли в Google CTF. В этом году решили не отставать и снова размяться командой старичков. Вообще мы стали чаще играть в CTF, это меня очень радует.

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

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

Итак, нам дали картинку подключения... эм... какого-то чипа на... эм... какой-то плате к... эм... какому-то устройству (не очень информативно, да, но вы же помните, что я в этом ничего не понимаю?)

Кроме фотографии нам дали 222-мегабайтную CSV-шку: data.7z. Начало у этой CSV-шки примерно такое:

Time [s],Wire6-Analog,Wire7-Analog, Time [s],Wire0-Digital, Time [s],Wire1-Digital, Time [s],Wire2-Digital, Time [s],Wire3-Digital, Time [s],Wire4-Digital, Time [s],Wire5-Digital, Time [s],Wire6-Digital, Time [s],Wire7-Digital
0.000000000000000, 4.768121242523193, 4.773899555206299, 0.000000000000000, 0, 0.000000000000000, 0, 0.000000000000000, 0, 0.000000000000000, 1, 0.000000000000000, 0, 0.000000000000000, 0, 0.000000000000000, 1, 0.000000000000000, 1
0.000008000000000, 4.768121242523193, 4.773899555206299, 0.000000990000000, 1, 0.000065560000000, 1, 0.000194380000000, 1, 0.000451750000000, 0, 0.000452070000000, 1, 0.001480790000000, 1, 1.468471380000000, 0, 2.503182740000000, 0
0.000016000000000, 4.773141384124756, 4.778934478759766, 0.000065230000000, 0, 0.000194070000000, 0, 0.000451450000000, 0, 0.000965990000000, 1, 0.001480440000000, 0, 0.003537600000000, 0, 1.468535670000000, 1, 2.503689840000000, 1
0.000024000000000, 4.773141384124756, 4.773899555206299, 0.000129540000000, 1, 0.000322660000000, 1, 0.000708600000000, 1, 0.001480170000000, 0, 0.002508920000000, 1, 0.005594510000000, 1, 1.472585100000000, 0, 2.507288860000000, 0
0.000032000000000, 4.773141384124756, 4.773899555206299, 0.000193780000000, 0, 0.000451180000000, 0, 0.000965660000000, 0, 0.001994420000000, 1, 0.003537300000000, 0, 0.007651320000000, 0, 1.472649390000000, 1, 2.507799430000000, 1
0.000040000000000, 4.773141384124756, 4.773899555206299, 0.000258100000000, 1, 0.000579770000000, 1, 0.001222810000000, 1, 0.002508600000000, 0, 0.004565780000000, 1, 0.009708230000000, 1, 1.476698830000000, 0, 2.511395640000000, 0
0.000048000000000, 4.778161048889160, 4.778934478759766, 0.000322340000000, 0, 0.000708280000000, 0, 0.001479880000000, 0, 0.003022850000000, 1, 0.005594170000000, 0, 0.011765040000000, 0, 1.476763110000000, 1, 2.511904320000000, 1

Первые полчаса мы занимались двумя вещами: пытались понять, зачем в таблице 9 столбцов со временем, когда можно было сделать один, и гуглили надпись на чипе, к которому подключены клеммы (они же клеммами называются, да?).

Строчки с маркировки гуглятся плохо. Спасает запрос «chip ami 8327», по которому на первом месте выводится страничка «Atari chips». Заодно выясняется, что на чипе написано «CO1», а не «COI», и именно поэтому вторая строчка не гуглилась.

Искомое «CO12294B» на этой странице встречается аж шесть раз, и каждый раз около слова «pokey». Наконец-то можно пойти почитать википедию (это мой любимый момент в каждом таске, ведь именно здесь узнаётся столько нового):

Atari POKEY (Pot Keyboard Integrated Circuit) — электронный компонент, специально разработанная фирмой Atari микросхема генерации звука и интерфейса с устройствами управления. Использовалась в 1980-х годах в ряде игровых систем от Atari — бытовых компьютерах, игровых консолях и аркадных игровых автоматах. Название микросхемы составлено из начальных слогов английских слов POtentiometer и KEYboard, так как эта микросхема часто использовалась для опроса клавиатуры и аналоговых устройств управления (типа paddle). Но в основном, POKEY стала известна благодаря своими возможностями генерации звуковых эффектов и музыки, получив своих поклонников, аналогично микросхемам MOS Technology SID и General Instruments AY-3-8910.

Окей, значит, перед нами либо что-то связанное с клавиатурой, либо что-то, издающее звуки. Поехали на английскую википедию: https://en.wikipedia.org/wiki/POKEY (кстати, картинки в обеих википедиях подсказывают, что мы на правильном пути: там нарисованы именно такие чипы, как у нас). В английской википедии есть распиновка чипа, что для нас очень важно, ведь клеммы подсоединены к конкретным выходам, а не ко всем:

Итак, две клеммы подсоединены к Vss, то есть к земле (по крайней мере, так написано в левой табличке). Остальные восемь — к линиям KR1, KR2, K0, K1, K2, K3, K4 и K5. Первые две, как написано всё в той же табличке, отвечают за «Keyboard Row strobe Input», а остальные шесть — за «Keyboard Scan Output». Ага, всё-таки клавиатура! Про линии K0—K5, вроде, понятно: в статье написано, что поддерживаются клавиатуры до 64 клавиш (+ два модификатора: шифт и контрол), а 64 клавиши — это как раз 6 битов. Вот только что такое остальные две линии и что такое Keyboard Row strobe Input?

Тут мы снова почитали википедию (не стыдно не знать! стыдно не хотеть узнать!): https://en.wikipedia.org/wiki/Data_strobe_encoding. Там написано, что strobe encoding добавляет к линии данных ещё одну линию, причём делает так, чтобы XOR значений на двух линиях менялся каждый такт. Это позволяет синхронизировать такты, а также обнаруживать поломки линии. Ну круто, чо. А почему у нас на шесть линий с данными только две линии с этим strobe? Или это не о том?..

В этом месте мы немного подзастряли, если честно. У нас ведь кроме картинки был ещё 200-мегабайтный CSV-файл с кучей отметок времени, а мы пока за него даже не брались. Поизучаем-ка его более внимательно. Во-первых, кажется, что он состоит из девяти независимых логических колонок: в первой задаётся время и значение (вольтажа?) на двух аналоговых линиях, а в каждой из следующих восьми снова задаётся какое-то время и логическое значение на одной из цифровых линий — нолик или единичка. Вот только почему-то чем дальше, тем логические колонки становятся короче. В первой, например, сотни тысяч записей, сделанных суммарно за 20 секунд, а в последней — только 11. Не 11 тысяч, нет. Просто 11.

Начали смотреть файл ещё внимательнее. Замечаем, что значение каждой логической линии всё время чередуется — то ноль, то единица, потом снова ноль. Предполагаем сразу, конечно, что записывали только изменения значения. Это объясняет и то, почему значений для последней линии так мало: видимо, значение на ней редко менялось. Но почему значение на первой линии так часто меняется? Посчитали — получается около 15 000 раз в секунду. Не может же быть, что кто-то так быстро нажимал на клавиатуре кнопки? Хм, а, может, это тот самый strobe encoding?..

Окей, пока все равно почти ничего не понятно, изучаем файл дальше. Замечаем, что если первая цифровая линия меняет своё значение 15 000 раз в секунду, то вторая — ровно в два раза реже. Удивительно, но третья — ещё в два раза реже! Подозрительно, но всё ещё непонятно :)

Чтоб вы понимали накал страстей: в этот момент мы даже покушали — настолько всё было непонятно!

А после обеда наткнулись на отсканированную версию документации по этим чипам от самой Atari (с грифом CONFIDENTIAL!). Обязательно перейдите по ссылке и полистайте её. С высоты сегодняшних технологий это кажется невероятным трудом:

Ох уж эти написанные на печатной машинке тексты и нарисованные от руки схемы... От них прямо пахнет чем-то волшебным.

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

Что тут написано: во-первых, линии K0—K5 действительно передают скан-код нажатой клавиши. Брать эти биты надо с отрицанием. В википедии тоже что-то подобное было написано, правда, почему-то отрицание навешано только на K0, K1, K2 и K5:

Интересно, как на самом деле?

Дальше написано, что внутри чипа POKEY, который уже успел стать нам родным, есть 6-битный счётчик, 6-битный регистр для сравнения, и 8-битный регистр для итогового скан-кода. А дальше идёт абзац, который мы читали (и страдали!) минут двадцать:

Итак, есть некоторый алгоритм для определения, в какой момент сигналы, выставленные на линиях K0—K5, всё-таки являются кодом нажатой клавиши, а когда их не надо слушать. Если отрицание KR1 становится нулём («low» в терминах текста), то значение из счётчика копируется в регистр для сравнения. Дальше происходит некоторая магия для определения того, не было ли это случайностью, и если нажатие клавиши подтверждается на следующем тике, то процессору посылается прерывание, а скан-код нажатой клавиши попадает в специальный регистр. После этого запускается парный алгоритм, не позволяющий создавать прерывания очень-очень часто, пока человек держит кнопку нажатой. На следующей странице пдфки даже есть блок-схема для этого процесса. Мы потратили на неё ещё минут десять:

Окей, но это всё не объясняет, почему у нас значение на линии меняется туда-сюда 15 000 раз за секунду. Ну не нажимают люди так быстро клавиши! Помогла как всегда случайность. Мы нашли ещё одну версию этой документации, причём не только в отсканированном, но и оцифрованном виде: http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm.

Там был весь тот же текст, что мы уже читали, но вдобавок ещё и интересная картинка:

Во-первых, каждая следующая линия меняет своё значение в два раза реже, чем предыдущая. Прямо, как у нас! Во-вторых, минимальный такт равен 1 / 15.7 kHz, то есть такты тикают 15 700 раз в секунду. Прямо, как у нас [2]!

Благодаря этой картинке появилась гипотеза: значения на каналах K0—K5 меняются вне зависимости от того, нажимал ли человек кнопки, причём меняются именно так, как нарисовано на картинке: каждое следующее меняется в два раза реже, чем предыдущее. И именно это — тот самый strobe encoding, а вовсе не линии KR1 и KR2, как было написано в википедии. А вот когда человек нажимает кнопку на клавиатуре, линии K0—K5 выставляются в правильное положение, а на отрицание KR1 подаётся единица (то есть на самом деле на KR1 подаётся ноль).

Ну что ж, осталось написать код:

def run():
    time = 0
    last_kr1 = 0
    last_scancode = 0
    answer = ''
    while time < 20:
        values = get_values(time)
        kr1, kr2, scancode = parse_values(values)
        if last_kr1 == 0 and kr1 == 1:
            if last_scancode != scancode:
                print(f'Current time is {time}, values are {values}')
                print(f'kr1 = {kr1}, kr2 = {kr2}, scancode = {scancode}, char = {SCANCODES[scancode]}')
                answer += SCANCODES[scancode]
            last_scancode = scancode
        last_kr1 = kr1
        time += HSYNC
    print(answer)

В этом коде мы ловим момент, когда отрицание KR1 изменилось с нуля на единицу и выхватываем скан-код, посчитанный из значений K0—K5. Некоторые символы дублировались, потому что по-хорошему надо было реализовать ту самую логику, описанную в пдфке, но это слишком сложно :) Так что просто запоминаем последний скан-код и не повторяем его, если он случился снова.

Вот только где взять таблицу скан-кодов и символов (словарь SCANCODES в коде)? В пдфке её почему-то не было. Зато нужная табличка (как всегда) нашлась где-то в закромах интернета: https://atariwiki.org/wiki/Wiki.jsp?page=KBCODE

Остаётся только перебить его в наше решение, запустить и получить ответ: «FLAG; 8-BIT-HARDWARE-KEYLOGER{CR}». Отправляем, и-и-и, ..., неправильно :( Да ладно, не может быть, фраза-то читаемая получилась. Замечаем одну G в KEYLOGGER и понимаем, что наш алгоритм в данном случае зря выкинул повторение :) Возвращаем вторую G и сдаём ответ.

Полный код решения можно найти на гитхабе.

P.S. Всё-таки оригинальная пдфка была права: надо брать отрицания ко всем линиям, в том числе и к K3, и к K4. А википедия не права.

 1 комментарий    2685   2018   atari   CTF   writeup

Заметка семнадцатая. Переменная users_ids

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

В моём коде часто можно встретить переменную users_ids. В ней, очевидно, я храню айдишники пользователей. Неважно, каких именно: каких-нибудь пользователей, которые интересуют меня прямо сейчас. И у меня никогда не было сомнений, что я называю эту переменную правильно. Пока Тёма не сказал, что носители языка называют её не users_ids, а user_ids.

Вот несколько доказательств:

  1. тред на стековерфлоу;
  2. поиск по гитхабу: user_ids встречается более 400 000 раз, а users_ids — только 5000;
  3. в гугле за редким исключением все пишут user_ids или userIds, но никак не users_ids и не usersIds.

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

И теперь у меня большая проблема.

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

group_members — это участники группы
groups_members — это участники нескольких групп
course_groups — группы внутри одного курса
courses_groups — группы нескольких курсов
course_group_members — участники группы курса
course_groups_members — участники, например, всех групп курса
courses_groups_members — все участники вообще всех групп всех курсов

Смотрите, сколько дополнительной семантики добавляет маленькая буква s в имя переменной! Надо лишь позволить себе забить на лингвистическую некорректность...

И вот как дальше жить? Страдать, но писать правильно, или переубеждать весь остальной мир?

Заметка шестнадцатая. Первая половина дня

Часто слышу про мистическую «первую половину дня». Мол, позвоню в первой половине дня.

Вы удивитесь, насколько разными будут ответы, если поспрашивать окружающих, когда заканчивается эта самая первая половина дня. Кто-то скажет «до полудня», кто-то «примерно до двух» или «около часа дня», кто-то — «до обеда». И в этом первая проблема этого выражения: если вы договоритесь на «первую половину дня», то вы не сможете быть уверены, что вас поняли верно.

Но главная проблема здесь в другом: эти варианты не выдерживают никакой логической критики. Да, 12 часов — это действительно близко к середине солнечного дня: до этого момента и после него солнце светит примерно одинаковое время. Но вот уже несколько столетий, с момента изобретения свечей и электричества, мы не живём солнечным днём. Мы ложимся позже заката, а встаём далеко не с рассветом.

Вот, например, я. В обычный будний день я встаю около десяти часов. Да, позже, чем многие, но и ложусь я позже большинства, так что всё честно. Получается, что если мне надо сделать что-то в первой половине дня, то у меня есть на это 2 часа. Вторая половина дня при этом будет длиться раз в 5—6 больше. Какие же тогда это половины?

Окей, когда я учился в университете, я был храбрее: вставал аж в 8 утра. Учёба начиналась в 9. Это что же, в три часа я должен был освобождаться с учёбы, а в четыре идти спать? Нет же, опять вторая «половина» оказывалась на порядок больше первой.

Некоторые говорят, что у них всё сходится. Мол, если вы работаете с 8 до 16, то в полдень наступает ровно середина рабочего дня. Но ау, очнитесь! Рабочего дня, а не дня вообще. Чтобы полдень стал серединой вашего дня, надо лечь в восемь вечера и встать в четыре. Вряд ли вы так делаете, да ведь?

Как полечить эту проблему? Очень просто. Просто не используйте словосочетание «первая половина дня», когда договариваетесь с кем-то о времени. Говорите точно: «зайди ко мне до двух часов, пожалуйста». Или «я позвоню после полудня». Так будет легче всем: и вам, и тому, с кем вы договариваетесь :-)

И да, говорить о второй половине дня настолько же ошибочно, как и о первой. Ведь если неизвестно, когда заканчивается первая, то когда тогда начинается вторая?

 Нет комментариев    9040   2018  

Заметка пятнадцатая. Китайский интернет

Все знают, что интернет в Китае находится за великим файрволом. Его основная задача — защищать китайцев от информации, порочащей страну и коммунистическую партию.

Все гугловые сервисы здесь не работают: начиная от интернационального поиска, заканчивая ютубом. Единственный работающий сервис от гугла — это пуши в андроид, они нормально приходят. Не работает даже Play Market, так что поставить приложение можно только из сторонних маркетов. Наверно, именно поэтому свой есть и у самсунга, и у местного Xiaomi.

Гугл сделал для Китая специальную версию своего поиска www.google.cn, она работает только по HTTP и фильтрует результаты поиска по специальным правилам. Воспользоваться ей у меня, правда, почему-то не получилось: любой клик редиректит на www.google.com.hk, который недоступен.

Другие крупные западные поисковики тоже, говорят, фильтруют результаты специально для Китая. У Bing’а даже китайский интерфейс есть:

У Yahoo открывается английский интерфейс, и даже по HTTPS, однако особой фильтрации не замечено: если поискать в нём «Tiananmen Square protests of 1989» (большой протест, о котором китайские власти хотят поскорее забыть), то найдётся миллион результатов, а ещё и видео предложат посмотреть. Также мне удалось поискать в нём 民主 («демократия») — одно из ключевых слов, заблокированных в китайском интернете полностью.

Не работает здесь и фейсбук, а вместе с ним и инстаграм. А ещё твиттер. Все эти западные сервисы считаются вредными для рядовых китайцев. Забавно, что при этом в твиттере есть достаточно много верифицированных китайских аккаунтов. Вот, например, BBC Chinese:

Яндекс и все его сервисы доступны. Правда, работают они здесь достаточно медленно. По сравнению с местными сервисами вроде главного поисковика Китая Baidu — и вовсе невозможно по-черепашьи. Утром выход в европейский интернет работает шустрее (в Европе в это время ночь), вечером — заметно медленнее, одна страница может загружаться 20—60 секунд. В общем как через edge-интернет :-)

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

Энтузиасты постарались собрать полный список заблокированных сайтов энтузиасты вот здесь: https://enterchina.ru/blog/cenzura-v-kitae-zolotoy-schit-ili-velikiy-kitayskiy-fayrvol/.

Естественно, все эти ограничения можно обойти с помощью VPN. До поездки в Китай я читал, что «Золотой щит», как ещё называют Великий файрвол, умудряется блокировать и VPN, но это не совсем подтвердилось: я спокойно подключился сначала по OpenVPN к работе, потом к университету, а затем с помощью заранее установленного Opera VPN вышел в свободный интернет с телефона.

Эппловский App Store работает, из него можно поставить приложения для ютуба или тот же Opera VPN. Первое не заработает по понятным причинам, а вот почему мне не удалось подключиться с айпада к Opera VPN, я не понимаю. Интересно, что десктопная опера с включённой встроенной опцией VPN выйти в интернет тоже не может.

Вообще, надо сказать, в Китае к айфонам относятся в некотором смысле лучше, чем к андроидам, хотя последних тут и значительно больше. На тех немногих кассах, где принимают карты Union Pay (национальная платёжная система), часто принимают и Apple Pay. О Google Pay или Samsung Pay никто не знает. Картами Visa и MasterCard нам тоже ни разу не удалось расплатиться.

Эппл-карты здесь тоже показали себя лучше остальных: они прорисованы на порядок лучше, чем MAPS.ME или гугловые. Вот только они, к сожалению, не работают в оффлайне.

VPN до Европы работает, конечно, небыстро. Фоточки в инстаграме грузятся от 20 до 60 секунд (утром — меньше, вечером — больше), твиттер лучше читать вовсе без фотографий, иначе устанешь ждать. При активном сёрфинге скорость составляет примерно мегабайт в минуту:

Из приятного для русских туристов: работают вконтакте и телеграм. Правда, не без сюрпризов. Например, у вконтакте работает приложение и десктопная веб-версия, но не работает m.vk.com. В целом не беда — с компьютера сидишь в десктопной версии, с телефона — через приложение. Но вот когда переходишь из приложения по любой ссылке, оно сначала перенаправляет тебя на m.vk.com/away.php, что ломает весь процесс, а ссылка в итоге не открывается. Помогает долгое нажатие на ссылку и выбор в контекстном меню Copy link вместо Open link. Правда, в приложении под андроид это работает не всегда: если ссылка вставлена не в текст поста, а как красивое превью, то контекстного меню не дождёшься. Придётся страдать.

Ну и видяшки из ленты не посмотреть — либо ютуб не загрузится, либо скорости не хватит :-)

Ещё из интересного: Amazon AWS при заходе на свой сайт предлагает перейти на специальную китайскую версию, «оптимизированную» для местного интернета:

Кстати говоря, технологически Китай развит хорошо (вот только его технологии сильно изолированы от остального мира). Из многих забегаловок можно заказать еду через приложения. Uber не работает, но вместо него есть местные уберозаменители. Все китайцы гоняют со смартфонами и общаются через мессенджеры — в основном через WeChat. Общаются, кстати, часто аудио-сообщениям, а не текстовыми: видимо, набирать иероглифы на телефоне малоприятная штука.

Заметка четырнадцатая. Где я?

Вот уже неделю я гуляю по Санье. В заметке из первого дня обещал рассказать про наш отель.

Называется он Yuhai International Resort. На территории отеля находится пять жилых зданий и небольшой парк.

Листайте фотки. Их там почти везде по несколько.

Вход в отель, жилой корпус и вид на парк с 12 этажа

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

Бассейн с сюрпризом, да:

Этаж жилого здания выглядит вот так:

Забавно, как пронумерованы номера:

Во-первых, для номеров с 1 по 9 этаж в начало добавляется цифра 8. Как я уже писал, 8 — счастливая и очень любимая цифра у китайцев, поэтому номер 8103 выглядит куда лучше, чем просто 103. Есть и обратная сторона у этой медали. Цифра 4 считается несчастливой: её иероглиф 四 звучит как sì, что созвучно иероглифу 死 (sǐ), означающему смерть. И это не просто примета, к ней в Восточной Азии относятся очень серьёзно. В гостиницах и больницах Китая, Японии и Кореи редко бывают, например, четвёртые этажи, а автомобильные номера, заканчивающиеся на 4, запрещены в Пекине как несчастливые. У этого даже есть название — тетрафобия.

Так вот, в нашем отеле есть четвёртый этаж, но на всех остальных нет номеров с цифрой 4: после нашего 8103 идёт 8105, а после 8113 сразу 8115.

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

По телевизору здесь показывают только китайские каналы — CCTV 1, CCTV 2, CCTV 3, CCTV 4 и так далее. С фантазией на названия телеканалов у них не очень, да (на самом деле это China Central Television — государственное и основное телевидение в Китае). Всё, естественно, по-китайски, но часто с субтитрами. Китайскими :-)

Номер полутороэтажный, на втором маленьком этаже расположились шкаф и кровать:

Вид со второго этажа

Правда, потолок на втором этаже такой низкий, что несмотря на предупредительную надпись, я все равно несколько раз больно ударился головой :-)

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

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

В отеле есть два небольших магазинчика: один с сувенирами, чипсами и напитками, а другой со свежими фруктами.

Магазинчик в отеле

На территории отеля есть два салона свадебных фотосессий. Здесь это не странно — для китайцев свадебная фотосессия чуть ли не важнее самой свадьбы. Фотосессия по времени может занимать целый месяц, фотографируют молодожён в красивых отелях, на лодочках в прудиках и на фоне ярких пальм и деревьев. Стоимость такой фотосессии спокойно может достигать 20 000 юаней (около 180 000 рублей по текущему курсу), что для среднего китайца очень много, но не сделать до или после свадьбы фотосессию считается неприемлимым. Салоны же занимаются организацией таких фотосессий от и до — дают машины, фотографов, осветителей, подбирают платья для невесты и вообще всю одежду молодожён.

Завтрак. Завтрак здесь просто прекрасный — огромный шведский стол, где можно поесть и в привычном нам западном стиле (яичница с беконом, салаты, тосты с маслом), и в традиционном китайском. Из приборов есть и вилки с ножами, и палочки. Для сравнения в китайских забегаловках вилку с ножом вам в большинстве случае никто не даст. Мой личный фаворит здесь — свежевыжатый клубничный сок.

В комнате есть небольшой столик типа кухонного, над ним даже есть вытяжка:

Вот только плиты под вытяжкой нет. Да и готовить самими в отеле нельзя 6-)

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

В Санье сейчас рано и быстро темнеет — примерно в 6:30—6:40. После этого в отеле начинается вечерняя жизнь: в ресторане подают барбекю из морепродуктов (за дорого, но один раз можно сходить бесплатно), а в беседке около бассейна поёт местный музыкант. Каждый день один и тот же, что немного надоедает, надо сказать. Но поёт, вроде, неплохо. В 9 часов песни и танцы заканчиваются, в 10 закрывается ресторан, и в 11 отель как будто вымирает. Зато с 12 этажа открывается отличный ночной вид:

(простите за качество)

По вечерам нас иногда доставали какие-то кровососущие насекомые, но выдаваемые фумигатор и закрытый балкон спасают от них хорошо. Днём же никто не кусает :-)

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

Заметка тринадцатая. Больше фактов о Китае!

Продолжаю список любознательных фактов о Китае, Хайнане и Санье.

23. Остров Хайнань считается местом элитного отдыха для китайцев. Приехать сюда означает показать свой статус. Тем не менее, на этом элитном острове есть супер-элитный островок. Называется он Феникс, на него нельзя пройти или проехать обычным смертным: на входе охрана попросит документ, подтверждающий владение недвижимостью на острове или проживание в семизвёздочном отеле там же. Да-да, именно семизвёздочном. До сегодняшнего дня я считал, что больше пяти звёзд не бывает, а оказывается, в мире есть какое-то количество аж-семизвёздочных отелей.

24. С одной стороны к острову Фениксу подплывают огромные белые лайнеры, а с другой — яхты богатых постояльцев. Выглядит это как-то так (фотка из интернета):

25. После того, как остров Хайнань объявили курортной зоной, сюда начали ездить русские и обеспеченные китайцы. Местных здесь сейчас только 20%, а всего — где-то 700 000 человек. Для Китая это очень мало: скорее большая деревня, а не город.

26. Русских, особенно незагорелых, автоматически считают богатыми. Во-первых, потому что иностранцы. Во-вторых, потому что белая кожа в Китая — признак большого дохода. На улице обычные китайцы могут подойти и попросить сфотографироваться с вами. У многих туристов считается нормальным попросить за это деньги: за фото с белым европейцем китайцы готовы отдать 20 юаней, за видео — 100—150.

27. Если китайцы не готовы фотографироваться с вами, они попробуют вас снять на видео исподтишка. Полученное видео они выложат на местный ютуб, где активно соберут лайки. Вообще у китайцев очень принято хвастаться, особенно своим богатством, дорогими покупками или связями, таков уж менталитет. На недавно купленный автомобиль вешают красную ленточку, чтобы все знали — машина новая. А через несколько месяцев ленточку снимают и вешают новую такую же. Чтобы все вокруг продолжали завидовать, что у вас новая машина. Так может продолжаться 2—3 года, пока не надоест.

28. Так как белая кожа — признак финансовой успешности, китайцы стараются максимально не загореть. Для этого, как нам объяснили, и нужны те самые маски на лицо, а также странные перчатки-прихватки, приделанные к рулю скутеров:

29. Раз уж мы заговорили о скутерах: сегодня выяснилось, что большинство из них — электрические. Это всё из-за экологии: очень уж хотят хайнаньцы сохранить свой чистый воздух. На материковом Китае с этим действительно очень много проблем: там вечный смог, а в последние годы даже увеличилась вероятность онкологических заболеваний среди школьников. Электрические автомобили здесь тоже популярны. Говорят, нередко можно встретить Теслу, а по городу расставлены заправки для неё. Мы, правда, так ни одной пока и не встретили.

30. Как я уже писал в прошлой заметке, на дорогах творится полный ад: каждый ходит и ездит так, как ему хочется. Могут ехать по встречке, на красный свет, резво пересекать двойную сплошную. Но есть одно правило, которое здесь соблюдают все: ограничение скорости в 60 км/ч. За исполнением этого правила следят, в том числе, полуавтоматические камеры на перекрёстках.

31. Из-за действующего в последние десятилетия налога на второго ребёнка, молодых мужчин сейчас в стране намного больше, чем женщин (матери часто делали аборт, узнав, что планируется дочь, а не сын). Из-за этого по салонам красоты в основном ходят мужчины: хотят понравиться девушкам :-) Бум барбершопов тоже не обошёл Санью стороной: в городе мы видели несколько вполне себе хипстерских заведений.

32. Кстати, как выяснилось, в прошлом году налог на второго ребёнка отменили. Как раз из-за этой демографической проблемы.

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

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

35. 80% чая, выращенного на острове, поставляется в компартию Китая. Слишком уж он тут хороший из-за опять же хорошей экологии.

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

36. Школьники в Китае учатся очень много, по 12 часов в день. Начинают 8 утра, а некоторые и вовсе в 6:30. Сначала идут важные уроки: математика, язык, физика, ... С 12 до 14 часов перерыв на обед и сон — это вообще общекитайская (или общехайнаньская?) традиция отдыхать в это время. После 14 часов идут не такие важные предметы: например, рисование, физкультура и музыка. А ещё после этого дети идут на факультативы.

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

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

38. Мало- и среднеобеспеченные китайцы, кстати, любят не очень сильные тайфуны. Это повод не ходить на работу 2—4 дня, ничего не объясняя начальнику.

39. В Южно-Китайском море водятся странные дельфины-наркоманы. Они кусают ядовитую рыбу фугу, чтобы испытать от боли кайф. Больше такого поведения учёные ни за какими дельфинами не замечали.

40. Акулы (практически) никогда не спят.

41. Почти во всех странах мира запрещено вылавливать акул. Разрешено только в Китае, Японии и Австралии.

42. Чтобы сделать полуторокилограммовое шёлковое одеяло, нужно, чтобы 4000 шелкопрядов соткали свои коконы. Это реально много.

43. В каждом кушательном заведении обязательно висит лицензия и выданный государством уровень чистоты еды: A, B или C. Уровень A — это дорогие рестораны, гарантирующие чистоту и стерильность кухни и всего процесса приготовления блюда. Уровень C — китайские забегаловки с известными уровнем антисанитарии (хотя, говорят, почти никто никогда не травится). Вчера мы кушали в забегаловке с уровнем C, пол-литра колы стоит там 3 юаня. Сегодня мы с экскурсией обедали в «Утке по-пекински» — ресторане китайской кухни для русских. Баночка колы 0,33 л стоит там 8 юаней.

Мой обед с забегаловке уровня C

44. Вообще зарплата на острове в туристический сезон (а это почти весь год, кроме лета) примерно 5000—10 000 юаней. На материковой части Китая средняя зарплата составляет 3000 юаней (около 26 000 рублей). С такой зарплатой приехать с семьёй отдохнуть на Хайнань действительно сложновато.

45. До того, как остров стал туристическим, он был военным. В городе и в лесу располагается большое количество военных баз. 90% из них засекречены, никто даже не знает, где они. На всякий случай военные базы в городе советуют не фотографировать — могут увести на неприятную беседу.

46. Цена фруктов здесь указывается на полкилограмма. Почему так принято — загадка, даже средний манго весит больше, около 700—900 граммов.

47. Шоколада здесь почти нет. В магазинах, по крайней мере, он не продаётся. Зато других сладостей очень много, в основном их делают из кокоса или манго, их тут завались. А сегодня мы ели и вовсе конфеты из мяса акулы.

48. Молочный улун, который подают в российских кафе и ресторанах, по вкусу очень сильно отличается от настоящего китайского молочного улуна :-)

49. Иероглиф 三 означает одновременно и «три», и «больше двух; несколько; много». Так что шутка про «раз, два, много» здесь как нигде актуальна.

Бонус для тех, кто дочитал или доскроллил до конца. Я на самой высокой точке города Санья.

Заметка двенадцатая. Факты о Китае, Хайнане и Санье

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

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

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

3. Из-за этого во всех домах в Санье стоят решётки на окнах. Не только на первом и последнем этажах, как это бывает у нас, а на всех:

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

4. (Не знал только я, но) плоды кокоса вовсе не волосатые, а гладкие и большие. У них толстая зелёная кожура толщиной 4—5 см. То, что мы видим в России — это плоды кокоса уже без внешней кожуры, только в очень твёрдой внутренней.

5. Немного рекордов: Санья-бай, недалеко от которой мы живём, является самой длинной бухтой в Азии. Её протяжённость составляет 22 километра.

6. На острове располагается и самая длинная подвесная канатная дорога в Азии, она ведёт с острова Хайнань на остров обезьян. На этом острове находится парк, в котором обитают 2000 макак. Кстати, провинившихся обезьян сажают в своеобразную тюрьму на 2—3 дня. Обезьяна может попасть туда, если украдёт у посетителя очки, деньги или кока-колу. Происходит это с ними, как выяснилось, нередко :-). Поеду в парк обезьян через пару дней, посмотрю на них тогда сам.

7. Саньянцы хвастаются тем, что их город занимает второе место в мире после Гаваны по чистоте воздуха. Но, надо сказать, ни убедительных подтверждений этого в интернете, ни супер-чистого воздуха в городе я не заметил. Более того, водители многочисленных мопедов часто ездят по городу в масках — кажется, чтобы не дышать грязью.

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

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

10. У каждой провинции в Китае есть иероглиф, которым помечаются автомобильные номера. У Хайнань это иероглиф, означающий «жемчуг», так как остров славится своим жемчугом.

11. В китайском макдональдсе продают совсем не то, что в наших. Меню различается минимум на 50%:

12. Кстати, расплатиться в китайском макдональдсе карточкой у меня не получилось — здесь принимают только карты UnionPay (национальная платёжная система), Apple Pay, Alipay и ещё какие-то китайские электронные способы оплаты. Карточкой виза или мастеркард расплатиться пока не удалось нигде.

13. Несмотря на то, что мы находимся на 19° северной широты, здесь очень рано темнеет: в семь вечера уже наступает ночь. Я знал, что на экваторе темнеет очень быстро, но почему так рано — для меня до сих пор загадка.

14. Не все китайцы узкоглазые. Большинство хайнаньцев имеют обычный разрез глаз.

15. В остальном же китайцы, которых мы увидели в городе, достаточно стереотипны и именно такие, какими я их представлял: и внешне, и по поведению. Невысокие, очень стройные (полных китайцев, кажется, вообще не бывает), одеваются, как в Европе, хотя в некоторых местах можно встретить и людей в национальной одежде. Почти у всех в руках лопатовидные смартфоны. На улицах очень много людей и днём, и вечером, большинство перемещается по городу на мопедах и скутерах, реже на велосипедах. На одном мопеде иногда может сидеть до четырёх человек. Нередко мы видели, как китайцы прикрепили к своему скутеру тележку с какими-то (кажется) бытовыми отходами и куда-то их неспеша везут. Там и трубы ржавые, и дощечки с гвоздями, и мешки с мусором. Куда и зачем они это всё так старательно везут — загадка.

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

17. Туризм начал процветать в Санье только в 1995 году. До этого это был не город, а большая деревня, в ней даже не было светофоров. Поэтому большинство ныне живущих здесь китайцев не изучали в школе ПДД. И это заметно: они переходят дорогу и ездят на красный свет. Мопеды и машины всё время гоняют по тротуарам и бибикают пешеходам, чтобы те их пропустили. При переходе дороги на зелёный свет приходится выставлять в сторону руку, чтобы водители тебя не задавили, иначе они спокойно едут прямо на тебя. Во время зелёного света машинам на больших перекрёстах начинается настоящий хаос: все мопеды и автомобили со всех направлений начинают ехать одновременно. Как они при этом не сталкиваются и не убивают друг друга, непонятно до сих пор.

18. Привычного нам хлеба здесь нет. Есть «мягкие французские булочки» (так и называются, да), они похожи на тот хлеб, к которому мы привыкли, только маленького размера. Ещё есть какая-то белая китайская субстанция, по вкусу напоминающая слегка запечённое тесто. Как это называется, я пока не узнал :-)

19. Пляжи здесь восхитительно красивые: чистый песок, пальмы и прозрачная вода. Видимость в воде — от 5 до 35 метров.

20. Горячей воды в кранах здесь нет, по крайней мере в гостинице. Есть холодная и тёплая. В целом это понятно — кто захочет после +31° принимать горячую ванну?

21. RDP во внешний мир без VPN всё-таки не работает :-)

22. Эгея (движок этого блога) плохо работает с длинными списками, внутри которых есть картинки. В заметках работает авто-определение и авто-нумерация списков (как в маркдауне), а после изображения счётчик сбрасывается, и нумерация начинается снова с единицы. Чтобы не разрывать список, мне пришлось прибегнуть к едва незаметной хитрости. Угадайте, какой :-)

И напоследок: за сегодня я выучил, как пишутся три иероглифа: «Китай», «юань» и «курица». Уже неплохо!

Продолжение — в следующей заметке.

Заметка одиннадцатая. Первый день в Китае

Сегодня я прилетел в Китай. Точнее, на Хайнань — остров, расположенный на самом юге Китая, прямо в Южно-Китайском море. Само название Хайнань, кстати, так и переводится: юг моря. Более того, на самом острове я нахожусь тоже на самом юге, в городском округе Санья.

Это ещё не экватор, но уже почти: город находится на 19° северной широты. Сейчас, в середине октября, здесь +31° днём и +26° ночью. Наш самолёт приземлился в аэропорту Феникс за несколько минут до полудня, так что вся жесть погоды почувствовалась сразу: климат здесь жаркий и очень влажный. Я такое переношу с трудом, хотя со временем привыкну, никуда не денусь :-)

К счастью, прямо в аэропорту оказался бесплатный вай-фай, в котором к тому же заработал телеграм. Начитавшись перед поездкой всякого в интернете, я очень обрадовался: при подключении к сети не попросили номера паспорта, а телеграм заработал сам, без настроек каких-нибудь прокси или VPN.

Кроме того, что это моя первая поездка в нероссийскую Азию, это ещё и моя первая поездка по турпутёвке. Так что после досмотров миграционной службы и таможни Китая нас встретили автобусы «Тез Тура». В автобусе был китайский гид, неплохо для китайца говорящий по-русски и представившийся Антоном. Удивительно, сколько внезапной информации он рассказал нам за 20 минут дороги до отеля. Внезапной она оказалась, потому что я думал, что в основном всё знаю: я же готовился к поездке, гуглил, читал отзывы. Гуглить, кстати, непозволительная здесь роскошь — все сервисы гугла недоступны из-за Великого китайского фаервола.

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

Начиная с завтрашнего дня выходить на улицу будет можно, но аккуратно: нам выдадут специальные бумажки, на которых по-китайски будет написано, что мы не заблудившиеся шпионы, а туристы, проживающие в отеле Yuhai International. Эту бумажку надо будет показывать всем заинтересовавшимся полицейским. Кроме того, несмотря на то, что Санья — туристическая зона, некоторые места, насколько я понял, не рекомендованы к посещению туристами. Об этом мы подробнее узнаем завтра.

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

Отель, в котором мы живём, — это пять 12-этажных зданий, между которыми находится небольшой парк. В парке растут пальмы (они здесь вообще повсюду), есть прудик с большой надувной уточкой и средних размеров бассейн. Ещё здесь есть термальный источник, одно посещение которого нам подарили при заселении в отель.

Снаружи гостиница выглядит достаточно прилично и современно. Однако внутри всё больше похоже на советский пансионат: достаточно старые деревянные тумбочки и стол, металлические, окрашенные простой белой краской, перила у лестниц, достаточно замызганный кафель на полу. Наш номер — полутороэтажный, на первом этаже большая и достаточно пустая комната-студия, а на втором — маленькая комнатка с низкими потолками, одним шкафом и кроватью. В целом придраться по-крупному, кажется, не к чему, с другой стороны трёхзвёздочный отель в Ханты-Мансийск даст фору этому пятизвёздочному.

Вот фотография номера нашего отеля из интернета:

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

Отдыхающих здесь, кстати, пополам: примерно половина русских и половина китайцев. Я когда-то читал, что в туристических зонах Китая есть места, куда не допускают обычных жителей страны: мол, там и магазины лучше, и здания красивее. Либо здесь это не так, либо у нас 300 подсадных китайцев — живут в отеле, чтобы создать иллюзию, что им тоже можно.

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

По фотографии сложно догадаться, что именно я ел, но это была свинина в красном кисло-сладком соусе. Да, инстаграм тут не работает, так что терпите фотографии еды в блоге, пожалуйста.

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

Несмотря на то, что карточкой в ресторане расплатиться не получилось, его всё-таки можно считать достаточно продвинутым: там есть вай-фай. С паролем из восьми восьмёрок, кстати, что само по себе символично: 8 — самая счастливая цифра для китайцев. Интересно устроен и вай-фай в отеле: в каждом номере стоит своя точка доступа, но пароль ко всем одинаковый — yhgj8888. Да, опять восьмёрки! Это достаточно удобно: гуляя по парку я уже подключился к нескольким точкам других комнат, чтобы не терять доступ в интернет.

Кроме восьмёрок китайцы поклоняются чёрной черепахе, зелёному дракону, красному фениксу и белому тигру. Эти животные символизируют четыре стихии, четыре стороны света и четыре времени года. Ах да, ещё четыре — это половина от восьмёрки :-) Драконов и тигров мы пока вообще не видели, а вот каменных черепах здесь очень много. Первые мы увидели сразу как вышли из самолёта в аэропорту Феникс. Ещё несколько довольно крупных украшают бортики бассейна в парке отеля.

В следующих заметках расскажу отдельно о нашем отеле (спойлер: в 23:00 почти все спят, а с балкона 12 этажа в это время открывается отличный вид на ночной прибрежный город) и об интернете (гугл, ютуб, фейсбук и инстаграм не работают, но это легко обходится Opera VPN или RDP во внешний мир). Ну и о наших похождениях по острову Хайнань тоже расскажу. Если нам вернут паспорта, конечно.

Заметка десятая. Письмо преподавателям ЛКШ

В чате преподавателей ЛКШ возникла непростая дискуссия сразу о многом. О том, почему некоторые правила, установленные для всех, иногда нарушаются (простой пример: у параллели промышленного программирования P есть доступ в интернет, а у других школьников нет). А ещё о том, что должны отвечать преподаватели школьникам на сложные вопросы: «Нужно ли высшее образование?» и какой образ жизни должны культивировать и пропагандировать преподаватели.

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

Итак...

«Большое пространное сообщение про пропаганду, внушение, позицию и непоощрение разговоров. А ещё про единство правил для всех. Всё, естественно, моё личное мнение.

Вкратце: лучше не пропагандировать ничего школьникам, ничего им не внушать и не уходить от разговоров, которые вы не поощряете.

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

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

Самый лучший выход — это забыть о пропаганде и о том, что вы вообще должны как-то влиять на детей. Просто будьте собой, как бы банально это ни звучало. Будьте таким, какой вы есть, и этот естественный пример сработает лучше всего. Та масса мероприятий, которая существует в ЛКШ помимо ежедневной учёбы — спорт, спецкурсы, клубы, спектакли и вечерние мероприятия, — это площадка для вас, чтобы показать школьникам, чем интересным, кроме программирования, можно заниматься в жизни. Относитесь к этому как к плацдарму для реализации пропаганды через пример, но не стоит об этом так думать — в большинстве случае просто делайте то, что вам хочется. Максимально свободно и, возможно, очень по-разному.

Этим, на мой взгляд, ЛКШ отличается от десятка мест, где учат алгоритмам и программированию. Посмотрите вокруг — сильные олимпиадные школьники участвуют в 5—10 сборах и школах за один учебный год. Кроме этого, у них есть онлайн-курсы, учебники, кружки и многое другое. Я не говорю, что это плохо (как и не говорю, что хорошо), но если мы хотим чем-то отличаться, то насыщенная и захватывающая внеучебная жизнь
— это то, что надо. Причём не выстраданная внеучебная жизнь, как это бывает в некоторых лагерях, когда по плану нужно провести определённые мероприятия, а очень естественная и органичная внеучебная жизнь, которую делают преподаватели. Именно преподаватели, то есть те же люди, что мастерски объясняют алгоритмы на лекциях, те же люди, что выигрывали топовые олимпиады (к которым стремятся школьники), и те же люди, что работают в топовых компаниях в России или за границей (и куда мечтают попасть школьники). Это всё делает возможным передачу опыта и личного примера от преподавателей детям (и, кстати, между преподавателями тоже).

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

Есть куча вопросов, на которые не существует правильного ответа, но о которых вас с большой вероятностью спросит школьник в ЛКШ. Это и вопрос необходимости учёбы в вузе, и ранний выход на работу (на 2—3 курсе, например), и работа за границей. Не уходите от этих разговоров, даже если вы не хотели бы начинать их сами. Школьник задаёт вопрос не просто так, а потому что его интересует ответ. Кроме того, он вам доверяет. Уйдя от разговора или честного ответа, вы, во-первых, потеряете его доверие, а во-вторых, отправите его искать ответ в другом месте — и, кто знает в каком?

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

Вопросы школьников могут касаться и общелкшатских правил: например, зачем нужен зачёт? Почему нельзя выходить за территорию базы и купаться? Почему нельзя дорешивать после ужина? Худшее, что можно ответить на такой вопрос — это „потому что таковы правила ЛКШ“. Это не только ничего не объясняет, но и заставляет думающего ребёнка усомниться в необходимости таких правил и авторитете отвечающего. Более того, если вы так ответили не потому что хотели отмахнуться от надоедливого школьника, но и потому что правда так считаете, то это повод серьёзно задуматься.

У каждого правила должна быть причина его существования. Она является объяснением, почему это правило существует и почему его стоит всем выполнять. Иначе мы получим свод законов вида „здесь так принято“, а это ничем хорошим не заканчивается. Как только причина появляется, её можно обсуждать. Кто-то считает её достаточной для такого правила, кто-то с ними не согласен. Кто-то может считать, что правило нужно сделать строже, кто-то — что мягче. Это нормально, у всех разные взгляды на жизнь. Но бесполезно обсуждать правило само по себе, нужно обсуждать причины, которые обосновывают это правило.

Отсюда же рождаются и исключения из правил. Как только мы понимаем, что причина, лежащая в основе правила, в данном случае не так важна, как обычно, сразу появляется место для исключения. (Если бы мы обсуждали законы в масштабах страны, то исключения, вероятно, были бы невозможны. Но мы говорим о школе на 300 человек, из которых 50 — взрослые люди. Здесь можно и нужно позволить себе больше гибкости).

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

Зачёт в свою очередь нужен, чтобы упорядочить в головах все знания, полученные в авральном режиме за 12—13 учебных дней, и чтобы оценить, насколько эти знания усвоены. Оценка, в частности, нужна, чтобы упростить набор в Зиму и на следующий год. Бывает ли так, что зачёт для кого-то необязателен? Ну да, например, если кто-то сильно заболел, то для него логично сделать исключение — упорядочить в больной голове знания все равно не получится, а их оценка будет скорее бесполезна.

Дорешивать после ужина нельзя, потому что мы хотим собрать школьников на ту самую внеучебную жизнь, о которой я писал выше. Вытащить их на свежий воздух, на интеллектуалку, на спорт или просто прогулку. Это нужно, чтобы ЛКШ не стала местом, где просто готовят к олимпиадам. Нет, ЛКШ — безусловно место, где готовят к олимпиадам (особенно в старших параллелях), но, чтобы отличаться от других таких мест, хочется делать ЛКШ местом, где готовят к олимпиадам И активно проводят свободное время. Поэтому у нас много разных клубов, спортивных и других мероприятий, причём настолько много, что детям иногда приходится выбирать, куда пойти. Об этом всём я уже писал выше.

Вот почему дорешивать после ужина нельзя. Но теперь становится понятно, почему и когда из этого правила могут возникать исключения. Например, когда после ужина идёт какой-нибудь интересный раунд кодефорсеса или топкодера. Мы неоднократно открывали школьникам старших параллелей доступ в интернет и давали право сидеть за ноутами во время раунда, потому что он с точки зрения преподавателей был настолько интересным (= полезным), что пропускать его ради интеллектуалки этим 10—15 школьникам не стоит. Или, например, параллель P. В общем случае на них действуют те же правила, что и на всех: пользоваться ноутбуками после ужина и в выходные нельзя. Но в ситуации, требующей того, нет ничего плохого в исключении для одного школьника, который что-то делает в присутствии преподавателя. Требует ли определенная ситуация этого или? Я оставил бы это на усмотрение преподавателей параллели, которые могут обратиться за советом к завучу или директору, если считают нужным.

Как мы любим в ЛКШ говорить последнее время, во всём этом действуют очень тонкие грани. Грани между предоставлением полной свободы и ограничением формальными правилами, требующими беспрекословного исполнения. И для поиска этой грани я предлагаю использовать синхронизированное понимание причин и умелое использование права на исключение».

Ранее Ctrl + ↓