Авва @avvablog Channel on Telegram

Авва

@avvablog


Чат на @avvablog_chat

Авва (Russian)

Добро пожаловать в канал "Авва"! Если вы ищете интересные и полезные статьи о жизни, отношениях, здоровье и многом другом, то это место идеально для вас. Наш канал @avvablog предлагает увлекательные публикации, которые помогут вам расширить кругозор, получить новые знания и поддержку. Чат @avvablog_chat - это место, где вы сможете обсудить статьи, обменяться мнениями и найти новых друзей с похожими интересами. Присоединяйтесь к нам прямо сейчас и обогатите свою жизнь интересным контентом от нашего канала "Авва"!

Авва

22 Nov, 22:22


Попался вопрос: "Как вы думаете, если случайно выбрать отрезок внутри квадрата 1x1 - его длина будет сильно меньше 0.5, сильно больше 0.5, примерно 0.5?"

Я не буду делать опрос, но подумайте, если вам интересно. Моя интуиция сказала мне "сильно меньше 0.5". Точный ответ в конце поста.

Сразу захотелось это самому решить. Формализовать задачу можно так: выбираем случайным образом координаты двух точек внутри единичного квадрата на плоскости (квадрата с углами 0,0 - 1,0 - 1,1 - 0,1). Всего выбрано четыре случайных числа между 0 и 1 каждое, независимо друг от друга. Каково матожидание длины отрезка между двумя точками?

Это записывается очевидным образом в виде "четверного" интеграла по переменным x1,y1,x2,y2 - каждая от 0 до 1 - а под интегралом расстояние между точками (x1,y1) и (x2,y2), т.е. sqrt((x2-x1)^2 + (y2-y1)^2). Как вычислить этот интеграл?

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

Строка на Питоне такая:
> python -i
import numpy as np
from numpy.random import random as r
np.mean(np.sqrt(np.square(r(1000)-r(1000)) + np.square(r(1000)-r(1000))))

Объяснение для тех, кто не знает питон/numpy: здесь r(1000) генерирует вектор из 1000 случайных чисел между 0 и 1, а минус, плюс, square(), sqrt(), mean() работают на векторах по-элементно. Так что эта строка создает 1000 пар точек, находит расстояние между каждой парой и берет среднее арифметическое тысячи расстояний.

Интеграл я сам не осилил (вообще в интегралах очень слаб, но поэтому и захотелось разобраться, в частности), и пошел искать подсказок. Нашел как точный ответ, так и достаточно объяснений о том, как его вычислить, так что смог сам ручкой на бумаге медленно разобраться и все подробности себе объяснить. Точный ответ поражает своей неуклюжестью: в нем соседствуют не только квадратный корень из двух и натуральный логарифм, но и совсем непонятные числа типа 15:

(2+sqrt(2)+5*ln(1+sqrt(2))) / 15

Интересно, что при всем обилии математических видео в Ютубе я не нашел видео, которое объясняло бы от начала до конца, со всеми подробностями, вывод этого ответа. Даже замечательный Майкл Пенн, посвятивший этому вопросу 20-минутное видео, в конце заканчивает так: "ну тут осталось несколько интегралов, про каждый из которых можно записать отдельное видео... короче, если их решить, окончательный ответ будет вот такой". По-моему, он пошел слишком длинной дорогой - это не так уж страшно в итоге. Если кто-то хочет, чтобы я написал подробное объяснение, мигните в комментариях, постараюсь найти время, если будет спрос.

Да, и последнее. Я корпел, корпел и дошел до ответа на бумаге - и он оказался неправильный, похожий на тот, что выше, но не совсем; и численное значение отличалось. Очевидно, где-то была ошибка, но я не мог ее найти. Вспомнив про культуру вычисления (см. выше), я устроил себе такой "дебаггинг": написал на питоне простую функцию интеграции в три строки (оценка по разбиению на N=1000 интервалов), и один из другим ввел в скрипт вычисление промежуточных интегралов и выкладок, которые у меня записаны были на бумаге. Когда конечное значение после очередного шага расходилось с правильным, я знал, что в выкладках "баг". Так нашлись две мелкие ошибки, после исправления которых все вышло правильно. Мне этот процесс откровенно понравился.

А, да, по-настоящему последнее. Средняя длина отрезка внутри квадрата 1x1 равна примерно 0.52.

Авва

21 Nov, 12:55


Чёта ржу

Авва

19 Nov, 16:21


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

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

Мораль для программистов: периодически проверять, что бэкапы действительно содержат бэкапы, и системы для аварийного переключения (failover) действительно аварийно переключаются.

Авва

18 Nov, 09:10


Мне понравилась дискуссия в прошлой записи с задачкой по физике. Давайте попробуем еще раз. Эта попалась мне на днях и заставила подумать, не только о том, как решать, но и какие предположения сделать.

Вопрос: какого максимального размера может быть астероид, с которого вы можете убежать с помощью прыжка вверх?

Авва

15 Nov, 10:24


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

[автор переходит на учебу физике и успешно заканчивает докторскую степень в другом университете]

Но как только я получил докторскую степень по физике, я оставил физику навсегда (как и в математике в Беркли, у меня также были очень травматичные переживания в физике в Орегоне, к моему большому шоку и разочарованию), и я в итоге перешёл в когнитивную науку – область, в которой изучается природа самого мышления, которая является гораздо менее математической дисциплиной, и она определённо не требует тех же видов высоких абстракций, которые так сильно сломали мой мозг, когда я был в Беркли."

[источник. В конце статьи Хофштадтер приводит несколько примеров книг, открывающих путь в математику для интересующегося подростка или взрослого]

Авва

15 Nov, 10:24


Даглас Хофштадтер (автор «Гёдель, Эшер, Бах: эта бесконечная гирлянда») опубликовал статью лет 10 назад, с ответами на вопросы восьмиклассницы о его отношениях с математикой, что ему было трудно в ней, какие он советы даст школьникам итд. Он открыто и откровенно говорит там о своих сложностях, используя метафоры "потолка абстракции" и разреженного воздуха альпиниста, и его впечатления покажутся знакомыми многим, я думаю - несомненно мне они знакомы. Привожу длинные отрывки в переводе с англ.:

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

Как я это формулирую теперь, в начале аспирантуры по математике "я ударился головой о свой потолок абстракции" – и что забавно в этом в остальном очень огорчительном образе, так это то, что так называемый "потолок абстракции" находился внутри моей головы! Это было внутреннее ограничение моего мозга или разума! Так что нужно представить, как мой череп ударяется прямо в жёсткое препятствие, которое находится внутри самого черепа – ой!

До того травматического события в Беркли, когда мне было около 22 лет, я ни на мгновение не подозревал, что в моей голове существует такая вещь, как "потолок абстракции". Я всегда считал само собой разумеющимся, что моя способность усваивать абстрактные идеи в математике будет продолжать расти по мере получения новых знаний и опыта в математике, как это было в школе и колледже. На самом деле, я специализировался на математике в Стэнфорде, и за четыре года учёбы там я провёл множество самостоятельных исследований определённых видов закономерностей в теории чисел и сделал массу открытий, которых никто из моих профессоров никогда не видел, и процесс совершения этих прекрасных открытий полностью опьянил меня, заставив поверить, что у меня есть всё необходимое, чтобы стать математиком мирового класса. Это было восхитительное, прекрасное, захватывающее чувство, и оно длилось несколько лет, но в конце концов, увы, оказалось иллюзией.

Как я говорю, я обнаружил через пару лет, когда учился в аспирантуре по математике, что просто не способен усваивать идеи, которые было необходимо усвоить для того, чтобы стать высококлассным профессиональным математиком. Или точнее, если я и мог их усвоить, то только черепашьим шагом, и даже тогда моё понимание всегда оставалось размытым и нечётким, и я постоянно должен был возвращаться назад, чтобы пересматривать и освежать мои слабые познания. Вещи на том разреженном уровне абстракции (теория групп, теория колец, теория полей, теория Галуа, топология и т.д. - фундаментальные курсы, которые были обязательны для всех аспирантов в Беркли) просто не задерживались в моей голове так, как более конкретные темы из программы бакалавриата (математический анализ, комплексные переменные, теория чисел, математическая логика). Это было похоже на пребывание высоко в горах, где атмосфера становится настолько тонкой, что внезапно становится трудно дышать и даже ходить. Если альпинист не знает, что атмосфера становится всё более разреженной по мере подъёма, то в какой-то момент на очень высокой горе он будет застигнут врасплох и озадачен своей внезапной неспособностью продолжать восхождение в том же темпе, что и раньше – его шокирует то, что он замедлился до ползания или полной остановки. Это будет смущающий, пугающий и отрезвляющий опыт.
👇

Авва

15 Nov, 08:24


В "Новой Газете Европа" очерк о Нелли Блай, американской журналистке, которая в 1889-м году обогнула земной шар за 72 дня, повторив замысел героя Жюля Верна (роман "За 80 дней вокруг света" вышел в 1873-м году).

Забавно пишут: "Блай с комфортом и без особых приключений, если не считать морскую болезнь, пересекла Атлантику и, заскочив в лондонский филиал New York World, отправилась поездом во французский Амьен." Вот просто так взяла и из Лондона отправилась поездом во французский Амьен, а что такого?

Well, the joke's on me, как говорили американцы наверняка уже во время Блай, потому что в ее время именно так можно было сказать, и заметка в ее газете о начале ее путешествия говорит, что она на "индийском почтовом" поезде отправится из Лондона в Кале, Париж и Турин. Пассажиров и почту перемещали на паром, а в Кале обратно на поезд, который, хоть и физически не тот, на котором они ехали из Лондона, был все тот же "индийский почтовый".

Еще забавное из той же заметки 1889 года: "Nelli Bly Starts Out on a Wondrous Flying Trip around the Globe". Ну да, flying trip, а что такого? Она будет мчаться (на поездах) словно птица!

"Ghormley, the man dressmaker, builded her camel's hair gown in a day". Вариант builded, наряду с built, использовался еще Шекспиром, но постепенно вымер и осталось одно built; не знал, что в 1889-м году это еще было нормально.

Из книги Блай о ее путешествии (прочитаю, наверное, живо написано; перевожу с английского):

"Теперь я была во Франции, и начала задумываться о том, какова была бы моя судьба, если бы я оказалась тут одна, как предполагала изначально. Я знала, что мой спутник говорит по-французски – на языке, на котором говорили все окружающие нас люди, поэтому чувствовала себя совершенно спокойно в этом отношении, пока он был со мной.

Мы заняли места за столом, и он начал делать заказ на французском языке. Официант смотрел на него непонимающе, пока наконец, скорее в шутку, чем всерьёз, я не предложила перейти на английский. Официант взглянул на меня с улыбкой и ответил по-английски."

Приятно знать, что есть вещи, которые во Франции не меняются за сто лет.

Авва

14 Nov, 15:57


"Гиппократ. Может быть, на этот раз ты отложишь в сторону свой метод и попросту ответишь на мой вопрос? Боюсь, что сам я не способен найти разумный ответ.

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

(Альфред Реньи, "Диалоги о математике")

Авва

13 Nov, 17:01


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

Понравилось это описание Пала Эрдеша из ветки в твиттере про IQ и гениальность.

Авва

13 Nov, 10:03


Понравилась задача из учебника физики, что я сейчас читаю:

На весах стоит бочка весом в 10кг. В нее льют воду с высоты 5 метров со скоростью 60 кг в минуту. Что покажет шкала весов через минуту после того, как начали лить воду?

Авва

12 Nov, 06:37


СЯУ, что в 2019-м году Теренс Тао опубликовал статью, продвигающую человечество на тяжелом пути к доказательству гипотезы Коллатца (гипотеза Коллатца говорит, что если начнешь с любого числа, и выполняя X = X/2 для четных и X=3X+1 для нечетных, всегда придешь к циклу 4-2-1). Тао доказал намного намного более слабый результат, что "почти все" в определенном смысле начальные точки не уходят в бесконечность слишком быстро, но тем не менее это прогресс в области, в которой его почти не было очень долго.

Хочется отметить, что абстракт статьи Тао (которую я совершенно неспособен понять) звучит, как будто случайные слова накидали в кучу для троллинга:

"Our proof proceeds by establishing an approximate transport property for a certain first passage random variable associated with the Collatz iteration (or more precisely, the closely related Syracuse iteration), which in turn follows from estimation of the characteristic function of a certain skew random walk on a 3-adic cyclic group at high frequencies. This estimation is achieved by studying how a certain two-dimensional renewal process interacts with a union of triangles associated to a given frequency."

Случайное блуждание... на 3-адической группе?... на высоких частотах?... объединение треуголь... чего?

Авва

11 Nov, 18:36


ТЕОРИЯ 2. A - это все еще чистые исходные данные, но порча в B иногда ставила бит в 1, иногда в 0.

Изменения в бинарных файлах не могут легко помочь подтвердить или опровергнуть эту теорию. Текстовые CSV файлы - другое дело. В них встречаются только символы: 0-9, английский алфавит (только первая строка заголовка, нерелевантна, слишком редка, чтобы попасть под порчу), запятая, точка (десятичная), перенос строки (коды 13 и 10 - перенос строки под Windows это два символа, а эти файлы писала программа в C++ под Windows).

Быстро находим много строк такого типа:

filename.csv: offset 1234: 14 != 10, diff. 4

Это опровергает ТЕОРИЮ 2: эта порча создалась изменением переноса строки 10 в 14, но в файле A как раз записано 14, значит, он испорченный. К сожалению, это означает, чистого экземпляра всех данных у нас просто нет. Значит ли это, что все потеряно?

Предположим, что между A и B есть разница: которую можно схематически обозначить так: xXxxxxxx и xxxxxxXx. Есть +4 в одном байте и -4 в другом, в разных файлах или даже в одном. Казалось бы, это значит, что бит менялся
случайным образом. Но есть и другая возможость: что в исходном O было xxxxxxxx, и бит менялся в сторону увеличения дважды, при записи O->A и O->B, в разных местах.

ТЕОРИЯ 3. A и B оба испорчены, но во время копирования 3-й бит менялся произвольным, случайным образом.

ТЕОРИЯ 4. A и B оба испорчены, но во время копирования 3-й бит всегда ставился в 1.

Если верна ТЕОРИЯ 3, то у нас нет шансов восстановить чистые данные. Кое-где, как в различии 14 != 10, мы знаем, что там было 10, но если это 51 != 55 (цифры "3" и "7"), мы никак не можем узнать, какая цифра правильная. И в бинарных файлах нет шансов узнать.

Если же верна ТЕОРИЯ 4, то мы можем восстановить чистые данные почти целиком: надо просто исправить все байты в B, которые на 4 больше байтов в A, а те, которые на 4 меньше, оставить как есть - они как раз правильные. Крайне маловероятно, что где-то есть порча, попавшая на тот же байт в A и B в разное время копирования. Возможно, мы упустим небольшое количество испорченных данных, которые были скопированы с O на A, а потом без изменений с A на B, но тут уж ничего не поделаешь - они вообще не в списке наших измененных файлов.

Можно ли понять, какая из теорий верна? Можно. Если верна ТЕОРИЯ 3, то должно быть свидетельство именно падения бита из 1 в 0. Различие типа 51 != 55, где оба байта законны в CSV, не может таким считаться. Различие типа 10 != 14 доказывает как раз обратное: что было возрастание бита из 0 в 1, потому что 14 в исходном файле не было. Какой символ имеет выставленный 3-й бит, но если его сбросить, получается символ, который не бывает в CSV?

Это запятая. ASCII-код 44, если сбросить третий бит, выходит 40 - код левой скобки "(", которая в CSV не встречается. Запятых в CSV-файлах много, больше чем переносов строки. Примеров "10 != 14" в моем файле десятки. Примеров "40 != 44" ни одного. Вывод: ТЕОРИЯ 3 неверна, и все-таки бит всегда выставлялся в 1. Верна ТЕОРИЯ 4, и мы можем восстановить побитые файлы. Скрипт, который это делает, работает прямо сейчас.

(честности ради должен добавить: изначально я думал, что одна только запятая доказывает мои рассуждения, и мне нравилась эта драматичность. Оформляя эту запись, я осознал, что и точка, и carriage return (код 13, часть переноса строки) тоже дают свидетельства того же самого. Уже не так драматично, но истина дороже)

Авва

11 Nov, 18:36


Продолжение и окончание истории об испорченных данных, начало см. https://t.me/avvablog/2491

Испорченные данные возвращаются!

В комментариях к прошлой записи меня не раз спрашивали, почему я просто не сделал rsync между двумя иерархиями файлов. На это у меня есть сразу три ответа, два из них пустяшные (надо найти и установить rsync под Windows; мне было любопытно разобраться, где и что испорчено), а третий важный: я не знал только, а лишь подозревал, что копия данных в Америке - чистый неиспорченный экземпляр. Анализ файлов должен был эту версию подтвердить.

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

Вернемся к началу и проведем учет того, что у нас есть. А есть у нас три массива данных, в идеале идентичных, назовем их O, A и B. O - это данные экспериментов, которые записывались на встроенный диск компьютера во время самих экспериментов. A и B - это подключаемые внешние SSD-диски. Размер диска O всего 1 терабайт, а данных генерировалось сотни гигабайт в день, поэтому во время исследования мы периодически сбрасывали данные с O на A и B, а потом стирали на O. Несколько раз мы торопились и копировали только на A или только на B, а потом отдельно копировали между ними - но это было реже. В каком порядке в точности что копировалось откуда и куда, сейчас уже никто не помнит. В конце всей этой вакханалии на O почти ничего не осталось, а на A и B были идентичные - по замыслу - копии всех данных. A остался в Америке, а B уехал в Израиль. И все было бы хорошо, если бы не плохой бит в памяти компьютера. (Да, в следующий раз мы все сделаем по-другому и лучше).

Итак, я скопировал все файлы A, у которых контрольная сумма отличается от B, в одно место с B, и запустил программу, которая находит все отличия. Программа написала мне лог-файл из 350 тысяч строк такого типа:

filename: offset 139709: 51 != 55, diff. -4

Для каждого различия написано, в каком файле и на каком смещении, приведен байт из Α и байт из B, и разница между ними.
Когда я писал запись, в этом файле, который продолжал создаваться, были только строки с разницей -4, что подтверждало следующую теорию (мне также казалось логичным, что порча была внесена во время одной сессии массивного копирования именно на B):

ТЕОРИЯ 1. A - это чистые исходные данные , а порча в B всегда состоит в том, что третий бит ставится в 1.

Но когда сравнение всех файлов закончилось, оказалось, что есть также много строк в другую сторону:

filename: offset 14467: 56 != 52, diff. 4

Это опровергает ТЕОРИЮ 1.

У нас есть файл всех изменений, который можно легко изучать с помощью текстового поиска (я настоятельно рекомендую программу ripgrep). Давайте разбудим нашего внутреннего Шерлока Холмса, усядемся поудобнее в мягком кресле, раскурим трубку и подумаем: что там могло случиться?
👇

Авва

11 Nov, 12:48


Предположим, у меня есть какая-то система, которая измеряет некое физическое значение, и я намерил много сэмплов x_1, x_2, ... x_n, разумеется с какими-то ошибками. Я хочу использовать "среднее" значение в качестве наилучшего приближения к истинному, какое я пока что смог найти. Я знаю, что среди моих данных могут быть выбросы (outliers) и помехи. Какое именно среднее взять? (если я верно понимаю, на научном языке это называется "найти центральную тенденцию". Я никогда не учил статистику формально)

Напрашиваются, скажем, варианты:

- среднее арифметическое (mean)- медиана (median)
- отбросить N% самых крайних данных, считая их выбросами (trimming), и взять среднее арифм. - заменить N% самых крайних данных на ближайшие к ним, и взять среднее арифм. (winsorizing)
- взять среднее арифм. (или медиану?) данных, лежащих в интервале 25% - 75% всех значений- взять среднее арифм. (или медиану?) данных, лежащих вокруг стандартного отклонения всех данных от их медианы
- отбросить данные, лежащие за пределами 3 медианных отклонений от медианы (MAD = Median Absolute Deviation) и взять среднее арифм. того, что осталось. - ?

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

Спасибо.

Авва

09 Nov, 10:31


(для программистов и сочувствующих)

Слетали летом в командировку в Америку, получили много экспериментальных данных разных людей, привезли обратно в Израиль и стали анализировать. Данные занимают примерно два терабайта, уместились на одном SSD-диске. В Америке у партнеров осталась оригинальная копия (странное словосочетание, если задуматься).

Через пару месяцев обнаружили, что данные слегла подпорчены. Там на 99% бинарные файлы, а 1% - большие файлы .CSV с числами, числами, числами внутри. По ряду причин все данные хранятся как обычная большая файловая иерархия (а не, скажем, zip-архивы или база данных).

Код на питоне читает CSV-файлы с помощью библиотеки Pandas, которая подбирает для каждой колонки наиболее узкий тип данных - т.е. если в файле в 3-й колонке везде числа с плавающей точкой, это будет float, а если иногда что-то другое, будет string для всех. Обнаружилось, что в некоторых файлах числовые данные читаются как string, что потом приводит к странным результам, когда с ними делают числовые операции. Когда я стал разбираться, почему так, обнаружил, что мегабайтном файле, целиком состоящем из чисел, записано в одном месте "число" -0.053208=523, и этот знак = все портит. Всего таких испорченных csv-файлов оказалось мало, около 3%. Но я не знал, есть ли подобные ошибки также в бинарных файлах.

Если бы данных было меньше, я бы просто скопировал из Америки. Но копировать 2TB было немного болезненно, и заодно хотелось разобраться, откуда взялась порча и сколько ее. Поэтому я сделал следующее:

- запустил рекурсивный md5sum на все дерево в Америке и дома (10 миллионов файлов)
- скопировал файлы с контрольными суммами в одно место и сравнил, нашел, сколько файлов отличаются по сумме (300 тысяч), сгенерировал список этих файлов
- в Америке сделал zip-архив только с оригиналами испорченных файлов (80GB), скопировал в Израиль, раскрыл
- набросал скрипт, который прошелся по оригиналам, сравнил с испорченными копиями.

Оказалось следующее:

- испорчен примерно один байт из каждых 300 килобайт, т.е. 0.0003% данных
- порча есть в файлах всех типов, и бинарных, и CSV, просто в CSV заметили раньше
- порча всегда одного вида: третий бит с конца становится 1, неважно, был он до того 0 или 1. Т.е. значение байта увеличивается на 4 (или не меняется, если и так этот бит стоял).
- при этом в файлах CSV, состоящих почти целиком из цифр и запятых, происходит следующее. Запятые не меняются, их ASCII-код содержит этот бит. Цифры 0,1,2,3 переходят в 4,5,6,7 и мы эту порчу не заметили. Цифры 4,5,6,7 остаются как есть. И только 8,9 переходят в <,= и это дает вышеописанный эффект в чтении файла из питона. Поэтому только когда очень редкая порча попадает именно на текстовый файл, и в нем на одну из этих двух цифр, получается испорченный файл, который мы замечаем.

На данный момент моя лучшая версия - это плохая память в десктопе или лаптопе, на котором мы копировали все данные с диска-оригинала на диск, который взяли с собой домой. Видимо, сбоит один бит в одном байте памяти. Копировали с помощью Windows-программы robocopy. То, что в длинных последовательностях бинарных файлов одного размера ошибка почти всегда оказывается на одном оффсете от начала файла, косвенно подтверждает это объяснение. Альтернатива - это что какая-то херня происходит в контроллере SSD-диска, кажется маловероятным, но я недостаточно понимаю, как там все устроено. Других вариантов вроде нет.

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

(Сначала я хотел написать "копировать архивами, даже и без сжатия можно, просто чтобы была контрольная сумма", но если порчу вносит плохой бит в памяти во время *чтения* с диска, то архиватор создаст отличный архив с правильной суммой и плохими данными)

Прикольно.

Авва

06 Nov, 10:57


Лучшие языковые модели сегодня вполне можно использовать как тьютора для понимания учебников университетской программы, помощи с решением задач итд. При этом нельзя полагаться на них целиком, но если переспрашивать в подозрительных местах, они исправляются. Эксперимент, который поставил сегодня утром - попросил ответить на качественный вопрос ("объясните физический смысл") из учебника механики.

В учебнике ответа нет, но это очень простой пример и несомненно модель во время тренировки видела аналогичные модели и обсуждения много раз. Модель дает подробный убедительный ответ, но утверждает, что качание происходит совпадает по фазе с приложенной силой - на самом деле противоложно. Если спросить, что не так, исправляется и объясняет подробно, почему.

Авва

06 Nov, 00:52


В принципе, мне кажется, что в ночь, когда в Америке выборы, лучше не спать. Потому что если "они" хотят тебя перенести в плохой таймлайн, то в полном сознании это требует: заморозить время локально, сделать дамп сознания в файл, перенести в другую ветку, там заморозить время, восстановить, запустить... короче, морока, и может им лень просто будет. А со спящим все проще, его можно тупо cut&paste, он ничего и не заметит, а если заметит, будет частью сна.

Но сегодня мне как-то совсем не с руки, устал, еще и не выспался вчера... короче, иду спать, си ю туморроу, где проснемся, там и проснемся. Удачи нам всем.