<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Заметки Андрея Гейна</title>
<link>https://andgein.ru/blog/</link>
<description>Блог Андрея Гейна: заметки о жизни, программировании, преподавании и дизайне</description>
<author></author>
<language>en</language>
<generator>Aegea 11.3 (v4134)</generator>

<itunes:subtitle>Блог Андрея Гейна: заметки о жизни, программировании, преподавании и дизайне</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>I worked at Google for -10 days</title>
<guid isPermaLink="false">22</guid>
<link>https://andgein.ru/blog/all/20-i-worked-at-google-for-10-days/</link>
<pubDate>Fri, 07 Apr 2023 15:14:50 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/20-i-worked-at-google-for-10-days/</comments>
<description>
&lt;p&gt;It’s the story of how I was laid off from Google before I even started to do my job there. I have tried to write only facts, although there is a small hurricane somewhere inside me right now.&lt;/p&gt;
&lt;p&gt;It began nearly a year ago, &lt;b&gt;in April of 2022,&lt;/b&gt; when I applied for multiple SWE and SRE positions at Google. Large tech companies usually have a lengthy hiring process, but I could take it slow. I successfully completed five technical interviews during May and June. However, shortly after that, the company encountered some difficulties due to the global post-COVID crisis, and as a result, HR were unavailable for weeks. I had to be patient.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;In July,&lt;/b&gt; I entered the Team Matching Phase where I had the opportunity to meet with hiring managers. During these meetings, we talked about ourselves, the team, and the project, and ultimately decided whether or not we were a good fit for each other. After attending two meetings, I realised that I wasn’t interested in joining either team at the moment.&lt;/p&gt;
&lt;p&gt;Regrettably, I had to wait a considerable amount of time for the next opportunity. Google had announced an &lt;a href="https://interviewing.io/blog/google-facebook-hiring-freeze"&gt;international hiring freeze&lt;/a&gt;, which essentially halted all interview and job offer processes. The exact extent of the freeze and the regions it affected is unclear, with &lt;a href="https://www.dice.com/career-advice/at-google-the-hiring-freeze-that-wasnt"&gt;contradictory information available online&lt;/a&gt;. Nevertheless, the freeze did affect me: I was assigned to a different HR manager who informed me that “Unfortunately we are not in a position to move forward with your application at this time due to a current slowdown in hiring at Google. Our leaders are taking the next few weeks to review our priorities for the rest of the year and we hope to have an update for you at the beginning of August.”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;At the beginning of August,&lt;/b&gt; things didn’t change a lot (“Unfortunately we still have a pause on hiring and I’m afraid that there have been no further updates from the business side at this point in time.”), and at the end of the month either (“Unfortunately we still haven’t had any news, I’m really sorry that it’s taking longer than initially expected”). It wasn’t until &lt;b&gt;the end of September&lt;/b&gt; that the situation shifted. I received news that my candidacy could be submitted to the Hiring Committee before completing the team matching phase. Nearly six months after submitting my application, I was thrilled to learn on &lt;b&gt;October 11th&lt;/b&gt; that the Hiring Committee had approved me. The next step was to find a team that was willing to bring me on board. Fortunately, a suitable team was found in November. I had a conversation with Tom, the hiring manager, and we hit it off. From there, the process moved forward smoothly.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;On November 17,&lt;/b&gt; my salary was announced and &lt;b&gt;in December&lt;/b&gt;, I received an official offer for a SRE position at Google London. I began preparing for my move by taking an English exam and a mandatory tuberculosis test for Russians working in the UK. After the long New Year holidays, I applied to the visa application center, which took nearly two months to issue the visa. &lt;b&gt;In March,&lt;/b&gt; I quit my previous company, Yandex, to spend the last month preparing for my move to London, which involved vacating my apartment in Yekaterinburg, packing my belongings, and selling some items.&lt;/p&gt;
&lt;p&gt;I had planned to fly out &lt;b&gt;on April 10&lt;/b&gt;, giving myself a week to acclimate and get comfortable before starting work on April 17. However, on the evening of April 6, I received an unexpected email from Liz West, the head of Google Cloud HR in Europe, asking to connect with me regarding “an update on my Google offer”. I chose to connect the following day.&lt;/p&gt;
&lt;p&gt;During the call, Liz West informed me that my contract with Google had been terminated due to a wave of layoffs that began in the United States and now reached Europe and Britain. “Unfortunately”, my position had come under reduction, so I no longer had the job I had been working towards for the past year. Nothing personal, just business.&lt;/p&gt;
&lt;p&gt;This is the official notification that I received after the conversation:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/google-layoff.jpeg" width="800" height="633" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Thus, the contract with me has been terminated 10 days before it was supposed to take effect.&lt;/p&gt;
&lt;p&gt;As for what to do next, I am not entirely sure yet. I held a &lt;a href="https://andgein.ru/garage" class="nu"&gt;“&lt;u&gt;garage sale&lt;/u&gt;”&lt;/a&gt; &lt;i&gt;(in Russian)&lt;/i&gt; and sold most of my belongings. The remaining items were either discarded, recycled, or packed into two suitcases that I had planned to take with me. Moving to a new country is a difficult task that typically requires months of preparation. Changing these plans on the fly is challenging and somewhat painful. However, I feel that I should say something optimistic at the end. All will be good 🙂&lt;/p&gt;
&lt;p&gt;&lt;i&gt;If you would like to speak with me, please send an email to &lt;a href="mailto:andgein@gmail.com"&gt;andgein@gmail.com&lt;/a&gt;, or message me on Telegram &lt;a href="https://t.me/andgein"&gt;@andgein&lt;/a&gt;. Additionally, I would be grateful if you share this story as widely as possible.&lt;/i&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка двадцатая. Как я проработал в гугле -10 дней</title>
<guid isPermaLink="false">21</guid>
<link>https://andgein.ru/blog/all/20-i-worked-at-google-for-10-days-ru/</link>
<pubDate>Fri, 07 Apr 2023 15:09:00 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/20-i-worked-at-google-for-10-days-ru/</comments>
<description>
&lt;p&gt;Это история о том, как меня уволили из Гугла до того, как я успел начать там работать. Я постарался изложить её максимально сухо и на языке фактов, хотя признаюсь честно: внутри меня сейчас бушует небольшой ураган.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Это русская версия поста. Если вы хотите пошарить ссылку, лучше отправлять английскую: &lt;a href="https://andgein.ru/blog/all/20-i-worked-at-google-for-10-days/."&gt;https://andgein.ru/blog/all/20-i-worked-at-google-for-10-days/.&lt;/a&gt; &lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Всё началось почти год назад. &lt;b&gt;В апреле 2022 года&lt;/b&gt; я подал заявку сразу на несколько позиций в Гуглу. Процесс найма в такие крупные IT-компании часто занимает много времени, но и я никуда не торопился. В мае и июне я прошёл пять технических собеседований, но дальше у компании начались проблемы, связанные с всеобщим экономическим пост-ковидным кризисом, и эйчарша стала пропадать неделями. Пришлось запастись терпением.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;В июле&lt;/b&gt; я добрался до Team Matching Phase — это когда тебе устраивают встречи с менеджерами нанимающих команд, ты рассказываешь про себя, они про команду и проект, и вы решаете, нравитесь ли вы друг другу. Мне дважды попались проекты, в которые я не очень хотел, и я решил подождать ещё.&lt;/p&gt;
&lt;p&gt;К сожалению, ждать пришлось долго — Гугл объявил &lt;a href="https://interviewing.io/blog/google-facebook-hiring-freeze"&gt;международный фриз найма&lt;/a&gt;, то есть приостановил все процессы, связанные с собеседованиями и офферами. Насколько обширным был фриз и какие регионы он задел, знают только топ-менеджеры Гугла, в сети информация &lt;a href="https://www.dice.com/career-advice/at-google-the-hiring-freeze-that-wasnt"&gt;противоречивая&lt;/a&gt;. Однако меня фриз задел: меня передали другой эйчарше, которая первым делом объявила, что «Unfortunately we are not in a position to move forward with your application at this time due a current slowdown in hiring at Google. Our leaders are taking the next few weeks to review our priorities for the rest of the year and we hope to have an update for you at the beginning of August.»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;В начале августа&lt;/b&gt; дело не поменялось («Unfortunately we still have a pause on hiring and I’m afraid that there have been no further updates from the business side at this point in time.»), как и в конце («Unfortunately we still haven’t had any news, I’m really sorry that it’s taking longer than initially expected»). Ситуация изменилась только &lt;b&gt;в конце сентября&lt;/b&gt;, когда мне сказали, что мою кандидатуру могут отправить в Hiring Committee до того, как для меня найдётся подходящая команда. &lt;b&gt;11 октября&lt;/b&gt;, спустя почти полгода с подачи заявки, меня обрадовали: Hiring Committee одобрил меня, и нам остаётся только найти команду, которая готова меня взять к себе. Такая команда нашлась в ноябре — я созвонился с Томом, нанимающим менеджером, мы понравились друг другу, и с тех пор процесс сдвинулся с места.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;17 ноября&lt;/b&gt; мне согласовали зарплату, а &lt;b&gt;в декабре&lt;/b&gt; прислали официальный оффер в лондонский Гугл. Я начал готовиться к поездке: сдал экзамен по английскому языке, сдал тест на туберкулёз (обязателен для всех русских, едущих работать в Великобританию). После длинных новогодних праздников подал заявление в визовый центр — визы сейчас выдаются долго, это заняло почти два месяца. Наконец, &lt;b&gt;в марте&lt;/b&gt; я уволился из Яндекса, с моего предыдущего места работы, чтобы последний месяц потратить на подготовку: освобождение квартиры в Екатеринбурге, сбор вещей и закрытие разных дел.&lt;/p&gt;
&lt;p&gt;Я купил билеты на самолёт на &lt;b&gt;10 апреля&lt;/b&gt;, так как мой первый рабочий день был назначен на 17 апреля, и я хотел неделю провести в Великобритании: акклиматизироваться и освоиться.&lt;/p&gt;
&lt;p&gt;Вечером 6 апреля новый для меня человек, Лиза Уэст, руководительница эйчаров Гугл Клауда в Европе, написала мне письмо: «I am reaching out on behalf of Google Recruiting to provide an update regarding your Google offer. Would you have time to connect with me this week (tomorrow) or early next week (Monday)?». В понедельник я был бы уже в Лондоне, поэтому я выбрал tomorrow, то есть пятницу.&lt;/p&gt;
&lt;p&gt;На звонке в пятницу Лиза Уэст сообщила мне, что Гугл разрывает мой контракт. Что мне не нужно ехать в Лондон. Что у меня больше нет работы, к которой я стремился последний год. Причина? Волна увольнений, начатая в январе в США, дошла до Европы и Британии, и моя позиция попала под сокращение. Ничего личного, просто бизнес.&lt;/p&gt;
&lt;p&gt;Вот такое официальное уведомление мне прислали после разговора:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/google-layoff.jpeg" width="800" height="633" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Таким образом, контракт со мной был расторгнут за 10 дней до того, как он должен был начать действовать.&lt;/p&gt;
&lt;p&gt;Что дальше делать? Пока не знаю, если честно. Кучу своих вещей я продал на &lt;a href="https://andgein.ru/garage/"&gt;«гаражной распродаже»&lt;/a&gt;. Остальные выбросил, сдал в переработку или собрал в два чемодана, которые собирался взять с собой. Переезд в другую страну — сложное событие, к которому обычно готовишься месяцами, менять такие планы на ходу очень сложно и достаточно болезненно. Но что-нибудь придумаю 🙂&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Со мной можно связаться &lt;a href="https://t.me/andgein"&gt;в телеграме&lt;/a&gt; или по почте &lt;a href="mailto:andgein@yandex.ru"&gt;andgein@yandex.ru&lt;/a&gt;. Я буду благодарен, если вы репостните эту заметку или её английскую версию: &lt;a href="https://andgein.ru/blog/all/20-i-worked-at-google-for-10-days/."&gt;https://andgein.ru/blog/all/20-i-worked-at-google-for-10-days/.&lt;/a&gt; &lt;/i&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка девятнадцатая. О математике в музыке и докторах философии</title>
<guid isPermaLink="false">20</guid>
<link>https://andgein.ru/blog/all/19-notes-and-math/</link>
<pubDate>Wed, 03 Feb 2021 14:35:35 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/19-notes-and-math/</comments>
<description>
&lt;blockquote&gt;
&lt;p&gt;«У слова &lt;i&gt;тон&lt;/i&gt; значений больше, чем снега в горах.»&lt;br /&gt;
&lt;i&gt;Иоанн де Грокейо&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;script type="text/x-mathjax-config"&gt;
MathJax.Hub.Config({
  tex2jax: {
     inlineMath: [['$','$'], ['\\(','\\)']]
  },
  "HTML-CSS": {
     linebreaks: { automatic: true, width: "75% container" }
   }, 
  "SVG": {
     linebreaks: { automatic: true, width: "75% container" }
   } 
});
&lt;/script&gt;
&lt;script async src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_CHTML'&gt;&lt;/script&gt;
&lt;style&gt;
@media (max-width: 700px) {
  p { overflow-x: scroll; }
}
&lt;/style&gt;
&lt;p&gt;Привет! Сегодня мы поговорим про ноты. Да-да, те самые, которые до-ре-ми-фа-соль-ля-си. Почему в этом ряду их всегда семь? Почему после си снова идёт до, но &lt;i&gt;следующей октавы&lt;/i&gt;? И почему на фортепиано между этим семью белыми нотами есть ещё пять чёрных? Почему их ровно пять, и почему они так странно расположенны?&lt;/p&gt;
&lt;p&gt;Удивительно, но ответы на эти вопросы вы скорее услышите на уроках физики и математики, чем в музыкальной школе.&lt;/p&gt;
&lt;h2&gt;Немножко физики&lt;/h2&gt;
&lt;p&gt;Давайте для начала возьмём обычную акустическую гитару как один из самых наглядных музыкальных инструментов — вы дёргаете за струну, она колеблется, вместе с ней колеблется воздух, и вы слышите &lt;i&gt;ноту&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://andgein.ru/files/blog/19/guitar.gif"&gt;&lt;/p&gt;
&lt;p&gt;Высота услышанной ноты зависит от &lt;b&gt;частоты колебаний струны&lt;/b&gt;, то есть от того, сколько колебаний она успевает сделать за одну секунду. Например, ля первой октавы — это 440 Гц, то есть ровно 440 колебаний в секунду. У низких нот частота меньше, а у высоких — больше.&lt;/p&gt;
&lt;p&gt;В реальности чистого колебания с нужной частотой добиться практически невозможно. Вместо этого колебание струны представляет собой сумму сразу нескольких колебаний — всей струны, двух её половинок с частотой в два раза больше, трёх её третинок с частотой в три раза больше и так далее.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/1988.jpg" width="700" height="665" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Музыканты в этот момент говорят, что звук, который вы слышите, образуется как сумма основного тона (например, ноты ля с частотой 440 Гц) и &lt;i&gt;обертонов&lt;/i&gt; (от немецкого &lt;i&gt;ober&lt;/i&gt; — высокий) — колебаний с частотой 880 Гц, 1320 Гц, 1760 Гц и так далее. Наше ухо воспринимает &lt;a href="https://ru.wikipedia.org/wiki/Натуральный_звукоряд"&gt;такую склейку&lt;/a&gt; позитивно, ведь все встречающиеся в природе звуки образуются ровно таким образом.&lt;/p&gt;
&lt;p&gt;Здесь нам важно запомнить, что с точки зрения нашего уха колебания с частотами $\nu$, $2 \cdot \nu$, $3 \cdot  \nu$, $4 \cdot \nu$ и так далее хорошо сочетаются друг с другом и приятно звучат. При этом частоты соседних колебаний относятся друг к другу как 1 к 2, 2 к 3, 3 к 4 и так далее. Благодаря этому факту  появятся на свет приятные нашему слуху октавы, квинты, кварты и терции, но об этом чуть позже :-)&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/Selection_2021.02.02_20:52:36_01.png" width="966" height="389" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Отдельного внимания заслуживает первый обертон — тот самый, что имеет частоту в два раза больше, чем основной тон. Если взять его за основу и построить обертоны уже к нему, то этот ряд наполовину будет состоять из обертонов его старшего брата. Как следствие, итоговый звук зазвучит в нашем ухе очень похожим образом, хотя и выше.&lt;/p&gt;
&lt;p&gt;Именно поэтому две получившиеся ноты (построенные от частоты $\nu$ с её обертонами и от частоты $2 \cdot \nu$ с её обертонами) решили называть одинаково — и там ля, и тут ля. А чтобы эти ля различать, придумали, собственно, октавы. Нота, построенная на основной частоте 440 Гц — это &lt;i&gt;ля первой октавы&lt;/i&gt;, а на основной частоте 880 Гц — &lt;i&gt;ля второй октавы&lt;/i&gt;. Ля третьей октавы построено уже на 1760 Гц, дальше идёт ля четвёртой октавы и так далее. Октавы ниже первой тоже существуют — ля малой октавы строится на 220 Гц, ля большой — на 110 Гц и так далее.&lt;/p&gt;
&lt;h2&gt;Немножко математики&lt;/h2&gt;
&lt;p&gt;Окей, с октавами разобрались. Но откуда берутся остальные ноты внутри октавы? На самом деле они появляются достаточно естественным образом. Мы только что выяснили, что обертоны для ля первой октавы звучат на частотах 880 Гц, 1320 Гц и 1760 Гц. Про 880 Гц и 1760 Гц нам уже всё понятно — это ля второй и третьей октавы. А вот что такое 1320 Гц? Если частоты нот ля второй и третьей октавы относятся друг к другу как 1 к 2, то частота этой лежащей между ними ноты соотносится с ними как 2 к 3 и 3 к 4 (а $\frac{2}{3} \times \frac{3}{4}$ как раз равно $\frac{1}{2}$ —  радует, что математически мы ещё нигде не ошиблись). Эта промежуточная нота — нота ми. &lt;i&gt;На самом деле это не совсем современная нота ми, но мы об этом поговорим позже.&lt;/i&gt; Пока давайте считать, что это честная ми, образующая &lt;i&gt;квинту&lt;/i&gt; с ля второй октавы и &lt;i&gt;кварту&lt;/i&gt; с ля третьей октавы. Названия «квинта» и «кварта» на самом деле появятся позже, но уже сейчас нам нужно как-то обозначать музыкальные интервалы (промежутки между двумя нотами), вот давайте и воспользуемся правильными названиями: интервал между нотами с соотношением основных частот 2 к 3 будем называть квинтой, а с соотношением 3 к 4 — квартой.&lt;/p&gt;
&lt;p&gt;Получается, что обертоны располагаются следующим образом: первый — через октаву после базового тона, второй — через квинту после первого обертона и третий — через кварту после второго (что то же самое, что через две октавы после базового тона). Ну а дальше аналогично появляются и остальные интервалы — &lt;i&gt;большая терция&lt;/i&gt; (интервал с соотношением частот 4 к 5) и &lt;i&gt;малая терция&lt;/i&gt; (5 к 6). Чтобы можно было сыграть такие интервалы на наших инструментах, внутри октавы появляются и другие ноты.&lt;/p&gt;
&lt;p&gt;Вот только незадача — у музыкантов и математиков никак не получалось выбрать &lt;b&gt;конечное&lt;/b&gt; (и желательно небольшое, конечно) количество нот и расположить их внутри октавы так, чтобы любая пара нот давала один из приятных интервалов, описанных выше, или составлялся из нескольких таких. То там, то сям что-нибудь не клеилось.&lt;/p&gt;
&lt;p&gt;Одной из первых успешных попыток решить эту задачу считают &lt;a href="https://ru.wikipedia.org/wiki/Пифагоров_строй"&gt;Пифагоров строй&lt;/a&gt;. Пифагор расположил семь нот внутри октавы со следующими соотношениями частот между парами соседних нот:&lt;/p&gt;
&lt;p&gt;$$&lt;br /&gt;
\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}&lt;br /&gt;
$$&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;Обратите внимание — в этой последовательности встречается только два интервала — $\frac{8}{9}$, он побольше, и $\frac{243}{256}$, он поменьше (да, чем меньше число, тем больше интервал. Целая октава — это вообще $\frac{1}{2}$, как вы помните). Причём интервал $\frac{243}{256}$ встречается то через два больших интервала, то через три. Прямо как чёрные клавиши на фортепиано ;-)&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Понятно, кстати, откуда здесь взялась дробь $\frac{8}{9}$ — это разность между двумя главными (после октавы, конечно) интервалами: квинтой и квартой.&lt;/p&gt;
&lt;p&gt;$$\frac{2}{3} : \frac{3}{4} = \frac{8}{9}$$&lt;/p&gt;
&lt;p&gt;В Пифагоровом строе не всё гладко — во-первых, эти двести-сорок-три двести-пятьдесят-шестых, которые появились как число, которого не хватало в ряду, чтобы произведение чисел во всём ряду было равно $\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}$.&lt;/p&gt;
&lt;p&gt;Во-вторых, фишкой пифагоровского строя было то, что от любой ноты можно было отложить не только октаву, но и чистую квинту, ведь $\frac{8}{9} \times \frac{8}{9} \times \frac{243}{256} \times \frac{8}{9} = \frac{1}{2}$. Исключение составляла только нота си, от неё квинта не откладывалась.&lt;/p&gt;
&lt;p&gt;Пифагор попытался решить эту проблему добавлением в строй ещё пяти нот, тем самым разбив каждый из интервалов, равных $\frac{8}{9}$, на два более мелких интервала. С математической точки зрения он построил замыкание множества частот относительно операции откладывания квинты (то есть умножения и деления на $\frac{2}{3}$). Квинта от ля — это ми, квинта от ми — это си, но уже следующей октавы. Чтобы «вернуть» си в нашу октавы, просто делим частоту на два и продолжаем.&lt;/p&gt;
&lt;h2&gt;Немножко истории&lt;/h2&gt;
&lt;p&gt;Вы не поверите, но эта система просуществовала &lt;b&gt;на протяжении 12 веков&lt;/b&gt;! Дольше, чем любая другая известная музыкальная система. Вот только музыкантов постоянно бесила так называемая &lt;a href="https://ru.wikipedia.org/wiki/Волчья_квинта"&gt;волчья квинта&lt;/a&gt;. Дело в том, что если в системе Пифагора отложить квинту 12 раз, то мы должны получить исходную ноту, просто на 7 октав выше. Но на самом деле мы получим  чуууть-чуть более высокую ноту, ведь $\left(\frac{3}{2}\right)^{12} \approx 129.746$, что чуть больше, чем $2^7=128$. Накопленную разницу называли &lt;i&gt;пифагорейской коммой&lt;/i&gt;, и чтобы избавиться от неё, частоту какой-нибудь одной ноты немного подкручивали. В итоге одна из квинт внутри октавы получалась короче остальных и звучала абсолютно отвратительно, будто волки воют...&lt;/p&gt;
&lt;p&gt;В итоге музыканты тех времён просто старались не играть смещённую ноту :-). Из-за этого было сложнее менять тональности у произведений, сложнее настраивать инструменты и тяжелее импровизировать. Неудивительно, что рано или поздно кто-то должен был придумать что-то ещё.&lt;/p&gt;
&lt;p&gt;Этим кем-то стал Андреас Веркмейстер. Он сформулировал задачу так. Первое: нужно сохранить в октаве двенадцать традиционно устоявшихся звуков. Всё-таки 12 веков музыкальной истории так просто на помойку не выкинешь. Второе: никакой коммы быть не должно. И третье: все соотношения между соседними частотами должны быть абсолютно равными. Вот это было поистине революционное решение!&lt;/p&gt;
&lt;p&gt;Математически Веркмейстер взял октаву с соотношением 1 к 2 и распределил её поровну между 12 нотами. Если две соседние ноты отличаются по своей частоте в $x$ раз, то $x^{12} = 2$, а значит, $x = \sqrt[^{12}]{2}$, вот и всё.&lt;/p&gt;
&lt;p&gt;Частота ноты до-диез — это частота до, умноженная на $\sqrt[^{12}]{2}$. Частота ноты ре, следующей после до-диеза, это частота до-диеза, умноженная ещё на $\sqrt[^{12}]{2}$. И так далее! Через 12 нот получается идеальная октава.&lt;/p&gt;
&lt;p&gt;Такие образом, Веркмейстер по сути равномерно распределил Пифагорову комму между всеми звуками внутри каждой октавы. Комма рассосалась и стала незаметной. Но досталось это счастье большой ценой: внутри октавы не осталось &lt;b&gt;ни одного чистого интервала&lt;/b&gt;. Даже квинта — интервал, тысячелетиями считавшийся незыблемым — стала чуть короче, теперь она равна не $\frac{2}{3}$, а $\frac{1}{\sqrt[^{12}]{2}^7}$, то есть примерно $0,66742$.&lt;/p&gt;
&lt;p&gt;Многих музыкантов поначалу возмутило предложение Веркмейстера. Однако через 30 лет почти все смирились с компромиссом, потому что разница между чистой настройкой и той, что предложил Веркмейстер, была едва уловимой, а достоинства нового строя постепенно стали очевидными. Исчезла волчья квинта. Стало возможным переходить из тональности в тональность и из мажора в минор как угодно. В ладу (например, в до-мажоре) остались те же семь основных звуков, но теперь лад мог начинаться с любой клавиши, хоть с белой, хоть с черной. Впервые делом доказал это великий Бах, написав цикл произведений для всех двадцати четырех тональностей — двенадцати минорных и двенадцати мажорных. До реформы Веркмейстера такое количество тональностей существовало лишь теоретически, а на практике было невыполнимо, ибо пришлось бы чуть не для каждой из них заново перестраивать инструмент.&lt;/p&gt;
&lt;h2&gt;Вместо заключения&lt;/h2&gt;
&lt;p&gt;Зачем я вам всё это рассказал? Во-первых, это красиво :-)&lt;/p&gt;
&lt;p&gt;Во-вторых, я сейчас всё чаще понимаю, почему раньше существовали только доктора философии вместо современных докторов музыки или докторов математических и физических наук. Смог бы человек без понимания математики или физики придумать ноты? И, может, стоит нашим детям давать побольше кросс-предметных тем, чтобы они понимали, что ни математика, ни музыка, ни любые другие науки не существуют изолированно, друг без друга?&lt;/p&gt;
&lt;h2&gt;Бонус!&lt;/h2&gt;
&lt;p&gt;Первая струна классически настроенной гитары — это ми первой октавы. После этого поста, надеюсь, вы знаете, насколько легко сыграть на гитаре другое ми — ми второй октавы. Достаточно просто пережать первую струну посередине и дёрнуть за неё. Длина колеблющейся струны уменьшится в два раза, частота колебаний от этого увеличится в два раза, а, значит, нота перенесётся ровно на октаву вверх.&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка восемнадцатая. Разбор задания Wired CSV с Google CTF 2018</title>
<guid isPermaLink="false">19</guid>
<link>https://andgein.ru/blog/all/18-wired-csv-writeup/</link>
<pubDate>Fri, 29 Jun 2018 19:37:37 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/18-wired-csv-writeup/</comments>
<description>
&lt;p&gt;Год назад &lt;a href="/blog/all/5-crypto-backdoor-writeup/"&gt;мы играли в Google CTF&lt;/a&gt;. В этом году решили не отставать и снова размяться командой старичков. Вообще мы стали чаще играть в CTF, это меня очень радует.&lt;/p&gt;
&lt;p&gt;Вообще эта заметка не совсем о таске. Ну то есть о нём, да, но ещё и об одной очень важно и простой мысли. Об этом точно знает любой человек, когда-либо игравший в CTF. CTF — это в первую очередь такой способ узнавать о технологиях, окружающих нас, и о том, как они устроены. Студентам я всегда рассказываю, что выходя с соревнования вы должны ощущать, как много нового вы сегодня узнали. Возможно, ничего не решили, да, но зато узнали-то ого-го!&lt;/p&gt;
&lt;p&gt;Так вот о чём это я. Я всегда обходил стороной таски с фотографией каких-нибудь плат и проводов. Я далёк от схемотехники, электричества, да и вообще от физики, так что всегда предпочитал им какие-нибудь более высокоуровневые вещи: типа программирования, веб-безопасности или криптографии. Но рано или поздно это должно было случиться.&lt;/p&gt;
&lt;p&gt;Итак, нам дали картинку подключения... эм... какого-то чипа на... эм... какой-то плате к... эм... какому-то устройству (не очень информативно, да, но вы же помните, что я в этом ничего не понимаю?)&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/wires.jpg" width="1906" height="1164" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Кроме фотографии нам дали 222-мегабайтную CSV-шку: &lt;a href="/files/blog/18/data.7z"&gt;data.7z&lt;/a&gt;. Начало у этой CSV-шки примерно такое:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;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&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Первые полчаса мы занимались двумя вещами: пытались понять, зачем в таблице 9 столбцов со временем, когда можно было сделать один, и гуглили надпись на чипе, к которому подключены клеммы (они же клеммами называются, да?).&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2018-06-29_21-44-58_edited.jpg" width="1181" height="634" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Строчки с маркировки &lt;a href="https://www.google.ru/search?q=ami+8327vt"&gt;гуглятся&lt;/a&gt; &lt;a href="https://www.google.ru/search?q=COI2294b"&gt;плохо&lt;/a&gt;. Спасает запрос «&lt;a href="https://www.google.ru/search?q=chip+ami+8327"&gt;chip ami 8327&lt;/a&gt;», по которому на первом месте выводится страничка «Atari chips». Заодно выясняется, что на чипе написано «CO1», а не «COI», и именно поэтому вторая строчка не гуглилась.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2018-06-29_21-49-26.png" width="929" height="754" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Искомое «CO12294B» на этой странице встречается аж шесть раз, и каждый раз около слова «pokey». Наконец-то можно пойти почитать &lt;a href="https://ru.wikipedia.org/wiki/Atari_POKEY"&gt;википедию&lt;/a&gt; (это мой любимый момент в каждом таске, ведь именно здесь узнаётся столько нового):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Atari POKEY (Pot Keyboard Integrated Circuit) — электронный компонент, специально разработанная фирмой Atari микросхема генерации звука и интерфейса с устройствами управления. Использовалась в 1980-х годах в ряде игровых систем от Atari — бытовых компьютерах, игровых консолях и аркадных игровых автоматах. Название микросхемы составлено из начальных слогов английских слов POtentiometer и KEYboard, так как эта микросхема часто использовалась для опроса клавиатуры и аналоговых устройств управления (типа paddle). Но в основном, POKEY стала известна благодаря своими возможностями генерации звуковых эффектов и музыки, получив своих поклонников, аналогично микросхемам MOS Technology SID и General Instruments AY-3-8910.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Окей, значит, перед нами либо что-то связанное с клавиатурой, либо что-то, издающее звуки. Поехали на английскую википедию: &lt;a href="https://en.wikipedia.org/wiki/POKEY"&gt;https://en.wikipedia.org/wiki/POKEY&lt;/a&gt; (кстати, картинки в обеих википедиях подсказывают, что мы на правильном пути: там нарисованы именно такие чипы, как у нас). В английской википедии есть распиновка чипа, что для нас очень важно, ведь клеммы подсоединены к конкретным выходам, а не ко всем:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2018-06-29_21-54-24.png" width="771" height="546" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Итак, две клеммы подсоединены к 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?&lt;/p&gt;
&lt;p&gt;Тут мы снова почитали википедию (не стыдно не знать! стыдно не хотеть узнать!): &lt;a href="https://en.wikipedia.org/wiki/Data_strobe_encoding."&gt;https://en.wikipedia.org/wiki/Data_strobe_encoding.&lt;/a&gt; Там написано, что strobe encoding добавляет к линии данных ещё одну линию, причём делает так, чтобы XOR значений на двух линиях менялся каждый такт. Это позволяет синхронизировать такты, а также обнаруживать поломки линии. Ну круто, чо. А почему у нас на шесть линий с данными только две линии с этим strobe? Или это не о том?..&lt;/p&gt;
&lt;p&gt;В этом месте мы немного подзастряли, если честно. У нас ведь кроме картинки был ещё 200-мегабайтный CSV-файл с кучей отметок времени, а мы пока за него даже не брались. Поизучаем-ка его более внимательно. Во-первых, кажется, что он состоит из девяти независимых логических колонок: в первой задаётся время и значение (вольтажа?) на двух аналоговых линиях, а в каждой из следующих восьми снова задаётся какое-то время и логическое значение на одной из цифровых линий — нолик или единичка. Вот только почему-то чем дальше, тем логические колонки становятся короче. В первой, например, сотни тысяч записей, сделанных суммарно за 20 секунд, а в последней — только 11. Не 11 тысяч, нет. Просто 11.&lt;/p&gt;
&lt;p&gt;Начали смотреть файл ещё внимательнее. Замечаем, что значение каждой логической линии всё время чередуется — то ноль, то единица, потом снова ноль. Предполагаем сразу, конечно, что записывали только изменения значения. Это объясняет и то, почему значений для последней линии так мало: видимо, значение на ней редко менялось. Но почему значение на первой линии так часто меняется? Посчитали — получается около 15 000 раз в секунду. Не может же быть, что кто-то так быстро нажимал на клавиатуре кнопки? Хм, а, может, это тот самый strobe encoding?..&lt;/p&gt;
&lt;p&gt;Окей, пока все равно почти ничего не понятно, изучаем файл дальше. Замечаем, что если первая цифровая линия меняет своё значение 15 000 раз в секунду, то вторая — ровно в два раза реже. Удивительно, но третья — ещё в два раза реже! Подозрительно, но всё ещё непонятно :)&lt;/p&gt;
&lt;p&gt;Чтоб вы понимали накал страстей: в этот момент мы даже покушали — настолько всё было непонятно!&lt;/p&gt;
&lt;p&gt;А после обеда наткнулись на &lt;a href="http://visual6502.org/images/C012294_Pokey/pokey.pdf"&gt;отсканированную версию документации&lt;/a&gt; по этим чипам от самой Atari (с грифом CONFIDENTIAL!). Обязательно перейдите по ссылке и полистайте её. С высоты сегодняшних технологий это кажется невероятным трудом:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="804" data-ratio="0.92096219931271"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2018-06-29_22-11-54.png" width="804" height="873" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2018-06-29_22-11-16.png" width="791" height="814" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2018-06-29_22-11-26.png" width="804" height="767" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2018-06-29_22-11-36.png" width="782" height="825" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ох уж эти написанные на печатной машинке тексты и нарисованные от руки схемы... От них прямо пахнет чем-то волшебным.&lt;/p&gt;
&lt;p&gt;В общем, погрузились мы в эту пдфку. А так как в схемотехнике ничего не понимаем, погружаться пришлось очень медленно. Раздел про аудио аккуратно пропустили, перешли сразу к клавиатуре.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2018-06-29_22-14-02.png" width="800" height="780" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Что тут написано: во-первых, линии K0–K5 действительно передают скан-код нажатой клавиши. Брать эти биты надо с отрицанием. В википедии тоже что-то подобное было написано, правда, почему-то отрицание навешано только на K0, K1, K2 и K5:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2018-06-29_22-15-25.png" width="204" height="110" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Интересно, как на самом деле?&lt;/p&gt;
&lt;p&gt;Дальше написано, что внутри чипа POKEY, который уже успел стать нам родным, есть 6-битный счётчик, 6-битный регистр для сравнения, и 8-битный регистр для итогового скан-кода. А дальше идёт абзац, который мы читали (и страдали!) минут двадцать:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2018-06-29_22-17-21.png" width="768" height="298" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Итак, есть некоторый алгоритм для определения, в какой момент сигналы, выставленные на линиях K0–K5, всё-таки являются кодом нажатой клавиши, а когда их не надо слушать. Если отрицание KR1 становится нулём («low» в терминах текста), то значение из счётчика копируется в регистр для сравнения. Дальше происходит некоторая магия для определения того, не было ли это случайностью, и если нажатие клавиши подтверждается на следующем тике, то процессору посылается прерывание, а скан-код нажатой клавиши попадает в специальный регистр. После этого запускается парный алгоритм, не позволяющий создавать прерывания очень-очень часто, пока человек держит кнопку нажатой. На следующей странице пдфки даже есть блок-схема для этого процесса. Мы потратили на неё ещё минут десять:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2018-06-29_22-22-49.png" width="673" height="860" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Окей, но это всё не объясняет, почему у нас значение на линии меняется туда-сюда 15 000 раз за секунду. Ну не нажимают люди так быстро клавиши! Помогла как всегда случайность. Мы нашли ещё одну версию этой документации, причём не только в отсканированном, но и оцифрованном виде: &lt;a href="http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm."&gt;http://krap.pl/mirrorz/atari/homepage.ntlworld.com/kryten_droid/Atari/800XL/atari_hw/pokey.htm.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Там был весь тот же текст, что мы уже читали, но вдобавок ещё и интересная картинка:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/pokey_kbd_scan_timing.gif" width="766" height="334" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Во-первых, каждая следующая линия меняет своё значение в два раза реже, чем предыдущая. Прямо, как у нас! Во-вторых, минимальный такт равен 1 / 15.7 kHz, то есть такты тикают 15 700 раз в секунду. Прямо, как у нас [2]!&lt;/p&gt;
&lt;p&gt;Благодаря этой картинке появилась гипотеза: значения на каналах K0–K5 меняются вне зависимости от того, нажимал ли человек кнопки, причём меняются именно так, как нарисовано на картинке: каждое следующее меняется в два раза реже, чем предыдущее. И именно это — тот самый strobe encoding, а вовсе не линии KR1 и KR2, как было написано в википедии. А вот когда человек нажимает кнопку на клавиатуре, линии K0–K5 выставляются в правильное положение, а на отрицание KR1 подаётся единица (то есть на самом деле на KR1 подаётся ноль).&lt;/p&gt;
&lt;p&gt;Ну что ж, осталось написать код:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;def run():
    time = 0
    last_kr1 = 0
    last_scancode = 0
    answer = &amp;#039;&amp;#039;
    while time &amp;lt; 20:
        values = get_values(time)
        kr1, kr2, scancode = parse_values(values)
        if last_kr1 == 0 and kr1 == 1:
            if last_scancode != scancode:
                print(f&amp;#039;Current time is {time}, values are {values}&amp;#039;)
                print(f&amp;#039;kr1 = {kr1}, kr2 = {kr2}, scancode = {scancode}, char = {SCANCODES[scancode]}&amp;#039;)
                answer += SCANCODES[scancode]
            last_scancode = scancode
        last_kr1 = kr1
        time += HSYNC
    print(answer)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В этом коде мы ловим момент, когда отрицание KR1 изменилось с нуля на единицу и выхватываем скан-код, посчитанный из значений K0–K5. Некоторые символы дублировались, потому что по-хорошему надо было реализовать ту самую логику, описанную в пдфке, но это слишком сложно :) Так что просто запоминаем последний скан-код и не повторяем его, если он случился снова.&lt;/p&gt;
&lt;p&gt;Вот только где взять таблицу скан-кодов и символов (словарь &lt;i&gt;SCANCODES&lt;/i&gt; в коде)? В пдфке её почему-то не было. Зато нужная табличка (как всегда) нашлась где-то в закромах интернета: &lt;a href="https://atariwiki.org/wiki/Wiki.jsp?page=KBCODE"&gt;https://atariwiki.org/wiki/Wiki.jsp?page=KBCODE&lt;/a&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2018-06-29_22-46-05.png" width="713" height="543" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Остаётся только перебить его в наше решение, запустить и получить ответ: «FLAG; 8-BIT-HARDWARE-KEYLOGER{CR}». Отправляем, и-и-и, ..., неправильно :( Да ладно, не может быть, фраза-то читаемая получилась. Замечаем одну G в KEYLOGGER и понимаем, что наш алгоритм в данном случае зря выкинул повторение :) Возвращаем вторую G и сдаём ответ.&lt;/p&gt;
&lt;p&gt;Полный код решения можно найти &lt;a href="https://gist.github.com/andgein/a99fcafade86a9921b870653b81df371"&gt;на гитхабе&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;P.S. Всё-таки оригинальная пдфка была права: надо брать отрицания ко всем линиям, в том числе и к K3, и к K4. А википедия не права.&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка семнадцатая. Переменная users_ids</title>
<guid isPermaLink="false">18</guid>
<link>https://andgein.ru/blog/all/17-users-ids-vs-user-ids/</link>
<pubDate>Wed, 28 Feb 2018 21:43:08 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/17-users-ids-vs-user-ids/</comments>
<description>
&lt;p&gt;Всю свою сознательную жизнь я неправильно называю переменные. Вскрылось это благодаря Тёме во время очередного код-ревью, за что ему большое спасибо.&lt;/p&gt;
&lt;p&gt;В моём коде часто можно встретить переменную users_ids. В ней, очевидно, я храню айдишники пользователей. Неважно, каких именно: каких-нибудь пользователей, которые интересуют меня прямо сейчас. И у меня никогда не было сомнений, что я называю эту переменную правильно. Пока Тёма не сказал, что носители языка называют её не users_ids, а user_ids.&lt;/p&gt;
&lt;p&gt;Вот несколько доказательств:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/7198128/correct-name-for-a-variable-users-ids-vs-user-ids"&gt;тред на стековерфлоу&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;поиск по гитхабу: user_ids встречается &lt;a href="https://github.com/search?q=user_ids&amp;type=Code&amp;utf8=%E2%9C%93"&gt;более 400 000 раз&lt;/a&gt;, а users_ids — &lt;a href="https://github.com/search?q=users_ids&amp;type=Code&amp;utf8=%E2%9C%93"&gt;только 5000&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;в гугле за редким исключением все пишут user_ids или userIds, но никак не users_ids и не usersIds.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Разбираясь дальше и расспрашивая знакомых, я узнал, что причина очень проста: существительное перед другим существительным в английском языке становится прилагательным и не может стоять во множественном числе. Поэтому носители языка и протестуют против users_ids: это словосочетание для них совершенно неестественно.&lt;/p&gt;
&lt;p&gt;И теперь у меня большая проблема.&lt;/p&gt;
&lt;p&gt;Проблема в том, что я всё ещё хочу называть переменную users_ids! Ведь это так логично. Переменная user_ids — это айдишники одного пользователя, в то время как users_ids — айдишники сразу нескольких. Ну ладно, с айдишниками не так наглядно. Но давайте другой пример.&lt;/p&gt;
&lt;p&gt;group_members — это участники группы&lt;br /&gt;
groups_members — это участники нескольких групп&lt;br /&gt;
course_groups — группы внутри одного курса&lt;br /&gt;
courses_groups — группы нескольких курсов&lt;br /&gt;
course_group_members — участники группы курса&lt;br /&gt;
course_groups_members — участники, например, всех групп курса&lt;br /&gt;
courses_groups_members — все участники вообще всех групп всех курсов&lt;/p&gt;
&lt;p&gt;Смотрите, сколько дополнительной семантики добавляет маленькая буква s в имя переменной! Надо лишь позволить себе забить на лингвистическую некорректность...&lt;/p&gt;
&lt;p&gt;И вот как дальше жить? Страдать, но писать правильно, или переубеждать весь остальной мир?&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка шестнадцатая. Первая половина дня</title>
<guid isPermaLink="false">17</guid>
<link>https://andgein.ru/blog/all/16-first-half-of-the-day/</link>
<pubDate>Sat, 17 Feb 2018 11:39:05 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/16-first-half-of-the-day/</comments>
<description>
&lt;p&gt;Часто слышу про мистическую «первую половину дня». Мол, &lt;i&gt;позвоню в первой половине дня&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Вы удивитесь, насколько разными будут ответы, если поспрашивать окружающих, когда заканчивается эта самая первая половина дня. Кто-то скажет «до полудня», кто-то «примерно до двух» или «около часа дня», кто-то — «до обеда». И в этом первая проблема этого выражения: если вы договоритесь на «первую половину дня», то вы не сможете быть уверены, что вас поняли верно.&lt;/p&gt;
&lt;p&gt;Но главная проблема здесь в другом: эти варианты не выдерживают никакой логической критики. Да, 12 часов — это действительно близко к середине солнечного дня: до этого момента и после него солнце светит примерно одинаковое время. Но вот уже несколько столетий, с момента изобретения свечей и электричества, мы не живём солнечным днём. Мы ложимся позже заката, а встаём далеко не с рассветом.&lt;/p&gt;
&lt;p&gt;Вот, например, я. В обычный будний день я встаю около десяти часов. Да, позже, чем многие, но и ложусь я позже большинства, так что всё честно. Получается, что если мне надо сделать что-то в первой половине дня, то у меня есть на это 2 часа. Вторая половина дня при этом будет длиться раз в 5–6 больше. Какие же тогда это &lt;i&gt;половины&lt;/i&gt;?&lt;/p&gt;
&lt;p&gt;Окей, когда я учился в университете, я был храбрее: вставал аж в 8 утра. Учёба начиналась в 9. Это что же, в три часа я должен был освобождаться с учёбы, а в четыре идти спать? Нет же, опять вторая «половина» оказывалась на порядок больше первой.&lt;/p&gt;
&lt;p&gt;Некоторые говорят, что у них всё сходится. Мол, если вы работаете с 8 до 16, то в полдень наступает ровно середина рабочего дня. Но ау, очнитесь! Рабочего дня, а не дня вообще. Чтобы полдень стал серединой вашего дня, надо лечь в восемь вечера и встать в четыре. Вряд ли вы так делаете, да ведь?&lt;/p&gt;
&lt;p&gt;Как полечить эту проблему? Очень просто. Просто не используйте словосочетание «первая половина дня», когда договариваетесь с кем-то о времени. Говорите точно: «зайди ко мне до двух часов, пожалуйста». Или «я позвоню после полудня». Так будет легче всем: и вам, и тому, с кем вы договариваетесь :-)&lt;/p&gt;
&lt;p&gt;И да, говорить о второй половине дня настолько же ошибочно, как и о первой. Ведь если неизвестно, когда заканчивается первая, то когда тогда начинается вторая?&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка пятнадцатая. Китайский интернет</title>
<guid isPermaLink="false">16</guid>
<link>https://andgein.ru/blog/all/15-china-internet/</link>
<pubDate>Sat, 28 Oct 2017 12:28:33 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/15-china-internet/</comments>
<description>
&lt;p&gt;Все знают, что интернет в Китае находится за великим файрволом. Его основная задача — защищать китайцев от информации, порочащей страну и коммунистическую партию.&lt;/p&gt;
&lt;p&gt;Все гугловые сервисы здесь не работают: начиная от интернационального поиска, заканчивая ютубом. Единственный работающий сервис от гугла — это пуши в андроид, они нормально приходят. Не работает даже Play Market, так что поставить приложение можно только из сторонних маркетов. Наверно, именно поэтому свой есть и у самсунга, и у местного Xiaomi.&lt;/p&gt;
&lt;p&gt;Гугл сделал для Китая специальную версию своего поиска &lt;a href="http://www.google.cn"&gt;www.google.cn&lt;/a&gt;, она работает только по HTTP и фильтрует результаты поиска по специальным правилам. Воспользоваться ей у меня, правда, почему-то не получилось: любой клик редиректит на &lt;a href="http://www.google.com.hk"&gt;www.google.com.hk&lt;/a&gt;, который недоступен.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-10-26_23-06-52.png" width="783" height="480" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Другие крупные западные поисковики тоже, говорят, фильтруют результаты специально для Китая. У Bing’а даже китайский интерфейс есть:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-10-26_23-05-01.png" width="914" height="512" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;У Yahoo открывается английский интерфейс, и даже по HTTPS, однако особой фильтрации не замечено: если поискать в нём «Tiananmen Square protests of 1989» (большой протест, о котором китайские власти хотят поскорее забыть), то найдётся миллион результатов, а ещё и видео предложат посмотреть. Также мне удалось поискать в нём 民主 («демократия») — одно из ключевых слов, заблокированных в китайском интернете полностью.&lt;/p&gt;
&lt;p&gt;Не работает здесь и фейсбук, а вместе с ним и инстаграм. А ещё твиттер. Все эти западные сервисы считаются вредными для рядовых китайцев. Забавно, что при этом в твиттере есть достаточно много верифицированных китайских аккаунтов. Вот, например, BBC Chinese:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-27_10-25-40.jpg" width="720" height="1280" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Яндекс и все его сервисы доступны. Правда, работают они здесь достаточно медленно. По сравнению с местными сервисами вроде главного поисковика Китая Baidu — и вовсе невозможно по-черепашьи. Утром выход в европейский интернет работает шустрее (в Европе в это время ночь), вечером — заметно медленнее, одна страница может загружаться 20–60 секунд. В общем как через edge-интернет :-)&lt;/p&gt;
&lt;p&gt;Кроме того, у меня не получилось подключиться напрямую к рабочему компьютеру по RDP — видимо, режут на уровне протокола. А вот по SSH — легко, без проблем подключился к нескольким серверам в разных точках Европы и Америки .&lt;/p&gt;
&lt;p&gt;Энтузиасты постарались собрать полный список заблокированных сайтов энтузиасты вот здесь: &lt;a href="https://enterchina.ru/blog/cenzura-v-kitae-zolotoy-schit-ili-velikiy-kitayskiy-fayrvol/."&gt;https://enterchina.ru/blog/cenzura-v-kitae-zolotoy-schit-ili-velikiy-kitayskiy-fayrvol/.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Естественно, все эти ограничения можно обойти с помощью VPN. До поездки в Китай я читал, что «Золотой щит», как ещё называют Великий файрвол, умудряется блокировать и VPN, но это не совсем подтвердилось: я спокойно подключился сначала по OpenVPN к работе, потом к университету, а затем с помощью заранее установленного Opera VPN вышел в свободный интернет с телефона.&lt;/p&gt;
&lt;p&gt;Эппловский App Store работает, из него можно поставить приложения для ютуба или тот же Opera VPN. Первое не заработает по понятным причинам, а вот почему мне не удалось подключиться с айпада к Opera VPN, я не понимаю. Интересно, что десктопная опера с включённой встроенной опцией VPN выйти в интернет тоже не может.&lt;/p&gt;
&lt;p&gt;Вообще, надо сказать, в Китае к айфонам относятся в некотором смысле лучше, чем к андроидам, хотя последних тут и значительно больше. На тех немногих кассах, где принимают карты Union Pay (национальная платёжная система), часто принимают и Apple Pay. О Google Pay или Samsung Pay никто не знает. Картами Visa и MasterCard нам тоже ни разу не удалось расплатиться.&lt;/p&gt;
&lt;p&gt;Эппл-карты здесь тоже показали себя лучше остальных: они прорисованы на порядок лучше, чем MAPS.ME или гугловые. Вот только они, к сожалению, не работают в оффлайне.&lt;/p&gt;
&lt;p&gt;VPN до Европы работает, конечно, небыстро. Фоточки в инстаграме грузятся от 20 до 60 секунд (утром — меньше, вечером — больше), твиттер лучше читать вовсе без фотографий, иначе устанешь ждать. При активном сёрфинге скорость составляет примерно мегабайт в минуту:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-27_09-15-07.jpg" width="720" height="1280" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Из приятного для русских туристов: работают вконтакте и телеграм. Правда, не без сюрпризов. Например, у вконтакте работает приложение и десктопная веб-версия, но не работает m.vk.com. В целом не беда — с компьютера сидишь в десктопной версии, с телефона — через приложение. Но вот когда переходишь из приложения по любой ссылке, оно сначала перенаправляет тебя на m.vk.com/away.php, что ломает весь процесс, а ссылка в итоге не открывается. Помогает долгое нажатие на ссылку и выбор в контекстном меню Copy link вместо Open link. Правда, в приложении под андроид это работает не всегда: если ссылка вставлена не в текст поста, а как красивое превью, то контекстного меню не дождёшься. Придётся страдать.&lt;/p&gt;
&lt;p&gt;Ну и видяшки из ленты не посмотреть — либо ютуб не загрузится, либо скорости не хватит :-)&lt;/p&gt;
&lt;p&gt;Ещё из интересного: Amazon AWS при заходе на свой сайт предлагает перейти на специальную китайскую версию, «оптимизированную» для местного интернета:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-10-23_16-37-13.png" width="1288" height="506" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Кстати говоря, технологически Китай развит хорошо (вот только его технологии сильно изолированы от остального мира). Из многих забегаловок можно заказать еду через приложения. Uber не работает, но вместо него  есть местные уберозаменители. Все китайцы гоняют со смартфонами и общаются через мессенджеры — в основном через WeChat. Общаются, кстати, часто аудио-сообщениям, а не текстовыми: видимо, набирать иероглифы на телефоне малоприятная штука.&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка четырнадцатая. Где я?</title>
<guid isPermaLink="false">15</guid>
<link>https://andgein.ru/blog/all/14-yuhai-international-resort/</link>
<pubDate>Thu, 26 Oct 2017 14:45:28 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/14-yuhai-international-resort/</comments>
<description>
&lt;p&gt;Вот уже неделю я гуляю по Санье. В &lt;a href="https://andgein.ru/blog/all/11-china-first-day/"&gt;заметке из первого дня&lt;/a&gt; обещал рассказать про наш отель.&lt;/p&gt;
&lt;p&gt;Называется он Yuhai International Resort. На территории отеля находится пять жилых зданий и небольшой парк.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Листайте фотки. Их там почти везде по несколько.&lt;/i&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1280" data-ratio="1.7777777777778"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-54.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-32.jpg" width="1278" height="718" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-09.jpg" width="1278" height="718" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-caption"&gt;Вход в отель, жилой корпус и вид на парк с 12 этажа&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Парк очень классный — тропинки, пальмы, необычные деревья, скамейки, детская площадка, беседка, несколько прудиков и бассейн.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="516" data-ratio="1.7731958762887"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-22-01.jpg" width="516" height="291" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-25.jpg" width="516" height="291" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-58.jpg" width="1278" height="718" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-16.jpg" width="1278" height="718" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-45.jpg" width="1278" height="718" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-43.jpg" width="1278" height="718" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-14.jpg" width="1278" height="718" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Бассейн с сюрпризом, да:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-22-06.jpg" width="1280" height="720" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Этаж жилого здания выглядит вот так:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-56.jpg" width="1278" height="718" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Забавно, как пронумерованы номера:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-22-10.jpg" width="1280" height="892" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Во-первых, для номеров с 1 по 9 этаж в начало добавляется цифра 8. Как я уже писал, 8 — счастливая и очень любимая цифра у китайцев, поэтому номер 8103 выглядит куда лучше, чем просто 103. Есть и обратная сторона у этой медали. Цифра 4 считается несчастливой: её иероглиф 四 звучит как sì, что созвучно иероглифу 死 (sǐ), означающему смерть. И это не просто примета, к ней в Восточной Азии относятся очень серьёзно. В гостиницах и больницах Китая, Японии и Кореи редко бывают, например, четвёртые этажи, а автомобильные номера, заканчивающиеся на 4, запрещены в Пекине как несчастливые. У этого даже есть название — &lt;a href="https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%82%D1%80%D0%B0%D1%84%D0%BE%D0%B1%D0%B8%D1%8F"&gt;тетрафобия&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Так вот, в нашем отеле есть четвёртый этаж, но на всех остальных нет номеров с цифрой 4: после нашего 8103 идёт 8105, а после 8113 сразу 8115.&lt;/p&gt;
&lt;p&gt;Внутри номер обустроен совсем не пятизвёздочно, конечно. Немножко похоже на советский пансионат. Ну ладно, постсоветский, в советских я никогда и не был.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1280" data-ratio="1.4446952595937"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-40.jpg" width="1280" height="886" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-22-08.jpg" width="1278" height="718" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;По телевизору здесь показывают только китайские каналы — CCTV 1, CCTV 2, CCTV 3, CCTV 4 и так далее. С фантазией на названия телеканалов у них не очень, да (на самом деле это &lt;a href="https://ru.wikipedia.org/wiki/%D0%A6%D0%B5%D0%BD%D1%82%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%82%D0%B5%D0%BB%D0%B5%D0%B2%D0%B8%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%9A%D0%B8%D1%82%D0%B0%D1%8F"&gt;China Central Television&lt;/a&gt; — государственное и основное телевидение в Китае). Всё, естественно, по-китайски, но часто с субтитрами. Китайскими :-)&lt;/p&gt;
&lt;p&gt;Номер полутороэтажный, на втором маленьком этаже расположились шкаф и кровать:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-34.jpg" width="1278" height="718" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Вид со второго этажа&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Правда, потолок на втором этаже такой низкий, что несмотря на предупредительную надпись, я все равно несколько раз больно ударился головой :-)&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-27.jpg" width="1278" height="718" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В некоторых местах, кажется, проектировали для низкорослых китайцев: например, в ванной я вижу себя в зеркале вот так:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-22-03.jpg" width="1278" height="718" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Зато у каждого номера есть свой собственный балкон! Мы живём на первом этаже, так что с балкона открывается вид на маленькую речушку около здания и тропинку в парке. А ещё на балконе стоят качели. Правда, покачаться на них не получится: они приварены к полу и почти упираются спинкой в стену.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-52.jpg" width="1280" height="720" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В отеле есть два небольших магазинчика: один с сувенирами, чипсами и напитками, а другой со свежими фруктами.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-12.jpg" width="1280" height="720" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Магазинчик в отеле&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;На территории отеля есть два салона свадебных фотосессий. Здесь это не странно — для китайцев свадебная фотосессия чуть ли не важнее самой свадьбы. Фотосессия по времени может занимать целый месяц, фотографируют молодожён в красивых отелях, на лодочках в прудиках и на фоне ярких пальм и деревьев. Стоимость такой фотосессии спокойно может достигать 20 000 юаней (около 180 000 рублей по текущему курсу), что для среднего китайца очень много, но не сделать до или после свадьбы фотосессию считается неприемлимым. Салоны же занимаются организацией таких фотосессий от и до — дают машины, фотографов, осветителей, подбирают платья для невесты и вообще всю одежду молодожён.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1280" data-ratio="1.7777777777778"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-27_09-15-02.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-27_09-15-10.jpg" width="1280" height="720" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Завтрак. Завтрак здесь просто прекрасный — огромный шведский стол, где можно поесть и в привычном нам западном стиле (яичница с беконом, салаты, тосты с маслом), и в традиционном китайском. Из приборов есть и вилки с ножами, и палочки. Для сравнения в китайских забегаловках вилку с ножом вам в большинстве случае никто не даст. Мой личный фаворит здесь — свежевыжатый клубничный сок.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-27_09-15-04.jpg" width="1280" height="720" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В комнате есть небольшой столик типа кухонного, над ним даже есть вытяжка:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-47.jpg" width="1278" height="718" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Вот только плиты под вытяжкой нет. Да и готовить самими в отеле нельзя 6-)&lt;/p&gt;
&lt;p&gt;Недалеко от отеля идёт стройка, и она немножко отвлекает своими громкими звуками, но если в течение рабочего дня гулять по городу, то стройку можно почти и не заметить. Да и вообще вся Санья сейчас — чуть менее, чем одна большая стройка. Город переделывают из деревни в туристический центр: сносят лачуги, и на их месте строят крутые 20-этажные дома.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_20-21-19.jpg" width="1278" height="718" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В Санье сейчас рано и быстро темнеет — примерно в 6:30–6:40. После этого в отеле начинается вечерняя жизнь: в ресторане подают барбекю из морепродуктов (за дорого, но один раз можно сходить бесплатно), а в беседке около бассейна поёт местный музыкант. Каждый день один и тот же, что немного надоедает, надо сказать. Но поёт, вроде, неплохо. В 9 часов песни и танцы заканчиваются, в 10 закрывается ресторан, и в 11 отель как будто вымирает. Зато с 12 этажа открывается отличный ночной вид:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-26_21-19-08.jpg" width="1280" height="720" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;(простите за качество)&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;По вечерам нас иногда доставали какие-то кровососущие насекомые, но выдаваемые фумигатор и закрытый балкон спасают от них хорошо. Днём же никто не кусает :-)&lt;/p&gt;
&lt;p&gt;В каждом номере установлен вай-фай роутер с китайским интернетом. К вай-фаю претензий нет, а вот интернетом пользоваться бывает сложновато. Но об этом — в следующей заметке.&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка тринадцатая. Больше фактов о Китае!</title>
<guid isPermaLink="false">14</guid>
<link>https://andgein.ru/blog/all/13-hainan-facts-2/</link>
<pubDate>Fri, 20 Oct 2017 17:29:11 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/13-hainan-facts-2/</comments>
<description>
&lt;p&gt;Продолжаю &lt;a href="/blog/all/12-hainan-facts/"&gt;список любознательных фактов&lt;/a&gt; о Китае, Хайнане и Санье.&lt;/p&gt;
&lt;p&gt;23. Остров Хайнань считается местом элитного отдыха для китайцев. Приехать сюда означает показать свой статус. Тем не менее, на этом элитном острове есть супер-элитный островок. Называется он Феникс, на него нельзя пройти или проехать обычным смертным: на входе охрана попросит документ, подтверждающий владение недвижимостью на острове или проживание в семизвёздочном отеле там же. Да-да, именно семизвёздочном. До сегодняшнего дня я считал, что больше пяти звёзд не бывает, а оказывается, в мире есть какое-то количество аж-семизвёздочных отелей.&lt;/p&gt;
&lt;p&gt;24. С одной стороны к острову Фениксу подплывают огромные белые лайнеры, а с другой — яхты богатых постояльцев. Выглядит это как-то так (фотка из интернета):&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/1.jpg" width="2048" height="1152" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;25. После того, как остров Хайнань объявили курортной зоной, сюда начали ездить русские и обеспеченные китайцы. Местных здесь сейчас только 20%, а всего — где-то 700 000 человек. Для Китая это очень мало: скорее большая деревня, а не город.&lt;/p&gt;
&lt;p&gt;26. Русских, особенно незагорелых, автоматически считают богатыми. Во-первых, потому что иностранцы. Во-вторых, потому что белая кожа в Китая — признак большого дохода. На улице обычные китайцы могут подойти и попросить сфотографироваться с вами. У многих туристов считается нормальным попросить за это деньги: за фото с белым европейцем китайцы готовы отдать 20 юаней, за видео — 100–150.&lt;/p&gt;
&lt;p&gt;27. Если китайцы не готовы фотографироваться с вами, они попробуют вас снять на видео исподтишка. Полученное видео они выложат на местный ютуб, где активно соберут лайки. Вообще у китайцев очень принято хвастаться, особенно своим богатством, дорогими покупками или связями, таков уж менталитет. На недавно купленный автомобиль вешают красную ленточку, чтобы все знали — машина новая. А через несколько месяцев ленточку снимают и вешают новую такую же. Чтобы все вокруг продолжали завидовать, что у вас новая машина. Так может продолжаться 2–3 года, пока не надоест.&lt;/p&gt;
&lt;p&gt;28. Так как белая кожа — признак финансовой успешности, китайцы стараются максимально не загореть. Для этого, как нам объяснили, и нужны те самые маски на лицо, а также странные перчатки-прихватки, приделанные к рулю скутеров:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2.jpg" width="520" height="520" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;29. Раз уж мы заговорили о скутерах: сегодня выяснилось, что большинство из них — электрические. Это всё из-за экологии: очень уж хотят хайнаньцы сохранить свой чистый воздух. На материковом Китае с этим действительно очень много проблем: там вечный смог, а в последние годы даже увеличилась вероятность онкологических заболеваний среди школьников. Электрические автомобили здесь тоже популярны. Говорят, нередко можно встретить Теслу, а по городу расставлены заправки для неё. Мы, правда, так ни одной пока и не встретили.&lt;/p&gt;
&lt;p&gt;30. Как я уже писал в прошлой заметке, на дорогах творится полный ад: каждый ходит и ездит так, как ему хочется. Могут ехать по встречке, на красный свет, резво пересекать двойную сплошную. Но есть одно правило, которое здесь соблюдают все: ограничение скорости в 60 км/ч. За исполнением этого правила следят, в том числе, полуавтоматические камеры на перекрёстках.&lt;/p&gt;
&lt;p&gt;31. Из-за действующего в последние десятилетия налога на второго ребёнка, молодых мужчин сейчас в стране намного больше, чем женщин (матери часто делали аборт, узнав, что планируется дочь, а не сын). Из-за этого по салонам красоты в основном ходят мужчины: хотят понравиться девушкам :-) Бум барбершопов тоже не обошёл Санью стороной: в городе мы видели несколько вполне себе хипстерских заведений.&lt;/p&gt;
&lt;p&gt;32. Кстати, как выяснилось, в прошлом году налог на второго ребёнка отменили. Как раз из-за этой демографической проблемы.&lt;/p&gt;
&lt;p&gt;33. Несмотря на огромный средний возраст жизни, государственную пенсию здесь платят только бывшим государственным работникам, и то только 2000 юаней. Остальных обеспечивают их дети и внуки.&lt;/p&gt;
&lt;p&gt;34. Ещё про стандарты красоты. У многих водителей очень длинные ногти. Таким образом они хвастаются, что не занимаются тяжёлым физическим трудом. Выглядит отвратительно, на наш взгляд, но здесь очень ценится.&lt;/p&gt;
&lt;p&gt;35. 80% чая, выращенного на острове, поставляется в компартию Китая. Слишком уж он тут хороший из-за опять же хорошей экологии.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-21_00-13-14.jpg" width="1280" height="720" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Просто вид бухты Саньи, на которой мы живём. Берег и пляж — бесконечно красивы.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;36. Школьники в Китае учатся очень много, по 12 часов в день. Начинают 8 утра, а некоторые и вовсе в 6:30. Сначала идут важные уроки: математика, язык, физика, ... С 12 до 14 часов перерыв на обед и сон — это вообще общекитайская (или общехайнаньская?) традиция отдыхать в это время. После 14 часов идут не такие важные предметы: например, рисование, физкультура и музыка. А ещё после этого дети идут на факультативы.&lt;/p&gt;
&lt;p&gt;С такой адской учёбой 4 из 5 школьников страдают плохим зрением. Но учиться должны все, как минимум 9 лет. После этого нужно ходить в школу ещё три года, если хочешь поступить в университет.&lt;/p&gt;
&lt;p&gt;37. Многие пальмы окружены деревянными или металлическими сооружениями: они делают пальмы крепче и устойчивее. На остров часто заходят тайфуны, и мощный ветер вполне может вырвать пальму и понести её по городу.&lt;/p&gt;
&lt;p&gt;38. Мало- и среднеобеспеченные китайцы, кстати, любят не очень сильные тайфуны. Это повод не ходить на работу 2–4 дня, ничего не объясняя начальнику.&lt;/p&gt;
&lt;p&gt;39. В Южно-Китайском море водятся странные дельфины-наркоманы. Они кусают ядовитую рыбу фугу, чтобы испытать от боли кайф. Больше такого поведения учёные ни за какими дельфинами не замечали.&lt;/p&gt;
&lt;p&gt;40. Акулы (практически) никогда не спят.&lt;/p&gt;
&lt;p&gt;41. Почти во всех странах мира запрещено вылавливать акул. Разрешено только в Китае, Японии и Австралии.&lt;/p&gt;
&lt;p&gt;42. Чтобы сделать полуторокилограммовое шёлковое одеяло, нужно, чтобы 4000 шелкопрядов соткали свои коконы. Это реально много.&lt;/p&gt;
&lt;p&gt;43. В каждом кушательном заведении обязательно висит лицензия и выданный государством уровень чистоты еды: A, B или C. Уровень A — это дорогие рестораны, гарантирующие чистоту и стерильность кухни и всего процесса приготовления блюда. Уровень C — китайские забегаловки с известными уровнем антисанитарии (хотя, говорят, почти никто никогда не травится). Вчера мы кушали в забегаловке с уровнем C, пол-литра колы стоит там  3 юаня. Сегодня мы с экскурсией обедали в «Утке по-пекински» — ресторане китайской кухни для русских. Баночка колы 0,33 л стоит там 8 юаней.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-21_00-13-09.jpg" width="1280" height="720" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Мой обед с забегаловке уровня C&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;44. Вообще зарплата на острове в туристический сезон (а это почти весь год, кроме лета) примерно 5000–10 000 юаней. На материковой части Китая средняя зарплата составляет 3000 юаней (около 26 000 рублей). С такой зарплатой приехать с семьёй отдохнуть на Хайнань действительно сложновато.&lt;/p&gt;
&lt;p&gt;45. До того, как остров стал туристическим, он был военным. В городе и в лесу располагается большое количество военных баз. 90% из них засекречены, никто даже не знает, где они. На всякий случай военные базы в городе советуют не фотографировать — могут увести на неприятную беседу.&lt;/p&gt;
&lt;p&gt;46. Цена фруктов здесь указывается на полкилограмма. Почему так принято — загадка, даже средний манго весит больше, около 700–900 граммов.&lt;/p&gt;
&lt;p&gt;47. Шоколада здесь почти нет. В магазинах, по крайней мере, он не продаётся. Зато других сладостей очень много, в основном их делают из кокоса или манго, их тут завались. А сегодня мы ели и вовсе конфеты из мяса акулы.&lt;/p&gt;
&lt;p&gt;48. Молочный улун, который подают в российских кафе и ресторанах, по вкусу очень сильно отличается от настоящего китайского молочного улуна :-)&lt;/p&gt;
&lt;p&gt;49. Иероглиф 三 означает одновременно и «три», и «больше двух; несколько; много». Так что шутка про «раз, два, много» здесь как нигде актуальна.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-21_00-13-06.jpg" width="1280" height="720" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Бонус для тех, кто дочитал или доскроллил до конца. Я на самой высокой точке города Санья.&lt;/div&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Заметка двенадцатая. Факты о Китае, Хайнане и Санье</title>
<guid isPermaLink="false">13</guid>
<link>https://andgein.ru/blog/all/12-hainan-facts/</link>
<pubDate>Fri, 20 Oct 2017 01:10:17 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/12-hainan-facts/</comments>
<description>
&lt;p&gt;Вот список любознательных фактов о Китае, острове Хайнань и городе Санья, которые я узнал во второй день пребывания здесь. Вряд ли они когда-нибудь мне пригодятся, но это нестрашно — они ведь любознательные, а не полезные.&lt;/p&gt;
&lt;p&gt;1. Давным давно, когда здесь ещё не было китайцев, на острове Хайнань жили два народа: ли и мяо. Первые любили земледелие и считали, что произошли от оленей. По легенде охотник нашёл в лесу красивую олениху, спарился с ней, и от их детей и произошли ли. Потомки этого народа и сейчас поклоняются оленям. Название одного из самых красивых заповедников острова, например, переводится как «Олень повернул голову». Мяо же были больше охотниками, чем земледельцами, и жили куда менее цивилизованно, чем ли. Этот народ и его потомки считают, что произошли от собак.&lt;/p&gt;
&lt;p&gt;2. Молодец-мяо может вскарабкаться без дополнительных приспособлений на пальму с кокосами и сбросить оттуда плод.&lt;/p&gt;
&lt;p&gt;3. Из-за этого во всех домах в Санье стоят решётки на окнах. Не только на первом и последнем этажах, как это бывает у нас, а на всех:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1280" data-ratio="1.7777777777778"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-19_21-47-14.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-19_21-47-12.jpg" width="720" height="1280" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Зарешёчен практически весь город. Мяо — отличные воры, могут забраться на четвёртый этаж, влезть через форточку и украсть всё, что влезет в рот — обычно это цепочки или другие украшения. Добытое они складывали в рот, потому что карманов у них не было, часто ходили в одних повязках. Сейчас воровства, говорят, стало сильно меньше. Но решётки на все окна все равно ставят. На всякий случай.&lt;/p&gt;
&lt;p&gt;4. (Не знал только я, но) плоды кокоса вовсе не волосатые, а гладкие и большие. У них толстая зелёная кожура толщиной 4–5 см. То, что мы видим в России — это плоды кокоса уже без внешней кожуры, только в очень твёрдой внутренней.&lt;/p&gt;
&lt;p&gt;5. Немного рекордов: Санья-бай, недалеко от которой мы живём, является самой длинной бухтой в Азии. Её протяжённость составляет 22 километра.&lt;/p&gt;
&lt;p&gt;6. На острове располагается и самая длинная подвесная канатная дорога в Азии, она ведёт с острова Хайнань на остров обезьян. На этом острове находится парк, в котором обитают 2000 макак. Кстати, провинившихся обезьян сажают в своеобразную тюрьму на 2–3 дня. Обезьяна может попасть туда, если украдёт у посетителя очки, деньги или кока-колу. Происходит это с ними, как выяснилось, нередко :-). Поеду в парк обезьян через пару дней, посмотрю на них тогда сам.&lt;/p&gt;
&lt;p&gt;7. Саньянцы хвастаются тем, что их город занимает второе место в мире после Гаваны по чистоте воздуха. Но, надо сказать, ни убедительных подтверждений этого в интернете, ни супер-чистого воздуха в городе я не заметил. Более того, водители многочисленных мопедов часто ездят по городу в масках — кажется, чтобы не дышать грязью.&lt;/p&gt;
&lt;p&gt;8. 78% территории острова Хайнань — жуткие и непроходимые джунгли. По ним водят экскурсии, и учёные знают, что там растёт много редких растений, но в целом мало кто представляет, что там вообще происходит.&lt;/p&gt;
&lt;p&gt;9. Чай у китайцев — это святое, да. Они говорят, что он является одновременно напитком, едой и лекарством. За завтраком, например, принято пить зелёный чай, он пробуждает нервную систему и заряжает энергией на день. А вот после обеда — уже красный. Чёрный чай надо пить, если у вас есть проблемы с пищеварением. В общем, здесь тысячи чаёв, и для каждого известно, когда и как его надо пить.&lt;/p&gt;
&lt;p&gt;10. У каждой провинции в Китае есть иероглиф, которым помечаются автомобильные номера. У Хайнань это иероглиф, означающий «жемчуг», так как остров славится своим жемчугом.&lt;/p&gt;
&lt;p&gt;11. В китайском макдональдсе продают совсем не то, что в наших. Меню различается минимум на 50%:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-19_22-06-45.jpg" width="720" height="1280" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;12. Кстати, расплатиться в китайском макдональдсе карточкой у меня не получилось — здесь принимают только карты UnionPay (национальная платёжная система), Apple Pay, Alipay и ещё какие-то китайские электронные способы оплаты. Карточкой виза или мастеркард расплатиться пока не удалось нигде.&lt;/p&gt;
&lt;p&gt;13. Несмотря на то, что мы находимся на 19° северной широты, здесь очень рано темнеет: в семь вечера уже наступает ночь. Я знал, что на экваторе темнеет очень быстро, но почему так рано — для меня до сих пор загадка.&lt;/p&gt;
&lt;p&gt;14. Не все китайцы узкоглазые. Большинство хайнаньцев имеют обычный разрез глаз.&lt;/p&gt;
&lt;p&gt;15. В остальном же китайцы, которых мы увидели в городе, достаточно стереотипны и именно такие, какими я их представлял: и внешне, и по поведению. Невысокие, очень стройные (полных китайцев, кажется, вообще не бывает), одеваются, как в Европе, хотя в некоторых местах можно встретить и людей в национальной одежде. Почти у всех в руках лопатовидные смартфоны. На улицах очень много людей и днём, и вечером, большинство перемещается по городу на мопедах и скутерах, реже на велосипедах. На одном мопеде иногда может сидеть до четырёх человек. Нередко мы видели, как китайцы прикрепили к своему скутеру тележку с какими-то (кажется) бытовыми отходами и куда-то их неспеша везут. Там и трубы ржавые, и дощечки с гвоздями, и мешки с мусором. Куда и зачем они это всё так старательно везут — загадка.&lt;/p&gt;
&lt;p&gt;16. Автомобили здесь тоже есть. Причём выглядят они значительно дороже, чем остальной транспорт: это чистые большие машины, среди них часто встречаются Ауди, БМВ и даже Ламборждини. Смотрится очень контрастно по сравнению в грязными и явно повидавшими жизнь мопедами.&lt;/p&gt;
&lt;p&gt;17. Туризм начал процветать в Санье только в 1995 году. До этого это был не город, а большая деревня, в ней даже не было светофоров. Поэтому большинство ныне живущих здесь китайцев не изучали в школе ПДД. И это заметно: они переходят дорогу и ездят на красный свет. Мопеды и машины всё время гоняют по тротуарам и бибикают пешеходам, чтобы те их пропустили. При переходе дороги на зелёный свет приходится выставлять в сторону руку, чтобы водители тебя не задавили, иначе они спокойно едут прямо на тебя. Во время зелёного света машинам на больших перекрёстах начинается настоящий хаос: все мопеды и автомобили со всех направлений начинают ехать одновременно. Как они при этом не сталкиваются и не убивают друг друга, непонятно до сих пор.&lt;/p&gt;
&lt;p&gt;18. Привычного нам хлеба здесь нет. Есть «мягкие французские булочки» (так и называются, да), они похожи на тот хлеб, к которому мы привыкли, только маленького размера. Ещё есть какая-то белая китайская субстанция, по вкусу напоминающая слегка запечённое тесто. Как это называется, я пока не узнал :-)&lt;/p&gt;
&lt;p&gt;19. Пляжи здесь восхитительно красивые: чистый песок, пальмы и прозрачная вода. Видимость в воде — от 5 до 35 метров.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-20_07-14-59.jpg" width="1280" height="720" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;20. Горячей воды в кранах здесь нет, по крайней мере в гостинице. Есть холодная и тёплая. В целом это понятно — кто захочет после +31° принимать горячую ванну?&lt;/p&gt;
&lt;p&gt;21. RDP во внешний мир без VPN всё-таки не работает :-)&lt;/p&gt;
&lt;p&gt;22. Эгея (движок этого блога) плохо работает с длинными списками, внутри которых есть картинки. В заметках работает авто-определение и авто-нумерация списков (как в маркдауне), а после изображения счётчик сбрасывается, и нумерация начинается снова с единицы. Чтобы не разрывать список, мне пришлось прибегнуть к едва незаметной хитрости. Угадайте, какой :-)&lt;/p&gt;
&lt;p&gt;И напоследок: за сегодня я выучил, как пишутся три иероглифа: «Китай», «юань» и «курица». Уже неплохо!&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Продолжение — &lt;a href="https://andgein.ru/blog/all/13-hainan-facts-2/"&gt;в следующей заметке&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка одиннадцатая. Первый день в Китае</title>
<guid isPermaLink="false">12</guid>
<link>https://andgein.ru/blog/all/11-china-first-day/</link>
<pubDate>Wed, 18 Oct 2017 18:05:07 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/11-china-first-day/</comments>
<description>
&lt;p&gt;Сегодня я прилетел в Китай. Точнее, на Хайнань — остров, расположенный на самом юге Китая, прямо в Южно-Китайском море. Само название Хайнань, кстати, так и переводится: &lt;i&gt;юг моря&lt;/i&gt;. Более того, на самом острове я нахожусь тоже на самом юге, в городском округе Санья.&lt;/p&gt;
&lt;p&gt;Это ещё не экватор, но уже почти: город находится на 19° северной широты. Сейчас, в середине октября, здесь +31° днём и +26° ночью. Наш самолёт приземлился в аэропорту Феникс за несколько минут до полудня, так что вся жесть погоды почувствовалась сразу: климат здесь жаркий и очень влажный. Я такое переношу с трудом, хотя со временем привыкну, никуда не денусь :-)&lt;/p&gt;
&lt;p&gt;К счастью, прямо в аэропорту оказался бесплатный вай-фай, в котором к тому же заработал телеграм. Начитавшись перед поездкой всякого в интернете, я очень обрадовался: при подключении к сети не попросили номера паспорта, а телеграм заработал сам, без настроек каких-нибудь прокси или VPN.&lt;/p&gt;
&lt;p&gt;Кроме того, что это моя первая поездка в нероссийскую Азию, это ещё и моя первая поездка по турпутёвке. Так что после досмотров миграционной службы и таможни Китая нас встретили автобусы «Тез Тура». В автобусе был китайский гид, неплохо для китайца говорящий по-русски и представившийся Антоном. Удивительно, сколько внезапной информации он рассказал нам за 20 минут дороги до отеля. Внезапной она оказалась, потому что я думал, что в основном всё знаю: я же готовился к поездке, гуглил, читал отзывы. Гуглить, кстати, непозволительная здесь роскошь — все сервисы гугла недоступны из-за Великого китайского фаервола.&lt;/p&gt;
&lt;p&gt;Выяснилось, что для оформления нашего пребывания в Китае представители туроператора заберут до завтра наши паспорта. Более того, до завтрашего утра мы не можем покидать территорию отеля, так как на первом же перекрёстке полицейские спросят наши документы, не предъявив которые мы не сможем отделаться даже штрафом: последует суд и тюремное наказание.&lt;/p&gt;
&lt;p&gt;Начиная с завтрашнего дня выходить на улицу будет можно, но аккуратно: нам выдадут специальные бумажки, на которых по-китайски будет написано, что мы не заблудившиеся шпионы, а туристы, проживающие в отеле Yuhai International. Эту бумажку надо будет показывать всем заинтересовавшимся полицейским. Кроме того, несмотря на то, что Санья — туристическая зона, некоторые места, насколько я понял, не рекомендованы к посещению туристами. Об этом мы подробнее узнаем завтра.&lt;/p&gt;
&lt;p&gt;Активнее всего гид в автобусе рассказывал нам про чудесную китайскую медицину. Десять минут он зазывал всех на бесплатную диагностику прямо сегодня: по его словам пощупав пульс и надавив на определённые точки на теле человека, местные специалисты смогут диагностировать практически любое заболевание человека. Ну, почему бы и нет :-)&lt;/p&gt;
&lt;p&gt;Отель, в котором мы живём, — это пять 12-этажных зданий, между которыми находится небольшой парк. В парке растут пальмы (они здесь вообще повсюду), есть прудик с большой надувной уточкой и средних размеров бассейн. Ещё здесь есть термальный источник, одно посещение которого нам подарили при заселении в отель.&lt;/p&gt;
&lt;p&gt;Снаружи гостиница выглядит достаточно прилично и современно. Однако внутри всё больше похоже на советский пансионат: достаточно старые деревянные тумбочки и стол, металлические, окрашенные простой белой краской, перила у лестниц, достаточно замызганный кафель на полу. Наш номер — полутороэтажный, на первом этаже большая и достаточно пустая комната-студия, а на втором — маленькая комнатка с низкими потолками, одним шкафом и кроватью. В целом придраться по-крупному, кажется, не к чему, с другой стороны трёхзвёздочный отель в Ханты-Мансийск даст фору этому пятизвёздочному.&lt;/p&gt;
&lt;p&gt;Вот фотография номера нашего отеля из интернета:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/193924291.JPEG" width="540" height="350" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В реальности всё очень похоже, только торшер в углу более простой, кресла посередине нет, у стены дивана с подушками нет (но вместо него стоит два обычных небольших кресла), растения на столе нет. Зато окно действительно занимает полстены, а прямо за ним — небольшой балкончик. Мы живём на первом этаже, поэтому балкончик выходит прямо в парк, в нескольких метрах от него по тропинке прогуливаются отдыхающие.&lt;/p&gt;
&lt;p&gt;Отдыхающих здесь, кстати, пополам: примерно половина русских и половина китайцев. Я когда-то читал, что в туристических зонах Китая есть места, куда не допускают обычных жителей страны: мол, там и магазины лучше, и здания красивее. Либо здесь это не так, либо у нас 300 подсадных китайцев — живут в отеле, чтобы создать иллюзию, что им тоже можно.&lt;/p&gt;
&lt;p&gt;На обед нас на специальной машине вывезли в «европейский» ресторан «Солнечный». На самом деле он никакой не европейский, а просто русский: официанты худо-бедно говорят по-русски, на столах лежат европейские вилка и нож, в меню все названия на двух языках: на китайском и русском. Но выбора у нас особенно не было: выходить в город сами мы все равно не можем, так что выбирали между рестораном «Солнечный» и кафе «Москва».&lt;/p&gt;
&lt;p&gt;По фотографии сложно догадаться, что именно я ел, но это была свинина в красном кисло-сладком соусе. Да, инстаграм тут не работает, так что терпите фотографии еды в блоге, пожалуйста.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1280" data-ratio="1.7777777777778"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-18_21-38-05.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-18_21-38-01.jpg" width="720" height="1280" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-10-18_21-39-36.jpg" width="720" height="1280" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Эти русские кафе и рестораны — места для тех, кто приехал полежать на пляже и не хочет больше ни о чём думать. Каждый день бесплатный трансфер готов отвезти тебя от отеля до ресторана и обратно, твой заказ примут на русском языке, и даже еда там скорее европейская, чем традиционно китайская. Но мы не такие — надеюсь, что уже завтра сможем выбраться в город и покушать в обычных китайских заведениях.&lt;/p&gt;
&lt;p&gt;Несмотря на то, что карточкой в ресторане расплатиться не получилось, его всё-таки можно считать достаточно продвинутым: там есть вай-фай. С паролем из восьми восьмёрок, кстати, что само по себе символично: 8 — самая счастливая цифра для китайцев. Интересно устроен и вай-фай в отеле: в каждом номере стоит своя точка доступа, но пароль ко всем одинаковый — yhgj8888. Да, опять восьмёрки! Это достаточно удобно: гуляя по парку я уже подключился к нескольким точкам других комнат, чтобы не терять доступ в интернет.&lt;/p&gt;
&lt;p&gt;Кроме восьмёрок китайцы поклоняются чёрной черепахе, зелёному дракону, красному фениксу и белому тигру. Эти животные символизируют четыре стихии, четыре стороны света и четыре времени года. Ах да, ещё четыре — это половина от восьмёрки :-) Драконов и тигров мы пока вообще не видели, а вот каменных черепах здесь очень много. Первые мы увидели сразу как вышли из самолёта в аэропорту Феникс. Ещё несколько довольно крупных украшают бортики бассейна в парке отеля.&lt;/p&gt;
&lt;p&gt;В следующих заметках расскажу отдельно &lt;a href="/blog/all/14-yuhai-international-resort/"&gt;о нашем отеле&lt;/a&gt; (спойлер: в 23:00 почти все спят, а с балкона 12 этажа в это время открывается отличный вид на ночной прибрежный город) и &lt;a href="/blog/all/15-china-internet/"&gt;об интернете&lt;/a&gt; (гугл, ютуб, фейсбук и инстаграм не работают, но это легко обходится Opera VPN или RDP во внешний мир). Ну и о наших похождениях по острову Хайнань тоже расскажу. Если нам вернут паспорта, конечно.&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка десятая. Письмо преподавателям ЛКШ</title>
<guid isPermaLink="false">11</guid>
<link>https://andgein.ru/blog/all/10-sis-talks-and-rules/</link>
<pubDate>Mon, 18 Sep 2017 12:13:21 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/10-sis-talks-and-rules/</comments>
<description>
&lt;p&gt;В чате преподавателей ЛКШ возникла непростая дискуссия сразу о многом. О том, почему некоторые правила, установленные для всех, иногда нарушаются (простой пример: у параллели промышленного программирования P есть доступ в интернет, а у других школьников нет). А ещё о том, что должны отвечать преподаватели школьникам на сложные вопросы: «Нужно ли высшее образование?» и какой образ жизни должны культивировать и пропагандировать преподаватели.&lt;/p&gt;
&lt;p&gt;Я в дискуссии почти не участвовал, но после неё собрался с мыслями и написал большой ответ. А сейчас, спустя почти месяц, решил, что его можно выложить в открытый доступ. Я лишь немного причесал стилевые косяки в своём сообщении, чтобы текст было приятнее читать.&lt;/p&gt;
&lt;p&gt;Итак...&lt;/p&gt;
&lt;p&gt;«Большое пространное сообщение про пропаганду, внушение, позицию и непоощрение разговоров. А ещё про единство правил для всех. Всё, естественно, моё личное мнение.&lt;/p&gt;
&lt;p&gt;Вкратце: лучше не пропагандировать ничего школьникам, ничего им не внушать и не уходить от разговоров, которые вы не поощряете.&lt;/p&gt;
&lt;p&gt;Пропаганда через внушение — вредная и опасная штука. Пропаганда вообще в большинстве случаев вредная и опасная, но есть и несколько примеров положительной пропаганды: например, пропаганда занятий спортом или отказа от курения. Но ни в коем случае не через внушение: представьте, что вам регулярно говорят, что пить и курить — вредно, а заниматься спортом — полезно. Повторяют это изо дня в день и вбивают вам в голову. На умных людей это не действует. Именно поэтому не нужно никакую позицию внушать школьникам: это либо не подействует, либо вызовет отторжение через какое-то время, когда они насытятся неаргументированными внушениями.&lt;/p&gt;
&lt;p&gt;Кроме пропаганды через внушение бывает пропаганда через собственный пример. «Смотрите, дети, я не курю и не пью, и при этом отлично и весело живу — давайте вы тоже не будете курить и пить». Это работает лучше, но как только вы акцентируете внимание на таких словах, они становятся лживыми и неестественными. Как девушка из рекламы, которая «смотрите, какое чистое платье, как новое!»&lt;/p&gt;
&lt;p&gt;Самый лучший выход — это забыть о пропаганде и о том, что вы вообще должны как-то влиять на детей. Просто будьте собой, как бы банально это ни звучало. Будьте таким, какой вы есть, и этот естественный пример сработает лучше всего. Та масса мероприятий, которая существует в ЛКШ помимо ежедневной учёбы — спорт, спецкурсы, клубы, спектакли и вечерние мероприятия, — это площадка для вас, чтобы показать школьникам, чем интересным, кроме программирования, можно заниматься в жизни. Относитесь к этому как к плацдарму для реализации пропаганды через пример, но не стоит об этом так думать — в большинстве случае просто делайте то, что вам хочется. Максимально свободно и, возможно, очень по-разному.&lt;/p&gt;
&lt;p&gt;Этим, на мой взгляд, ЛКШ отличается от десятка мест, где учат алгоритмам и программированию. Посмотрите вокруг — сильные олимпиадные школьники участвуют в 5–10 сборах и школах за один учебный год. Кроме этого, у них есть онлайн-курсы, учебники, кружки и многое другое. Я не говорю, что это плохо (как и не говорю, что хорошо), но если мы хотим чем-то отличаться, то насыщенная и захватывающая внеучебная жизнь&lt;br /&gt;
— это то, что надо. Причём не выстраданная внеучебная жизнь, как это бывает в некоторых лагерях, когда по плану нужно провести определённые мероприятия, а очень естественная и органичная внеучебная жизнь, которую делают преподаватели. Именно преподаватели, то есть те же люди, что мастерски объясняют алгоритмы на лекциях, те же люди, что выигрывали топовые олимпиады (к которым стремятся школьники), и те же люди, что работают в топовых компаниях в России или за границей (и куда мечтают попасть школьники). Это всё делает возможным передачу опыта и личного примера от преподавателей детям (и, кстати, между преподавателями тоже).&lt;/p&gt;
&lt;p&gt;В то же время ошибочно думать, что вы должны в чём-то убедить детей своим личным примером. Например, что учёба в вузе полезна. Или что наоборот — бесполезна. Будет лучше, если вы не станете убеждать, а вместо этого возьмётесь аргументированно рассказать о своём опыте. Не только о личном, но и об опыте людей, с которыми вы знакомы или о которых знаете. Предоставляйте пищу для ума, а не готовые решения. До них школьник дойдёт сам, это будет полезнее для всех.&lt;/p&gt;
&lt;p&gt;Есть куча вопросов, на которые не существует правильного ответа, но о которых вас с большой вероятностью спросит школьник в ЛКШ. Это и вопрос необходимости учёбы в вузе, и ранний выход на работу (на 2–3 курсе, например), и работа за границей. Не уходите от этих разговоров, даже если вы не хотели бы начинать их сами. Школьник задаёт вопрос не просто так, а потому что его интересует ответ. Кроме того, он вам доверяет. Уйдя от разговора или честного ответа, вы, во-первых, потеряете его доверие, а во-вторых, отправите его искать ответ в другом месте — и, кто знает в каком?&lt;/p&gt;
&lt;p&gt;Да, есть вещи, которые не стоит говорить школьникам, особенно младшего возраста. Это нормально, никто не заставляет вас выкладывать на духу всё, что вы думаете. Расскажите то, что готовы рассказать. Нормально также сказать, что вы готовы вернуться к разговору через пару лет: например, когда вопрос бросания учёбы станет для этого семиклассника действительно актуальным. Но не уходите от ответа и не оставляйте своё мнение необъяснённым, неподтверждённым, аргументируя его общими словами вроде «будущее неизвестно, поэтому нам всем нужно учиться, так надо, потому что так принято».&lt;/p&gt;
&lt;p&gt;Вопросы школьников могут касаться и общелкшатских правил: например, зачем нужен зачёт? Почему нельзя выходить за территорию базы и купаться? Почему нельзя дорешивать после ужина? Худшее, что можно ответить на такой вопрос — это «потому что таковы правила ЛКШ». Это не только ничего не объясняет, но и заставляет думающего ребёнка усомниться в необходимости таких правил и авторитете отвечающего. Более того, если вы так ответили не потому что хотели отмахнуться от надоедливого школьника, но и потому что правда так считаете, то это повод серьёзно задуматься.&lt;/p&gt;
&lt;p&gt;У каждого правила должна быть причина его существования. Она является объяснением, почему это правило существует и почему его стоит всем выполнять. Иначе мы получим свод законов вида «здесь так принято», а это ничем хорошим не заканчивается. Как только причина появляется, её можно обсуждать. Кто-то считает её достаточной для такого правила, кто-то с ними не согласен. Кто-то может считать, что правило нужно сделать строже, кто-то — что мягче. Это нормально, у всех разные взгляды на жизнь. Но бесполезно обсуждать правило само по себе, нужно обсуждать причины, которые обосновывают это правило.&lt;/p&gt;
&lt;p&gt;Отсюда же рождаются и исключения из правил. Как только мы понимаем, что причина, лежащая в основе правила, в данном случае не так важна, как обычно, сразу появляется место для исключения. (Если бы мы обсуждали законы в масштабах страны, то исключения, вероятно, были бы невозможны. Но мы говорим о школе на 300 человек, из которых 50 — взрослые люди. Здесь можно и нужно позволить себе больше гибкости).&lt;/p&gt;
&lt;p&gt;Итак, почему нельзя выходить за территорию базы и купаться? Выходить нельзя, потому что мы с вами несём ответственность за жизнь и здоровье всех детей, а делать это за территорией во много раз сложнее, чем на ней. Купаться нельзя, потому что вода в озере отвратная. Но когда-то это было не так, и купаться было можно. Правда, только в присутствии врача и преподавателя. Почему? Потому что в воде слишком легко начать тонуть и остаться при этом незамеченным, если на берегу не будет наблюдающего преподавателям. Из правила о выходе за территорию, конечно же, есть исключения: например, на время экскурсий или вело-клуба. Ни у кого, вроде, не возникает желания запретить вело-клуб, потому что он нарушает правила о выходе за пределы территории. Оно и понятно: в этом случае ответственность за жизнь и здоровье перекладывается на конкретного преподавателя, который выехал с детьми на велосипедах.&lt;/p&gt;
&lt;p&gt;Зачёт в свою очередь нужен, чтобы упорядочить в головах все знания, полученные в авральном режиме за 12–13 учебных дней, и чтобы оценить, насколько эти знания усвоены. Оценка, в частности, нужна, чтобы упростить набор в Зиму и на следующий год. Бывает ли так, что зачёт для кого-то необязателен? Ну да, например, если кто-то сильно заболел, то для него логично сделать исключение — упорядочить в больной голове знания все равно не получится, а их оценка будет скорее бесполезна.&lt;/p&gt;
&lt;p&gt;Дорешивать после ужина нельзя, потому что мы хотим собрать школьников на ту самую внеучебную жизнь, о которой я писал выше. Вытащить их на свежий воздух, на интеллектуалку, на спорт или просто прогулку. Это нужно, чтобы ЛКШ не стала местом, где просто готовят к олимпиадам. Нет, ЛКШ — безусловно место, где готовят к олимпиадам (особенно в старших параллелях), но, чтобы отличаться от других таких мест, хочется делать ЛКШ местом, где готовят к олимпиадам И активно проводят свободное время. Поэтому у нас много разных клубов, спортивных и других мероприятий, причём настолько много, что детям иногда приходится выбирать, куда пойти. Об этом всём я уже писал выше.&lt;/p&gt;
&lt;p&gt;Вот почему дорешивать после ужина нельзя. Но теперь становится понятно, почему и когда из этого правила могут возникать исключения. Например, когда после ужина идёт какой-нибудь интересный раунд кодефорсеса или топкодера. Мы неоднократно открывали школьникам старших параллелей доступ в интернет и давали право сидеть за ноутами во время раунда, потому что он с точки зрения преподавателей был настолько интересным (= полезным), что пропускать его ради интеллектуалки этим 10–15 школьникам не стоит. Или, например, параллель P. В общем случае на них действуют те же правила, что и на всех: пользоваться ноутбуками после ужина и в выходные нельзя. Но в ситуации, требующей того, нет ничего плохого в исключении для одного школьника, который что-то делает в присутствии преподавателя. Требует ли определенная ситуация этого или? Я оставил бы это на усмотрение преподавателей параллели, которые могут обратиться за советом к завучу или директору, если считают нужным.&lt;/p&gt;
&lt;p&gt;Как мы любим в ЛКШ говорить последнее время, во всём этом действуют очень тонкие грани. Грани между предоставлением полной свободы и ограничением формальными правилами, требующими беспрекословного исполнения. И для поиска этой грани я предлагаю использовать синхронизированное понимание причин и умелое использование права на исключение».&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка девятая. План выступления</title>
<guid isPermaLink="false">10</guid>
<link>https://andgein.ru/blog/all/9-talk-roadmap/</link>
<pubDate>Sun, 17 Sep 2017 09:35:00 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/9-talk-roadmap/</comments>
<description>
&lt;p&gt;Полмесяца назад меня пригласили выступить в Ельцин Центре с какой-нибудь научно-популярной лекцией. Я выбрал шифрование: рассказывал о том, как шифры используется в современном интернете, какая математика лежит в основе всего этого и почему это нужно знать даже самым простым обывателям.&lt;/p&gt;
&lt;p&gt;Организаторы хотели записать видео моей лекции, но случилась куча технических накладок, и записи в итоге нет. Жалко? Жалко. Но здесь я хочу рассказать не об этом.&lt;/p&gt;
&lt;p&gt;Для этого доклада я придумал способ визуализации плана выступления. Наглядный план нужен почти каждому большому выступлению: зрители должны понимать, что будет происходить следующие полтора часа. Обычно для этого используется простой список-перечисление на втором или третьем слайде, но я вдохновился Яндекс.Навигатором и нарисовал маршрут своей лекции:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-09-17_10-43-19.png" width="1365" height="726" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Зелёным обозначены простые темы, жёлтым — темы посложнее, а красным — самые сложные. Разделение по сложности было очень важным для этой лекции, потому что я совсем не знал, что за люди ко мне придут. Были школьники, было много студентов, но были и люди старшего поколения. В том числе, наверняка, далёкие от математики. Нужно было показать слушателям, что в лекции есть моменты, не понять которые прямо сейчас — нормально и ни капельки не стыдно.&lt;/p&gt;
&lt;p&gt;Чтобы добиться так раскрашенной линии в PowerPoint пришлось немного помучаться. Я нарисовал кривую Безье и задал ей градиентную закраску с типом «Путь»:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-09-17_11-07-18.png" width="318" height="561" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Проблема оказалась в том, что PowerPoint почему-то удваивает градиент: сначала рисует его в одну сторону, а потом продолжает симметрично отраженный градиент. Вот смотрите, я создаю линию, указываю ей красно-жёлтый градиент, а она в итоге получается жёлто-красно-жёлтая:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-09-17_11-11-01.png" width="1260" height="577" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Зачем они так сделали и почему это поведение нельзя отключить, совершенно непонятно. Не приходится жить с тем, что есть. Я удлинил линию: сделал так, чтобы видимая часть была только её половиной. Хвост кривой увёл за пределы слайда, а небольшой кусочек закрыл чёрным прямоугольником:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-09-17_11-18-51.png" width="1147" height="550" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Кстати, одна из крутейших фич PowerPoint’а — в том, что если на фоне слайда лежит картинка, градиент или узор, прямоугольником все равно можно закрыть ненужный мусор, а вам не придётся гадать с вырезанием нужной части изображения для заливки этого прямоугольника:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-09-17_11-30-57.png" width="829" height="479" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Для этого надо в настройках прямоугольника или любой другой фигуры выбрать заливку фона:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-09-17_11-31-39.png" width="305" height="173" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Теперь прямоугольник можно двигать, увеличивать и поворачивать — PowerPoint сам возьмёт нужную часть фона и применит её к заливке фигуры. Фантастика!&lt;/p&gt;
&lt;p&gt;А если кто-то пришёл сюда за полной презентацией с моего выступления, то &lt;a href="https://andgein.ru/files/talks/2017-09-15-encrypting-on-internet/Encrypting-on-internet.pptx"&gt;вот она&lt;/a&gt;. Правда, если вы не были на самой лекции, то презентация покажется вам скорее бесполезной. В презентации используется нестандартный &lt;a href="https://andgein.ru/files/talks/2017-09-15-encrypting-on-internet/hack-font.zip"&gt;моноширинный шрифт Hack&lt;/a&gt;, установите его, чтобы ничего не поехало.&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка восьмая. TED-клуб, часть 2</title>
<guid isPermaLink="false">9</guid>
<link>https://andgein.ru/blog/all/8-ted-club-mathematics-technologies-and-love/</link>
<pubDate>Sat, 26 Aug 2017 10:50:22 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/8-ted-club-mathematics-technologies-and-love/</comments>
<description>
&lt;p&gt;Продолжаю рассказывать о видяшках, которые показывал этим летом на TED-клубе в ЛКШ.&lt;/p&gt;
&lt;p&gt;Вторая встреча называлась «Математика, технологии и любовь». Объединил я их неслучайно: среди выбранных докладов были и рассказ о любви к математики (уверенно входит в топ-3 моих любимых выступлений всех времён), и видео о математике любви. В общем, смотрите сами.&lt;/p&gt;
&lt;h2&gt;Энди Йен: Думаете, ваша почта — личная? Подумайте ещё раз&lt;/h2&gt;
&lt;p&gt;Ребята хотят сделать шифрованную электронную почту. Здесь сложно придумать что-то новое, GPG существует уже двадцать лет. Но Энди Йен и его коллеги из ЦЕРНа постарались сделать удобную и простую в и использовании шифрованную электронную почту. Естественно, она по-прежнему гарантирует, что никто, кроме получателя, не прочитает ваш текст.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/andy_yen_think_your_email_s_private_think_again?language=ru"&gt;https://www.ted.com/talks/andy_yen_think_your_email_s_private_think_again?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Эдуардо Саэнц де Кабесон: Математика — это навсегда&lt;/h2&gt;
&lt;p&gt;Ох, это просто моя любовь. Харизматичный и чувственный итальянец (собственно, а какой он ещё может быть? Он же итальянец!) начинает с объяснения, зачем нужна математика, а заканчивает аналогией между бриллиантами и теоремами. Если вам лень смотреть все видео, посмотрите только это.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/eduardo_saenz_de_cabezon_math_is_forever?language=ru"&gt;https://www.ted.com/talks/eduardo_saenz_de_cabezon_math_is_forever?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Анна Фрай: Математика любви&lt;/h2&gt;
&lt;p&gt;Что будет, если проанализировать кучу данных с сайтов знакомств современными математическими инструментами? Оказывается, всплывёт куча неожиданных выводов о том, как устроена любовь. Ну или по крайней мере о том, какой мы эту любовь сами себе представляем.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/hannah_fry_the_mathematics_of_love?language=ru"&gt;https://www.ted.com/talks/hannah_fry_the_mathematics_of_love?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Тасос Франзолас: Всё, что вы слышите в фильме — ложь&lt;/h2&gt;
&lt;p&gt;Рассказ о том, как делается звуковое сопровождение в кино. Перед просмотром советую представить, что вы звукорежиссёр большого и дорогого фильма. Вам нужно записать звуки для работающего винта подводной лодки, ломания костей в драке и взмахов крыла взлетающей птицы. Как вы это сделаете?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Звук — это язык. Он может обмануть нас, перенеся в другой конец света, может изменить наше настроение, может задать темп, может вызвать смех или испуг.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/tasos_frantzolas_everything_you_hear_on_film_is_a_lie?language=ru"&gt;https://www.ted.com/talks/tasos_frantzolas_everything_you_hear_on_film_is_a_lie?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Терри Мур: Почему неизвестная обозначается как x?&lt;/h2&gt;
&lt;p&gt;Мини-расследование о том, почему именно букву x выбрали для обозначения неизвестного в математике. Всего 4 минуты, а все равно кайф:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/terry_moore_why_is_x_the_unknown/transcript?language=ru"&gt;https://www.ted.com/talks/terry_moore_why_is_x_the_unknown/transcript?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Тим Бернес-Ли: Конституция всемирной паутины&lt;/h2&gt;
&lt;p&gt;Тима Бернеса-Ли представлять, кажется, не надо: это один из главных авторов интернета. В своём выступлении он говорит о дальнейшем развитии веба и задаёт вопрос: каким мы сами хотим его видеть? Кроме того, рассуждает о государственной цензуре в интернете и дроблении всемирной паутины на части. Видео 2014 года, но спустя три года актуальность, по-моему, только увеличилась.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/tim_berners_lee_a_magna_carta_for_the_web?language=ru"&gt;https://www.ted.com/talks/tim_berners_lee_a_magna_carta_for_the_web?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Майкл Рубинштейн: Увидеть неуловимое движение, услышать бесшумный звук. Здорово?&lt;/h2&gt;
&lt;p&gt;Потрясающее видео о том, как научились по микро-движениям на обычном видео измерять пульс человека. А ещё распознавать речь, усилив микроскопические движения от звуковых волн на видео лежащей на полу упаковки чипсов. Это выступление посоветовал мне Даня Рязановский, за что ему большое спасибо.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/michael_rubinstein_see_invisible_motion_hear_silent_sounds_cool_creepy_we_can_t_decide?language=ru"&gt;https://www.ted.com/talks/michael_rubinstein_see_invisible_motion_hear_silent_sounds_cool_creepy_we_can_t_decide?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Том Аглоу: Так мог бы выглядеть интернет без экрана&lt;/h2&gt;
&lt;p&gt;Том Аглоу фантазирует скорее не о технологии, а о дизайне (через призму удобства использования, конечно же) следующего поколения устройств.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Человечеству нравятся простые инструменты. Ваш телефон — не очень простой инструмент. Вилка — простой инструмент.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/tom_uglow_an_internet_without_screens_might_look_like_this?language=ru"&gt;https://www.ted.com/talks/tom_uglow_an_internet_without_screens_might_look_like_this?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Дэвид Иглмен: Можем ли мы создать для людей новые чувства?&lt;/h2&gt;
&lt;p&gt;Ещё одно видео, посоветованное Даней Рязановским. Нейробиолог Дэвид Иглмен делает достаточно необычную вещь: он подключает к человеческому телу новые периферийные устройства — нечто, что, как и обычные органы чувств вроде глаз, рта и носа, может отправлять электрические сигналы в мозг. В будущем это может добавить людям инфракрасное зрение, сонары или супер-чувствительный нос, а пока ребята развлекаются более простыми (но не менее интересными) вещами.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/david_eagleman_can_we_create_new_senses_for_humans?language=ru"&gt;https://www.ted.com/talks/david_eagleman_can_we_create_new_senses_for_humans?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Ричард Браунинг: Как я построил джет-костюм&lt;/h2&gt;
&lt;p&gt;Большой мотивации выступление. На самом деле оно вовсе не о джет-костюме, оно о том, как не сдаваться и продолжать пробовать. При этом желательно не переставая верить в себя.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/richard_browning_how_i_built_a_jet_suit?language=ru"&gt;https://www.ted.com/talks/richard_browning_how_i_built_a_jet_suit?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;На сегодня всё. Подписывайтесь, ставьте лайки. Об ещё двух встречах TED-клуба напишу попозже.&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка седьмая. TED-клуб</title>
<guid isPermaLink="false">8</guid>
<link>https://andgein.ru/blog/all/7-ted-club/</link>
<pubDate>Sun, 20 Aug 2017 17:06:59 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/7-ted-club/</comments>
<description>
&lt;p&gt;В этом году я провёл в Летней компьютерной школе четыре встречи TED-клуба. Клубы в ЛКШ — это такие нетематические мероприятия между обедом и ужином, цель которых — развлечь школьников и познакомить их с чем-нибудь новым. За все годы в ЛКШ была проведена сотня или две разных клубов.&lt;/p&gt;
&lt;p&gt;Разносторонность преподавателей на самом деле поражает. В этом году мы провели (ух, приготовьтесь, сейчас будет перечисление на много строчек, можно вдохнуть воздуха и быстро-быстро прочитать): гитарный клуб, клубы изготовления браслетов и фенечек, клуб любителей Лего, клуб рисования пиксель-арта, клуб настольных ролевых игр (его, кстати, проводил школьник), школу юного покер-крупье, мастер-классы по баскетболу, волейболу и фрисби, фирменную серию клубов «... из ничего» от Калана Абе, клуб пои, клуб игры в Шляпу (а потом и клуб игры в Шляпу на английском языке), клуб аргентинского танго, вокальный кружок, кино-, аниме- и мюзикл-клубы, клуб рисования с натуры, клуб портретной фотографии, клуб изготовления объёмных звёздочек из бумаги, клуб языка эсперанто, клуб стрельбы из лука, клуб поэзии, клуб философии, клуб игры в преферанс, фестиваль Холи, клуб рисования 3D-ручкой и TED-клуб.&lt;/p&gt;
&lt;p&gt;Выдохнули? Вот про последний из этих клубов я и хочу рассказать. Наверняка вы слышали о ежегодной конференции TED. Её миссия, как заявляют сами организаторы — распространение уникальных идей. Кроме собственно международной конференции во многих городах есть ещё небольшие местные аналоги — конференции TEDx.&lt;/p&gt;
&lt;p&gt;Идея провести TED-клуб в ЛКШ появилась ещё в конце прошлого года: я тогда увлёкся просмотром записей докладов с TED и заметил, что некоторые из них настолько классные, что мне хочется делиться ними почти со всеми подряд. Потихоньку я отбирал понравившееся видео, и в итоге показал летом 8 часов субъективно на мой взгляд лучших из увиденных выступлений.&lt;/p&gt;
&lt;p&gt;Каждая встреча TED-клуба предвещалась анонсом, в котором был поминутный план видео:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-08-20_20-58-30.png" width="800" height="859" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;TED-сообщество дружелюбно перевело субтитры практически для всех видео, опубликованных на официальном сайте. Субтитры доступны на 40+ языках, в том числе на русском, так что с пониманием никаких проблем нет.&lt;/p&gt;
&lt;p&gt;В этой и следующей заметке я хочу опубликовать список всех видео, которые я показал во время TED-клубов в ЛКШ. К каждому видео напишу аннотацию, чтобы заинтересовать вас перейти по ссылке и потратить от 5 до 15 минут на видео. Эти видео — отличный способ провести свободное время или занять свои глаза и уши во время завтрака. Ну а если какое-то не понравилось — просто переключайте на следующее :-)&lt;/p&gt;
&lt;p&gt;Первая встреча TED-клуба была посвящена науке. Это одна из самых популярных тем на конференциях TED, на то они и конференции. У меня получился небольшой перекос в сторону астрономии и космонавтики, но в этом и смысл личной подборки: сюда попало то, что интереснее всего мне. Ну а доклады о математике и программировании я специально сюда не добавлял, для них была заготовлена вторая встреча клуба.&lt;/p&gt;
&lt;h2&gt;Джек Хорнер. Вырастим динозавра из курицы&lt;/h2&gt;
&lt;p&gt;Способ воскрешения динозавров, описанный в «Парке Юрского периода» нереалистичен: найти ДНК динозавра в окаменелых насекомых не получится. Зато можно взять курицу, выключить у её эмбриона некоторые гены, и получить животное, очень похожее на динозавров, живших миллионы лет назад. Этим Джек Хорнер и занимается.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/jack_horner_building_a_dinosaur_from_a_chicken?language=ru"&gt;https://www.ted.com/talks/jack_horner_building_a_dinosaur_from_a_chicken?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Латиф Нассер. Вы и не представляете, откуда на самом деле происходят верблюды&lt;/h2&gt;
&lt;p&gt;Поучительная история о том, что наши знания о животных и тем более их происхождении зачастую не стоят и выеденного яйца, так как построены на догадках и предположениях. Правда ли, что верблюжий горб — способ накопить жир для выживания в долгих путешествиях по пустыне?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/latif_nasser_you_have_no_idea_where_camels_really_come_from?language=ru"&gt;https://www.ted.com/talks/latif_nasser_you_have_no_idea_where_camels_really_come_from?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Даниэлла Фейнберг. Волшебный ингредиент, благодаря которому оживают фильмы Pixar&lt;/h2&gt;
&lt;p&gt;Даниэлла рассказывает о том, что меня жутко интересует последние лет пять: как делаются крутые полнометражные мультфильмы. Не обо всём сразу, конечно, а обо одной маленькой детали. И об использовании науки в производстве мультфильмов.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/danielle_feinberg_the_magic_ingredient_that_brings_pixar_movies_to_life?language=ru"&gt;https://www.ted.com/talks/danielle_feinberg_the_magic_ingredient_that_brings_pixar_movies_to_life?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Грег Гейдж. Как своим мозгом контролировать чужую руку&lt;/h2&gt;
&lt;p&gt;Короткое видео, из которого я не узнал ничего нового. Зато увидел захватывающий своей простотой эксперимент: мужик подключает мозг девушки (на самом деле нерв под её локтём) к руке парня, и теперь ей достаточно  подумать, чтобы пальцы на его руке задвигались.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/greg_gage_how_to_control_someone_else_s_arm_with_your_brain?language=ru"&gt;https://www.ted.com/talks/greg_gage_how_to_control_someone_else_s_arm_with_your_brain?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Ейтор Бендер. Экзоскелеты для людей&lt;/h2&gt;
&lt;p&gt;Кажется, что это что-то из прекрасного будущего. Экзоскелеты, помогающие людям встать из инвалидных кресел, в которых они провели большую часть своей жизни. Не обошлось, правда, без военного применения для этих костюмов, но, видимо, без этого в США ребята бы просто не получили на исследования деньги.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/eythor_bender_demos_human_exoskeletons?language=ru"&gt;https://www.ted.com/talks/eythor_bender_demos_human_exoskeletons?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Кэти Борман. Как сфотографировать чёрную дыру?&lt;/h2&gt;
&lt;p&gt;В общем-то в названии всё сказано. Сфотографировать чёрную дыру невозможно, потому что она поглощает весь свет, направленный на неё. Зато можно попробовать сфотографировать тень от горизонта событий чёрной дыры, находящейся в центре нашей Галактики. Однако для этого нужен телескоп размером с Землю...&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/katie_bouman_what_does_a_black_hole_look_like?language=ru"&gt;https://www.ted.com/talks/katie_bouman_what_does_a_black_hole_look_like?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Аньяли Трипатхи. Почему Земля однажды будет выглядеть как Марс&lt;/h2&gt;
&lt;p&gt;Однажды наша планета станет сухой и красной — совсем как Марс. Но это будет нескоро, где-то через миллиард лет. А, может, через два, а, может, и через десять. Зачем же тогда изучать это сейчас? Аньяли объясняет.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/anjali_tripathi_why_earth_may_someday_look_like_mars?language=ru"&gt;https://www.ted.com/talks/anjali_tripathi_why_earth_may_someday_look_like_mars?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Табета Бояджян. Самая загадочная звезда во вселенной&lt;/h2&gt;
&lt;p&gt;Что делать, если все мыслимые варианты объяснения странных наблюдение астрономов закончились, а в инопланетян верить всё ещё не хочется?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/tabetha_boyajian_the_most_mysterious_star_in_the_universe?language=ru"&gt;https://www.ted.com/talks/tabetha_boyajian_the_most_mysterious_star_in_the_universe?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Калеб Харпер. Этот компьютер в будущем станет выращивать нашу еду&lt;/h2&gt;
&lt;p&gt;Достаточно экцентричное выступление мужика, который (не первый в этом мире) решил соорудить прибор, выращивающий еду по строгим рецептам из интернета: столько-то воды, столько-то удобрений, столько-то кислорода. Зачем-то он называет этот прибор компьютером, хотя, мне кажется, это лишнее. Сама идея тоже не нова, зато он уже достиг кое-каких результатов.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/caleb_harper_this_computer_will_grow_your_food_in_the_future?language=ru"&gt;https://www.ted.com/talks/caleb_harper_this_computer_will_grow_your_food_in_the_future?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Русс Альтман. Что на самом деле происходит, когда вы смешиваете лекарства?&lt;/h2&gt;
&lt;p&gt;Самый кайф, как всегда, происходит на стыке наук. В данном случае взяли машинное обучение и медицину. В общем, выяснили, что некоторые лекарства нельзя принимать вместе, хотя раньше о них такого не знали. Медики и химики пока не нашли объяснение, почему так происходит, но, возможно, теперь врачи будут аккуратнее выписывать одновременно несколько лекарств. Заодно Русс Альтман затрагивает тему открытых медицинских данных, которые очень сложно достать в век повёрнутости на всеобщей приватности.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ted.com/talks/russ_altman_what_really_happens_when_you_mix_medications?language=ru"&gt;https://www.ted.com/talks/russ_altman_what_really_happens_when_you_mix_medications?language=ru&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Про видео с остальных встреч TED-клуба напишу в следующей заметке.&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка шестая. Диалог выбора папки</title>
<guid isPermaLink="false">7</guid>
<link>https://andgein.ru/blog/all/6-open-folder-dialog/</link>
<pubDate>Wed, 28 Jun 2017 20:41:21 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/6-open-folder-dialog/</comments>
<description>
&lt;p&gt;Если вы программируете пользовательский интерфейс, то, пожалуйста, никогда не используйте вот такой диалог выбора папки:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-22_11-47-51.png" width="560" height="347" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Взгляните, в это окно даже нельзя вставить путь до нужной папки из буфера обмена! (А я, кстати, регулярно это делаю: в большинстве случаев я прихожу в этот диалог из Фара).&lt;/p&gt;
&lt;p&gt;Не понимаю, зачем в Майкрософте вообще придумали этот недоделанный диалог, и почему до сих пор не запретили использовать. Справедливости ради, у него есть версия, когда путь до папки всё-таки можно ввести:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-29_00-23-15.png" width="327" height="341" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Но ведь этого тоже недостаточно! Сравните, например, эти окна с нормальным диалогом выбора файла:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-29_00-34-20.png" width="1352" height="729" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Здесь и однокликовый переход в любую папку на пути до текущей, и быстрые переходы из панели слева, и поиск, и возможность разной сортировки (по имени, дате изменения, типу и так далее), и превью фотографий, чтобы убедиться, что папка — та самая, и возможность получить автоматические подсказки после ввода первых букв.&lt;/p&gt;
&lt;p&gt;Если не знаете, что использовать — используйте полноценный диалог выбора файла. Даже если вам надо, чтобы пользователь выбрал папку. Потом проверите, что он выбрал не файл, это же две строчки в коде.&lt;/p&gt;
&lt;p&gt;В MacOS, кстати, всё тоже плохо с этим:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/open-save-keyboard-shortcuts[1].jpg" width="620" height="417" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Опытные люди знают, что нужно нажать Cmd+Shift+G, чтобы можно было ввести путь до папки, но ведь до этого ещё догадаться надо.&lt;/p&gt;
&lt;p&gt;Необязательно делать такое навороченное окно, как у Хрома. Вот, например, нормальные диалоги, использованные в SourceTree и VLC:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="673" data-ratio="1.4109014675052"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-07-04_22-37-57.png" width="673" height="477" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-07-25_12-46-15.png" width="670" height="473" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Заметка пятая. Разбор задания Crypto Backdoor с Google CTF 2017</title>
<guid isPermaLink="false">5</guid>
<link>https://andgein.ru/blog/all/5-crypto-backdoor-writeup/</link>
<pubDate>Sat, 24 Jun 2017 13:10:53 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/5-crypto-backdoor-writeup/</comments>
<description>
&lt;p&gt;Это заметка о том, как мы с Костей Плотниковым решали задание на ассиметричную криптографию с Google CTF, который прошёл неделю назад. Она кишит кодом на питоне, несложными терминами из теории групп и математическими выкладками. Смело пропускайте, если боитесь чего-нибудь из этого.&lt;/p&gt;
&lt;script type="text/x-mathjax-config"&gt;
MathJax.Hub.Config({
  tex2jax: {
     inlineMath: [['$','$'], ['\\(','\\)']]
  },
  "HTML-CSS": {
     linebreaks: { automatic: true, width: "75% container" }
   }, 
  "SVG": {
     linebreaks: { automatic: true, width: "75% container" }
   } 
});
&lt;/script&gt;
&lt;script async src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_CHTML'&gt;&lt;/script&gt;
&lt;p&gt;Формулировка как всегда бесконечно расплывчата:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This public-key cryptosystem has a flaw. Can you exploit it? &lt;a href="/files/blog/5/crypto_backdoor.py"&gt;crypto_backdoor.py&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Костя попробовал меня ввести в курс дела, когда я присоединился к нему. Он рассказал, что в скрипте реализовано что-то вроде &lt;a href="https://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D0%BB%D0%B8%D0%BF%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1%8F"&gt;эллиптической криптографии&lt;/a&gt;. Работает она так: сначала на плоскости рисуется специальная &lt;a href="https://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D0%BB%D0%B8%D0%BF%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BA%D1%80%D0%B8%D0%B2%D0%B0%D1%8F"&gt;кривая&lt;/a&gt;, а затем для каждой пары точек на ней определяется операция сложения. Сумма двух точек с кривой тоже лежит на кривой за исключением случая, когда получается особое значение — ноль. После этого естественным образом определяется умножение точки на натуральное число.&lt;/p&gt;
&lt;p&gt;В эллиптической криптографии Боб, желающий получать зашифрованные сообщения от Алисы, выбирает секретное число $N$ и точку на эллиптической кривой $g$. Последняя называется генератором и сообщается всем желающим, а вот секретное число становится закрытым ключом Боба. Открытым ключом в этом случае называется произведение генератора и закрытого ключа; $B = Ng$.&lt;/p&gt;
&lt;p&gt;Собственно, на мысли об эллиптических кривых Костю натолкнули наличие в скрипте точки-генератора и двух открытых ключей:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# Modulus
p = 606341371901192354470259703076328716992246317693812238045286463
# g is the generator point.
g = (160057538006753370699321703048317480466874572114764155861735009, 255466303302648575056527135374882065819706963269525464635673824)
# Alice&amp;#039;s public key A:
A = (460868776123995205521652669050817772789692922946697572502806062, 263320455545743566732526866838203345604600592515673506653173727)
# Bob&amp;#039;s public key B:
B = (270400597838364567126384881699673470955074338456296574231734133, 526337866156590745463188427547342121612334530789375115287956485)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Модуль $p$ здесь тоже неслучаен — в эллиптической криптографии как раз рассматриваются кривые над полем $\mathbb{Z}_p$. Позже, правда, мы пришли к выводу, что эллиптическая криптография тут совсем ни при чём... Но сначала мы внимательно изучили операцию сложения двух точек:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;def add(a, b, p):
  if a == -1:
    return b
  if b == -1:
    return a
  x1, y1 = a
  x2, y2 = b
  x3 = ((x1*x2 - x1*y2 - x2*y1 + 2*y1*y2) * modinv(x1 + x2 - y1 - y2 - 1, p)) % p
  y3 = ((y1*y2) * modinv(x1 + x2 - y1 - y2 - 1, p)) % p
  return (x3, y3)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Нейтральный элемент (он же &lt;i&gt;ноль&lt;/i&gt;) обозначен как $-1$, поэтому первые четыре строки функции очевидны. Функция $modinv(x, p)$ находит обратный элемент к $x$ в кольце $\mathbb{Z}_p$ с помощью расширенного алгоритма Евклида. Значит, сумма точек $(x_1, y_1)$ и $(x_2, y_2)$ это точка&lt;br /&gt;
$$\left(\frac{x_1x_2 – x_1y_2 – x_2y_1 + 2y_1y_2}{x_1+x_2-y_1-y_2-1}, \frac{y_1y_2}{x_1+x_2-y_1-y_2-1}\right)$$&lt;/p&gt;
&lt;p&gt;Дробь означает целочисленное деление в кольце $\mathbb{Z}_p$.&lt;/p&gt;
&lt;h2&gt;Упрощаем сложение&lt;/h2&gt;
&lt;p&gt;Математик во мне захотел разобраться с этой операцией. Больше всего смущали одинаковые знаменатели и сложный числитель первой координаты. Стало проще, когда я переписал числитель как $(x_1-y_1)(x_2-y_2)+y_1y_2$, а знаменатель как $(x_1-y_1) + (x_2-y_2)$. Давайте перейдём из системы координат $(x, y)$ в систему $(t, y)$, где $t = x-y$. Обратный переход тоже очень простой: $x = t + y$. Если переписать операцию сложения в новой системе координат, то получится&lt;/p&gt;
&lt;p&gt;$$(t_1, y_1) + (t_2, y_2) = \left(\frac{t_1t_2+y_1y_2}{t_1+t_2-1} – \frac{y_1y_2}{t_1+t_2-1}, \frac{y_1y_2}{t_1+t_2-1}\right) = \left(\frac{t_1t_2}{t_1+t_2-1}, \frac{y_1y_2}{t_1+t_2-1}\right)$$&lt;/p&gt;
&lt;p&gt;Получившаяся формула в некотором смысле даже симметрична. Это дало нам оптимизм на несколько следующих часов.&lt;/p&gt;
&lt;h2&gt;Мастер-секрет&lt;/h2&gt;
&lt;p&gt;Однако в скрипте само по себе сложение нигде не используются. Зато используется умножение точки на число:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;from secret_data import aliceSecret, bobSecret, flag

assert A == mul(aliceSecret, g, p)
assert B == mul(bobSecret, g, p)

aliceMS = mul(aliceSecret, B, p)
bobMS = mul(bobSecret, A, p)
assert aliceMS == bobMS
masterSecret = aliceMS[0]*aliceMS[1]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Настало время разобраться, что вообще происходит в скрипте и что нужно найти.&lt;/p&gt;
&lt;p&gt;$aliceSecret$ — это натуральное число, закрытый ключ Алисы, он умножается на известный нам генератор, и в результате получается известный нам открытый ключ Алисы. Аналогичное проделывается с ключами Боба. После этого открытый ключ Боба умножается на закрытый ключ Алисы, получая точку $aliceMS = aliceSecret \times bobSecret \times g$. Симметричная операция вычисляет $bobMS = bobSecret \times aliceSecret \times g$. Очевидно, что эти две точки должны совпасть, что и проверяется последним assert’ом. Мастер-секретом объявляется произведение координат этой общей точки. Этот мастер-секрет и надо найти, так как в конце скрипта он ксорится с флагом:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;def encrypt(message, key):
  return message ^ key

length = len(flag)
encrypted_message = encrypt(I(flag), masterSecret)
print &amp;quot;length = %d, encrypted_message = %d&amp;quot; % (length, encrypted_message)
# length = 31, encrypted_message = 137737300119926924583874978524079282469973134128061924568175107915062758827931077214500356470551826348226759580545095568667325&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Умножение в новых координатах&lt;/h2&gt;
&lt;p&gt;Раз для подсчёта мастер-секрета используется умножение, то вернёмся к нашим формулам и выясним, как точка в новых координатах $(t, y)$ умножается на число $k$. Переберём несколько маленьких коэффициентов:&lt;/p&gt;
&lt;p&gt;$$2(t, y) = (t, y) + (t, y) = \left(\frac{t^2}{2t-1}, \frac{y^2}{2t-1}\right)$$&lt;/p&gt;
&lt;p&gt;$$3(t, y) = 2(t, y) + (t, y) = \left(\frac{t^2}{2t-1}, \frac{y^2}{2t-1}\right) + (t, y) =&lt;br /&gt;
\left(\frac{\frac{t^3}{2t-1}}{\frac{t^2}{2t-1} + t – 1}, \frac{{\frac{y^3}{2t-1}}}{\frac{t^2}{2t-1} + t – 1}\right) =&lt;br /&gt;
\left(\frac{t^3}{3t^2-3t+1}, \frac{y^3}{3t^2-3t+1}\right)$$&lt;/p&gt;
&lt;p&gt;$$4(t, y) = 2(t, y) + 2(t, y) = \left(\frac{t^2}{2t-1}, \frac{y^2}{2t-1}\right) + \left(\frac{t^2}{2t-1}, \frac{y^2}{2t-1}\right)  =&lt;br /&gt;
\left(\frac{\frac{t^4}{(2t-1)^2}}{\frac{2t^2}{2t-1} – 1}, \frac{\frac{y^4}{(2t-1)^2}}{\frac{2t^2}{2t-1} – 1}\right) =&lt;br /&gt;
\left(\frac{\frac{t^4}{2t-1}}{2t^2-2t+1}, \frac{\frac{y^4}{2t-1}}{2t^2-2t+1}\right) =&lt;br /&gt;
\left(\frac{t^4}{4t^3-6t^2+4t-1}, \frac{y^4}{4t^3-6t^2+4t-1}\right) $$&lt;/p&gt;
&lt;p&gt;Умножать дальше становилось всё сложнее, поэтому пора найти закономерность. В числителях всё время получается $t^k$ и $y^k$, а в знаменателях видны биномиальные коэффициенты. Смотрите, $4t^3-6t^2+4t-1$ похоже на $t^4 + (4t^3-6t^2+4t-1)$, что в свою очередь равно $(t + 1)^4$. Так у нас появилась гипотеза, что знаменатель равен $(t+1)^k – t^k$.&lt;/p&gt;
&lt;p&gt;Итоговую формулу&lt;/p&gt;
&lt;p&gt;$$k \times (t, y) = \left(\frac{t^k}{(t+1)^k – t^k}, \frac{y^k}{(t+1)^k – t^k}\right)$$&lt;/p&gt;
&lt;p&gt;теперь можно доказать по индукции по $k$. Делать я этого, конечно же, не буду.&lt;/p&gt;
&lt;h2&gt;Решение&lt;/h2&gt;
&lt;p&gt;Задача будет решена, если мы узнаем закрытый ключ Алисы или Боба. В случае с Бобом нам достаточно найти такое $k \in \mathbb{Z}_p$, что $kg = B$. В наших новых координатах и формулах это выглядит так:&lt;/p&gt;
&lt;p&gt;$$\left(\frac{g_t^k}{(g_t+1)^k – g_t^k}, \frac{g_y^k}{(g_t+1)^k – g_t^k}\right) = (B_t, B_y)$$&lt;/p&gt;
&lt;p&gt;где $(g_t, g_y)$ — координаты генератора $g$ в системе $(t, y)$, а $(B_t, B_y)$ — аналогичные координаты точки $B$. Взяв из этого равенства первую координату, получаем:&lt;/p&gt;
&lt;p&gt;$$ \frac{g_t^k}{(g_t+1)^k – g_t^k} = B_t$$&lt;/p&gt;
&lt;p&gt;$$g_t^k = B_t ((g_t+1)^k – g_t^k)$$&lt;/p&gt;
&lt;p&gt;$$g_t^k (1 + B_t) = B_t (g_t+1)^k$$&lt;/p&gt;
&lt;p&gt;$$\left(\frac{g_t}{g_t+1}\right)^k = \frac{B_t}{1 + B_t}$$&lt;/p&gt;
&lt;p&gt;Чтобы найти искомое $k$, достаточно вычислить логарифм в кольце $\mathbb{Z}_p$, то есть решить задачу &lt;a href="https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D0%BA%D1%80%D0%B5%D1%82%D0%BD%D0%BE%D0%B5_%D0%BB%D0%BE%D0%B3%D0%B0%D1%80%D0%B8%D1%84%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5"&gt;дискретного локарифмирования&lt;/a&gt;. Здесь мы с Костей приуныли, потому что поняли, что зашли в тупик. Дискретное логарифмирование — задача, которую нельзя решить за нормальное время.&lt;/p&gt;
&lt;p&gt;Только через час Костя догадался проверить данный нам модуль $p$ на простоту. Совершенно неожиданно он оказался составным:&lt;/p&gt;
&lt;p&gt;$$p = 961236149 \times 951236179 \times 941236273 \times 911236121 \times 931235651 \times 921236161 \times 901236131$$&lt;/p&gt;
&lt;p&gt;Наверняка все знают, как посчитать дискретный логарифм по непростому основанию. А мы не знаем. Так что мы взяли бумажку и стали придумывать алгоритм.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;Когда-то Асанов рассказывал байку, что студенты УПИ обычно знают способ решить задачу, а студенты матмеха не знают. Зато студенты матмеха могут придумать решение. Кажется, теперь я понял эту байку.&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Дискретный логарифм по составному основанию&lt;/h2&gt;
&lt;p&gt;Пусть мы нашли дискретный логарифм от $b$ по основанию $a$ в кольцах $\mathbb{Z}_p$ и $\mathbb{Z}_q$. То есть мы нашли такие $n$ и $m$, что&lt;/p&gt;
&lt;p&gt;$$a^n \equiv b \pmod{p}$$&lt;br /&gt;
$$a^m \equiv b \pmod{q}$$&lt;/p&gt;
&lt;p&gt;Теперь мы хотим решить задачу в кольце $\mathbb{Z}_{pq}$, то есть найти такое $k$, что $a^k \equiv b \pmod{pq}$. Порядком числа $a$ в кольце называется такое минимальное натуральное $z$, что $a^z = 1$. Пусть число $a$ имеет порядки $u$ и $v$ в кольцах $\mathbb{Z}_p$ и $\mathbb{Z}_q$ соответственно. Тогда $b \equiv a^n \equiv a^{n + u} \equiv a^{n+2u} \equiv a^{n+3u} \equiv \dots \pmod{p}$ и $b \equiv a^m \equiv a^{m + v} \equiv a^{m+2v} \equiv a^{m+3v} \equiv \dots \pmod{q}$. Если мы найдём число, которое можно выразить и как $n + ?u$, и как $m + ?v$, то оно станет ответом задачи дискретного логарифмирования по модулю $pq$.&lt;/p&gt;
&lt;p&gt;Ну а найти такое число — дело техники и расширенного алгоритма Евклида. Если $n + ?u = m + ?v$, то $?u – ?v = m – n$. Если $m-n$ не делится на $НОД(u, v)$, то решения нет, иначе расширенный алгоритм Евклида решит это &lt;a href="https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%BE%D1%84%D0%B0%D0%BD%D1%82%D0%BE%D0%B2%D0%BE_%D1%83%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5#.D0.9B.D0.B8.D0.BD.D0.B5.D0.B9.D0.BD.D1.8B.D0.B5_.D0.B4.D0.B8.D0.BE.D1.84.D0.B0.D0.BD.D1.82.D0.BE.D0.B2.D1.8B_.D1.83.D1.80.D0.B0.D0.B2.D0.BD.D0.B5.D0.BD.D0.B8.D1.8F"&gt;линейное диофантово уравнение&lt;/a&gt;, и всё станет хорошо.&lt;/p&gt;
&lt;p&gt;Так как данный в задании модуль $p$ мы разложили на простые множители $p_1 \times p_2 \times \dots \times p_7$, которые к тому же получились не очень большими, то мы можем решить задачу дискретного логарифмирования в каждом из $\mathbb{Z}_{p_i}$. Соединить семь чисел в один большой ответ поможет описанный только что алгоритм.&lt;/p&gt;
&lt;h2&gt;Как решить дискретный логарифм для  $p_i$&lt;/h2&gt;
&lt;p&gt;Простые делители модуля $p$ были не очень большими, но и не настолько маленькими, чтобы дискретный логарифм можно было найти простым перебором. К счастью, есть алгоритм &lt;i&gt;Baby Steps Giant Steps&lt;/i&gt;, который позволяет сделать это намного быстрее — за $O(\sqrt{n})$. Его мы и реализовали. Да, мы думали о том, что Baby Steps Giant Steps уже реализован в куче библиотек, но лично меня это только раззадоривает — так интересно ведь всё сделать самому.&lt;/p&gt;
&lt;h2&gt;Как найти порядок элемента в кольце&lt;/h2&gt;
&lt;p&gt;На часах было уже около часа ночи, а мне предстояло запрограммировать на питоне поиск порядка элемента в кольце $\mathbb{Z}_p$. Теорема Эйлера шептала, что $x^{\phi(p)} \equiv 1 \pmod{p}$, но $\phi(p)$ могло оказаться не минимальным числом с таким свойством. Значит, искомый порядок — это делитель $\phi(p)$. Но делителей слишком много, чтобы перебирать их все. Так что пришла пора узнать более быстрый способ находить порядок элемента. На помощь пришла &lt;a href="http://cacr.uwaterloo.ca/hac/about/chap4.pdf"&gt;пдфка из интернета&lt;/a&gt;, в которой есть чудесный алгоритм 4.79, я реализовал его и научился быстро находить порядок элемента в кольце, зная разложение на простые множители у $\phi(p)$.&lt;/p&gt;
&lt;h2&gt;Заключение&lt;/h2&gt;
&lt;p&gt;Применив всю магию сверху, мы нашли закрытый ключ Боба $bobSecret$. Умножив его на открытый ключ Алисы, мы нашли мастер-секрет, который и выдал нам флаг:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;Master secret found: (254828745614253797280016043417264027645246572307317271091197847, 540509273347153402828726537667691800163306365090607497812000946)
Flag: CTF{Anyone-can-make-bad-crypto}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Если вкратце повторить всё наше решение, то оно перестаёт казаться страшным и длинным:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;переходим в систему координат $(t, y)$,&lt;/li&gt;
&lt;li&gt;вычисляем $a = \frac{g_t}{g_t+1}$ и $b = \frac{B_t}{1 + B_t}$,&lt;/li&gt;
&lt;li&gt;решаем задачу дискретного логарифма $a^{?} = b$ в кольце $\mathbb{Z}_p$, зная разложение $p$ на простые множители,&lt;/li&gt;
&lt;li&gt;умножаем полученный ответ на открытый ключ Алисы $A$, это и есть мастер-секрет,&lt;/li&gt;
&lt;li&gt;переходим обратно в координаты $(x, y)$, перемножаем координаты мастер-секрета, расшифровываем флаг.&lt;/li&gt;
&lt;/ol&gt;
</description>
</item>

<item>
<title>Заметка четвёртая. Идеальные продукты</title>
<guid isPermaLink="false">4</guid>
<link>https://andgein.ru/blog/all/4-perfect-products/</link>
<pubDate>Fri, 23 Jun 2017 16:51:55 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/4-perfect-products/</comments>
<description>
&lt;p&gt;Идеальных продуктов не существует. Но есть избранные, которые подобрались к этому титулу достаточно близко. Их я и называю идеальными, чтобы не повторять каждый раз мантру «почти идеальные».&lt;/p&gt;
&lt;p&gt;Идеальность нельзя померить. Она не коррелирует с количеством пользователей, не зависит напрямую от стоимости на рынке и вообще глубоко субъективна. То есть идеальный для меня продукт может показаться кому-то обычным приложением для заказа такси.&lt;/p&gt;
&lt;p&gt;Каждый раз, сталкиваясь с идеальным продуктом, я испытываю огромный кайф, даже если это просто упаковка от туалетной бумаги. Такие вещи формируют наше мировоззрение и воспитывают чувство красоты. На меня они повлияли больше, чем какие-нибудь произведения искусства вроде великих картин или музыкальных сочинений.&lt;/p&gt;
&lt;p&gt;Додо-пицца, железо от Apple, сиропы Монин, RDP, рюкзаки Deuter, Телеграм, Макдональдс, ReSharper, документация к Джанго, ИКЕА, Samsung Pay — я одинаково восхищаюсь всеми этим вещами.&lt;/p&gt;
&lt;p&gt;Несколько фактов об идеальных продуктах:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Идеальный продукт не получится, если не поставить перед собой цель сделать идеальный продукт.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Иногда продукт, выглядящий снаружи как идеальный, ужасен внутри. До тех пор, пока мы не знаем, что под капотом, он может оставаться идеальным&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Надо стремиться делать идеальные продукты. Получится это только у единиц, но для делающего в этом случае важен не результат, а процесс.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Делать идеальный продукт зачастую экономически невыгодно.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Наличие у вас идеального продукта не гарантирует успех.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В заключении надо лишь признаться, что я не сделал ни одного идеального продукта. И скорее всего не сделаю, по крайней мере не питаю таких надежд. Зато я точно несколько раз уже попытался, и это сделало меня лучше.&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка третья. Брошюра об ЛКШ</title>
<guid isPermaLink="false">3</guid>
<link>https://andgein.ru/blog/all/3-sis-guide/</link>
<pubDate>Tue, 13 Jun 2017 21:56:30 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/3-sis-guide/</comments>
<description>
&lt;p&gt;Три года назад, в июне 2014 года, директор Летней компьютерной школы Андрей Станкевич написал письмо во внутреннюю рассылку. Вот начало этого письма:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Есть мысль сделать небольшую методичку формата A6 на 1-3 разворота, напечатать ее промышленно на ламинированной бумаге и раздавать на регистрации в ЛКШ.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Большинству идея сразу не понравилась. Кто-то критиковал слишком маленький размер: пользоваться такой методичкой неудобно, нужно сделать как минимум А5, а лучше А4, кому-то размер показался слишком большим: нужно, чтобы бумажка помещалась в бейдж. Говорили, что вся база «Берендеевы поляны» будет усыпана бумажками в первый же вечер, а первое, вводное собрание, на котором детям рассказывают главные правила, все равно не уменьшится ни на минуту.&lt;/p&gt;
&lt;p&gt;Я был в меньшинстве: среди тех, кому идея пришлась по душе. Я видел, какую красивую брошюру выдают новичкам в Контуре, читал &lt;a href="https://vk.com/wall-36153862_705"&gt;руководство пользователя о Хакердоме&lt;/a&gt; и знал, что такие вещи можно сделать &lt;i&gt;хорошо&lt;/i&gt;. Оставалось лишь убедить в этом остальных:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Открытие — это двухчасовое перечисление того, что нельзя. Скука полнейшая, как ни пытаться ее разбавлять шутками.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Любой скучный текст куда интереснее запоминать и изучать, если он подается красочно и в интересной форме, легким и доступным языком. Если бы правила ЛКШ можно было бы изучить, играя в какую-нибудь игру — это было бы замечательно.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Хотите, чтобы большинство детей с радостью увезли книжки домой как сувениры? Тогда надо делать их красивыми, добавлять туда фотографии прошлых лет (дети найдут себя, своих знакомых, своих преподавателей), делать их интерактивными (сделать возможность вклеивать туда листочки с условиями практик? Страничка с контактами друзей на после-смены? Надо только включить фантазию).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Хотите, чтобы дети не боялись делать что-то из-за стеснения? Так надо добавить полезной информации, снабдив ее удобным оглавлением и красотой. Как работать со стиральной машиной? Как отметить день рождения? Почему в озере Лель нельзя купаться? И многое другое.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Украсить текст картинками тоже недостаточно — надо сделать его интересным, захватывающим. Нас опять ограничивает только фантазия. Да хоть опишите правила ЛКШ как переписанные правила  Хогвартса. Запретный лес — территория, куда нельзя заходить. Правый коридор третьего этажа — 10-й домик. Парад параллелей — конкурс между факультетами.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Короче, это может получиться очень клевая штука, обладатели которой будут гордиться, что на у них есть.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Вообще защищать новые идеи в ЛКШ тяжело. Несмотря на то, что многие вещи в итоге сделать всё-таки получается, большинство инициатив сталкиваются со шквалом критики. Надо иметь много терпения и сил, чтобы начать что-то действительно делать. И лучше не показываться на глаза другим без первых результатов.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;В большинстве случаев не стоит рассказывать об идее до тех пор, пока нет чего-то, на что можно посмотреть вживую&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Паша Маврин оперативно сделал первую версию брошюры:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="344" data-ratio="0.71074380165289"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_17-20-45.png" width="344" height="484" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_17-20-57.png" width="343" height="482" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_17-21-09.png" width="345" height="482" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_17-21-22.png" width="343" height="482" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_17-25-24.png" width="344" height="482" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_17-25-36.png" width="345" height="484" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Конечно, она была неидеальной. Даже плохой по многим параметрам. Никто из нас не умел ни писать нормальные тексты, ни рисовать нормальные картинки. У нас даже не было подходящих фотографий из ЛКШ. Но эта пдфка стала важной для меня: увидев её, я понял, что хочу поучаствовать в создании &lt;i&gt;хорошей&lt;/i&gt; брошюры:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Я тут повертел разные бумажки в руках, и мне показалось, что A5 лучше, чем A6. Чтобы читать А6, надо всматриваться — это практически как читать с телефона (с учетом полей и прочего). А5 — это все-таки форм-фактор планшета, его читать должно быть удобнее. Потребности положить в карман у школьников, скорее всего, не будет. Зачем? Будет лежать вместе с тетрадями и книгами. А это опять же А5, а не А6. На А5 можно уместить в два раза больше информации, фотографий, да и вообще — он, как ни удивительно, в два раза больше :-)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;В то время я только учился объяснять свои решения людям. Для меня было большой неожиданностью, что недостаточно просто озвучить правильный ответ, к которому я пришёл в своих размышлениях. После такого люди обычно обижаются и не соглашаются с моим &lt;i&gt;абсолютно правильным&lt;/i&gt; решением.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Объясняйте людям, почему вы приняли то или иное решение * &lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;i&gt;* если только не считаете их мудаками: тогда можно ничего не объяснять, всё равно бесполезно&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Я скачал себе Adobe InDesign и даже купил на него лицензию — очень уж мне хотелось сделать всё правильно и хорошо. Я потратил два или три полных дня на вёрстку четырёх страницы: сначала рисовал схемы на бумажке, потом осваивался с новым инструментом, затем подбирал фотографии и шрифты, и размещал всё на макете.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="868" data-ratio="1.4206219312602"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_17-53-42.png" width="868" height="611" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_17-53-54.png" width="868" height="612" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_17-54-05.png" width="869" height="611" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_17-54-18.png" width="868" height="610" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_17-54-31.png" width="868" height="610" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Глядя на эти страницы сейчас я вижу кучу ошибок: да такие, которые надо исправлять немедленно. Но тогда это было максимумом, на который я способен. Как ни странно, эту версию почти не критиковали в ЛКШ, и я взялся нарисовать и остальные страницы.&lt;/p&gt;
&lt;p&gt;В один из дней я открыл группу ЛКШ вконтакте и попытался найти фотографии, подходящие по качеству для печати в брошюре. Оказалось, что за пятнадцать лет таких фотографий набралось ужасно мало, около двадцати штук:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_18-17-57.png" width="1668" height="456" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;&lt;i&gt;Чтобы исправить это, летом того года я взял в руки чей-то фотоаппарат и пошёл снимать всё, что видел. Делать брошюру через год, в 2015-ом, было уже намного проще.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;В какой-то момент мне стало очевидно, что карта в середине брошюры должна быть большая, размера А3, и разворачиваться вниз, когда читатель дошёл до центрального разворота. Но, к сожалению, эту &lt;i&gt;очевидную&lt;/i&gt; мысль снова пришлось объяснять и доказывать остальным.&lt;/p&gt;
&lt;p&gt;Спустя много правок, замен картинки на обложке, споров про заднюю обложку, мы обо всём договорились, нашли деньги для печати и заказали брошюры. Я был на седьмом небе от счастья. Спустя три года брошюра немного потрепалась, но я до сих пор очень бережно её храню:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1280" data-ratio="1.7777777777778"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_18-31-17.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_18-31-28.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_18-31-41.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_18-31-45.jpg" width="1280" height="720" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Идея объединить на последней обложке фотографий людей и список экстренных телефонов, кстати, до сих пор считаю одной из самых удачных: получилось и красиво, и полезно.&lt;/p&gt;
&lt;h2&gt;2015 год&lt;/h2&gt;
&lt;p&gt;Прошёл год. Я был убеждён: нельзя просто взять и напечатать старые брошюры для уже новой ЛКШ. Во-первых, мы сделали летом 2014 года много хороших фотографий, а во-вторых за год я вырос в вопросах дизайна: не терпелось применить эти знания на практике.&lt;/p&gt;
&lt;p&gt;Поэтому я взял прошлогодний файл и начал его переделывать. Текст почти не изменился, зато появились обновлённое оформление и кайфовые фотографии.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="964" data-ratio="2.8187134502924"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_19-05-00.png" width="964" height="342" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_19-05-09.png" width="964" height="340" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_19-05-29.png" width="963" height="340" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-11_19-05-39.png" width="963" height="340" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;И даже нашлась для обложки подходящая ЛКШатская фотография.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1280" data-ratio="1.7777777777778"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_19-09-31.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_19-09-34.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_19-09-41.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_19-09-44.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_19-09-48.jpg" width="1280" height="720" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2&gt;2016 год&lt;/h2&gt;
&lt;p&gt;Наконец-то я осознал, что тексты в брошюре никуда не годятся, и сел их переписывать. На это у меня ушло две недели. Ушло бы и больше, но близился дедлайн, поэтому часть текстов так и остались непереписанными.&lt;/p&gt;
&lt;p&gt;Кроме того, я решил переделать оформление в духе минимализма. Избавился от больших цветных заголовков, полосок, сфокусировав внимание читателя на тексте и фотографиях.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-06-14_01-51-47.png" width="1106" height="546" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Брошюра, которая получилась в итоге, стала лучшей из всех. Я вложил в неё всё, чему научился за эти три года, и до сих пор получаю кайф, листая её. Похожие ощущения я испытывал несколько раз от своих PowerPoint-презентаций, когда замечал, что с каждым разом они становятся всё круче и круче.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Есть только один способ научиться делать что-то хорошо — сделать это достаточное количество раз. Каждый раз вы будете становиться всё лучше и лучше&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;В конце концов у брошюры 2016 года единственная за три год обложка, которая меня полностью устраивает.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1280" data-ratio="1.7777777777778"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_19-24-40.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_19-24-44.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_19-24-47.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_19-24-50.jpg" width="1280" height="720" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-11_19-24-53.jpg" width="1280" height="720" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Кстати, на карте в брошюре 2016 года я спрятал себя. Найдёте?&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/photo_2017-06-14_01-53-44.jpg" width="1280" height="720" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Когда-нибудь эти брошюры станут раритетом, а я буду гордиться, что их сделал я.&lt;/p&gt;
&lt;p&gt;В этом году я решил не делать брошюры для ЛКШ. Надеюсь, что остальные подхватят инициативу и сделают что-нибудь ещё более прекрасное. А чтобы им было проще, я выложил все пдфки и indd-файлики на гитхаб: &lt;a href="https://github.com/andgein/sis-guide"&gt;https://github.com/andgein/sis-guide&lt;/a&gt;. Это, к тому же, сочетается с идеей максимальной открытости, о которой я ещё обязательно напишу.&lt;/p&gt;
</description>
</item>

<item>
<title>Заметка вторая. О сервисе на PHDays CTF</title>
<guid isPermaLink="false">2</guid>
<link>https://andgein.ru/blog/all/2-phdays-ctf-2017-service/</link>
<pubDate>Wed, 17 May 2017 15:23:38 +0100</pubDate>
<author></author>
<comments>https://andgein.ru/blog/all/2-phdays-ctf-2017-service/</comments>
<description>
&lt;p&gt;&lt;i&gt;Продолжение истории о &lt;a href="/blog/all/1-unicode-and-csv-in-python/"&gt;необычном поведении&lt;/a&gt; юникода и CSV в питоне&lt;/i&gt;&lt;/p&gt;
&lt;h2&gt;Для тех, кому лень читать предыдущую заметку или вспоминать, о чём там было&lt;/h2&gt;
&lt;p&gt;Если использовать стандартные питоновские &lt;a href="https://docs.python.org/3/library/codecs.html#codecs.open"&gt;codecs.open&lt;/a&gt;, &lt;a href="https://docs.python.org/3/library/csv.html#csv.DictWriter"&gt;csv.DictWriter&lt;/a&gt; и &lt;a href="https://docs.python.org/3/library/csv.html#csv.DictReader"&gt;csv.DictReader&lt;/a&gt;, то можно столкнуться с интересным поведением. Создаём в программе файл в кодировке UTF-8, пишем туда с помощью DictWriter, а затем читаем через DictReader. Если в данных встречались юникодные символы Pararaph separator или Line separator, то мы считаем больше записей, чем было записано, а их CSV-структура будет поломана.&lt;/p&gt;
&lt;p&gt;Читайте &lt;a href="/blog/all/1-unicode-and-csv-in-python/"&gt;первую заметку&lt;/a&gt; для подробностей.&lt;/p&gt;
&lt;h2&gt;Как из этого получился сервис для классического CTF&lt;/h2&gt;
&lt;p&gt;В апреле мы с ребятами из Хакердома как раз готовили онлайновый CTF для форума &lt;a href="https://phdays.com"&gt;PHDays&lt;/a&gt;. Темой был выбран интернет вещей, а сервисами были умный чайник, термометр, дверной замок, телевизор и даже холодильник. Мне достался последний, потому что я слишком люблю еду.&lt;/p&gt;
&lt;p&gt;Чтобы органично встроить уязвимость в сервис, мне нужно было сделать так, чтобы кто-то писал в CSV-файл, а кто-то другой — читал. В итоге сервис состоял из двух частей — веб-приложения для удобного управления человеком и API для других умных кухонных гаджетов, которым нужна информация от холодильника.&lt;/p&gt;
&lt;p&gt;Веб-интерфейс позволял пользователям регистрироваться и создавать холодильные камеры или просто холодильники. У каждого холодильника был владелец, и увидеть чужие просто так нельзя. В холодильники можно добавлять еду. Для этого сначала было необходимо зарегистрировать новый продукт (например, картошку или молоко) и указать, в чём он измеряется — в граммах, пачках или литрах. Выглядело это так:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="1122" data-ratio="2.5384615384615"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-05-16_17-12-56-(2).png" width="1122" height="442" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-05-16_17-14-21.png" width="1125" height="676" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-05-16_17-23-56.png" width="1124" height="597" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-05-16_20-56-37.png" width="1127" height="398" alt="" /&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-05-16_20-58-25-(2).png" width="1159" height="584" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Кроме холодильников можно было создавать рецепты. Про каждый ингредиент рецепта известно, сколько и какого продукты нужно положить, а также что с ним надо сделать и сколько после этого подождать.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://andgein.ru/blog/pictures/2017-05-16_21-07-14.png" width="1122" height="669" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Рецепты были очень важны для функционирования сервиса, ведь в том самом API было всего две команды — получить список твоих холодильников и получить список рецептов, которые можно приготовить из еды, лежащей в одном из твоих холодильников. Звучит сложно, но идея очень простая — если у вас есть умная мультиварка, то она хочет узнать, какие блюда можно сегодня приготовить из продуктов, лежащих у вас в холодильнике.&lt;/p&gt;
&lt;p&gt;Принадлежность выдаваемых рецептов владельцу холодильника в API не проверялась, но должно было работать само: в рецепте должен присутствовать хотя бы один продукт из холодильника, а в холодильник мы можем добавлять только принадлежащие нам продукты. Моё молоко и молоко Васи — два разных продукта, я могу добавить в холодильники и рецепты только первое, а про второе даже не смогу узнать.&lt;/p&gt;
&lt;h2&gt;Уязвимость&lt;/h2&gt;
&lt;p&gt;Итак, где же тут наши подозреваемые — юникод и CSV?&lt;/p&gt;
&lt;p&gt;Сервис API не имеет доступа к базе данных, поэтому информация для него складывалась веб-приложением в специальные CSV-файлы, откуда считывались API-приложением раз в секунду. Вот пример такого файла:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;id,recipe_id,food_type_id,what_to_do,count,pause_after
1,10,15,Yhws aqx vpjhtlyhw ruv tbcyis,11,7
2,11,16,Ok jbso gtpzs ndgoz udeksmvk,10,16
3,12,17,Y ap mculltvedfwwabbnnnco um,6,19
4,13,18,cniyvdjsyuctaamupp zm  qj nwvm,10,9
5,14,19,Kfdvm ref wtb pdtitb,14,15&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В нём хранятся ингредиенты рецептов. Столбцы, соответственно — id ингредиента, id рецепта (сами рецепты лежат в другом файле), id продукта, что нужно сделать, сколько взять продукта и какую выдержать после этого паузу.&lt;/p&gt;
&lt;p&gt;Давайте посмотрим, что будет, если в поле what_to_do добавить тот самый Paragraph separator:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;6,15,20,blablabla 13503,14,20&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;При чтении этот файл будет выглядеть для DictReader’а как&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;6,15,20,blablabla 
13503,14,20&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;То есть так, будто мы добавили продукт №20 в рецепт №14. Продукт №20 принадлежит нам, значит, мы смогли добавить нашу еду в чужой рецепт №14! Теперь API сможет вывести этот рецепт, если в каком-нибудь из наших холодильников будет лежать продукт №20.&lt;/p&gt;
&lt;p&gt;Для полноты картины покажу, как выглядели сохранение и загрузка данных в CSV.&lt;/p&gt;
&lt;h3&gt;Сохранение:&lt;/h3&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;def dump_model_to_file(model, filename):
    # Use Django API to get all model fields
    columns = [field.attname for field in model._meta.fields]

    with codecs.open(filename, &amp;#039;w&amp;#039;, encoding=&amp;#039;utf-8&amp;#039;) as opened_file:
        # Open csv writer and dump header: special row with columns names
        writer = csv.DictWriter(opened_file, fieldnames=columns)
        writer.writeheader()

        # Iterate over all objects of the model
        for obj in model.objects.all():
            object_dict = {}
            for column in columns:
                # Don&amp;#039;t worry about newlines (\n and \r): csv.DictWriter will enclose such strings in quotes (&amp;quot;)
                # So I think there is no vulnerability here
                object_dict[column] = str(getattr(obj, column, &amp;#039;&amp;#039;))

            # Dump dictionary for current object
            writer.writerow(object_dict)&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;Загрузка:&lt;/h3&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;class Model:
    def __init__(self, dictionary):
        for key, value in dictionary.items():
            if value is None:
                value = &amp;#039;0&amp;#039;
            if value.isnumeric():
                value = int(value)
            setattr(self, key, value)


def load_models_from_file(filename):
    objects = {}
    with codecs.open(filename, &amp;#039;r&amp;#039;, encoding=&amp;#039;utf-8&amp;#039;) as opened_file:
        reader = csv.DictReader(opened_file)
        for row in reader:
            objects[model.id] = Model(row)
    return objects&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;Ещё две уязвимости&lt;/h2&gt;
&lt;p&gt;В Холодильнике мной была заложена ещё одна уязвимость. Но так получилось, что в итоге уязвимостей оказалось не две, а три. Так бывает на CTF, и в этом нет ничего страшного. Иногда бывает обидно, что ты заложил сложную уязвимость, а случайно оставил простую. Но в данном случае всё случилось удачно: незапланированная уязвимость была проще первой, а запланированная — совсем элементарной (правда, позволяла украсть только 20% флагов). Так как в целом соревнование получилось очень сложным, то появление одной незапланированной уязвимости средней сложности сыграло нам на руку.&lt;/p&gt;
&lt;p&gt;Итак, сначала о запланированной уязвимости. Каждый сервис находился в своём докер-контейнере. Докер (docker) — это удобный способ изолировать своё приложение от других, в линуксе работает за счёт его фирменных LXC-контейнеров и ограничений в cgroup. Подробнее о докере можно почитать на &lt;a href="https://docker.com/"&gt;официальном сайте&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Мой сервис состоял из четырёх докер-контейнеров: для веб-приложения, для API-приложения, для базы данных и для веб-сервера nginx. Во время старта первого накатывались миграции, собиралась статика и выполнялись другие служебные команды. В том числе такая:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# DON&amp;#039;T RUN IT IN PRODUCTION. SOME EVIL GUYS CAN BRUTEFORCE PASSWORD AND WHO KNOW WHAT HAPPENS...
echo &amp;quot;[+] [DEBUG] Django setup, executing: add superuser&amp;quot;
PGPASSWORD=${POSTGRES_PASSWORD} psql -U ${POSTGRES_USER} -h ${POSTGRES_HOST} -c &amp;quot;INSERT INTO auth_user (password, last_login, is_superuser, username, first_name, last_name, email, is_staff, is_active, date_joined) VALUES (&amp;#039;pbkdf2_sha256\$36000\$k36V24q60mNo\$v5og9qcgc2sqkVwGjZDKNK+wcJy60ix8DIt9E8Yg48c=&amp;#039;, &amp;#039;1970-01-01 00:00:00.000000&amp;#039;, true, &amp;#039;admin&amp;#039;, &amp;#039;admin&amp;#039;, &amp;#039;admin&amp;#039;, &amp;#039;admin@admin&amp;#039;, true, true, &amp;#039;1970-01-01 00:00:00.000000&amp;#039;) ON CONFLICT (username) DO NOTHING&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Эта команда добавляет напрямую в базу данных супер-пользователя с логином admin. Его пароль мы не знаем, так что сразу зайти под ним не можем, но доступен хеш от пароля: ‘pbkdf2_sha256$36000$k36V24q60mNo$v5og9qcgc2sqkVwGjZDKNK+wcJy60ix8DIt9E8Yg48c=’. Подбор пароля не занимает много времени, так как он словарный и встречается во всех списках самых частых паролей.&lt;/p&gt;
&lt;p&gt;Попрактикуйтесь — сможете ли вы подобрать пароль? pbkdf2_sha256 — это тип хеша и подписи, а 36000 — количество итераций. Справиться с задачей поможет hashcat, john the ripper или любой другой подборщик прообразов хешей.&lt;/p&gt;
&lt;h2&gt;Незапланированная уязвимость&lt;/h2&gt;
&lt;p&gt;Последняя уязвимость нашлась в функции добавлении продукта в холодильник. Здесь не проверялось, что вы являетесь владельцем добавляемого продукта. Можно было создать супер-холодильник, содержащий все продукты с номерами от 1 до 1000, а затем попросить API выдать рецепты, содержащие хотя бы какой-нибудь продукт из этого холодильника. Конечно, он находил и чужие рецепты, а вместе с ними выдавал и флаги, хранящиеся в описаниях этих рецептов.&lt;/p&gt;
&lt;h2&gt;Выводы&lt;/h2&gt;
&lt;p&gt;Никогда не используйте csv.DictReader/csv.DictWriter вместе с файлами, открытыми модулем codecs. В новых питонах открывайте CSV-файлы с помощью стандартной функции open, передавая ей аргументы encoding и newline.&lt;/p&gt;
&lt;h2&gt;Бонус для дочитавших до конца&lt;/h2&gt;
&lt;p&gt;Все исходники сервиса, докер-файлы, чекер для проверяющей системы и мой авторский эксплойт для первой уязвимости можно найти в &lt;a href="https://github.com/HackerDom/phdctf-2017"&gt;репозитории разработки&lt;/a&gt;, который мы открыли сразу после окончания соревнования.&lt;/p&gt;
</description>
</item>


</channel>
</rss>