109.5
Karma
0.4
Rating
Ярослав Сергиенко @pallada92

Визуализация данных и frontend в ИСИЭЗ ВШЭ

Чётные числа Фибоначчи

+1
Кстати, есть ещё одна прикольная задача про сумму первых n четных чисел Фибоначчи, которая решается за О(1). Сумма чисел Фибоначчи от 1 до 3n равна числу Ф. с номером 3n + 2, с другой стороны это удвоенная сумма первых n четных чисел Ф. т. к. каждое чётное равно сумме двух предыдущих, а они как раз идут группами по три. То есть ответ что-то вроде F(3n+2) / 2, который считается напрямую по формуле Бине.

Как технологии манипулируют вашим разумом: взгляд иллюзиониста и эксперта по этике дизайна Google

+4
#3 А вы уверены, что в прошлом переводе не было пропущено что-то важное?

Почему размытие плохо скрывает конфиденциальную информацию

+1
По большей части это работает, поскольку нет удобного способа обратить размытие обратно в достаточно детализированное фото, чтобы распознать лицо.

Наоборот же, нейросети вроде хорошо работают на размытых изображениях. На основе этого как раз работает капча, которую люди не могут пройти: http://www.humansnotinvited.com

Иллюзия разумного замысла

+10
То, что первые 3/4 статьи должны быть связаны с последними 1/4 — иллюзия разумного замысла.

Нужно ли чистить строки в JavaScript?

+6
Спасибо за статью, не знал об этом. Из статьи подумал, что у строки может быть только один родитель, тогда конкатенация с другой строкой должна решить проблему. Но, оказывается, все ещё сложнее: внутри V8 строки представляют собой ориентированый граф из узлов, у каждого из которых есть упорядоченное множество родителей. Тогда конкатенация делается очень быстро добавлением общего корня к двум узлам. Но иногда это может ухудшить производительность и есть библиотека github.com/davidmarkclements/flatstr, которая делает этот граф одноуровневым.

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

Новые рубежи в Физике

+9
Новые рубежи в Физике

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


Алгоритм Эйлера для численного интегрирования просто следует векторному полю в соответствие с начальной позицией через нахождение производной уравнения (-v/m для нашего примера с силой трения) для определения наклона в текущей точке, и затем просто продвигается шаг за шагом во времени, в зависимости от неизменяемой величины h, по линии наклона

Для физических движков еще часто используют интегрирование Верле. Если в методе Эйлера хранится текущее положение и скорость, то тут хранится предыдущее положение и текущее. Это позволяет накладывать на положение точки дополнительные ограничения (сделать жесткие перекладины между объектами, отталкивание объекта от стены), которые будут обрабатываться более устойчиво, чем в методе Эйлера. Если нужно использовать скорость, то используют velocity Verlet.


Очевидно, что метод Эйлера дает небольшую погрешность с каждым временным шагом, т. к. реальный вектор скорости (а поэтому и кривая решения) изгибается с отклонением в каждой точек, и алгоритм Эйлера немного отступает от угла наклона. Но если временной шаг, h – довольно малые величины, погрешность стремится к нулю.

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

Выпущен шлем виртуальной реальности для пожилых людей

0
Это устройство создано специально для людей старшего поколения

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

Самый худший UI управления громкостью звука

+7
Если бы конкурс проводили сейчас, выиграл бы воксельный регулятор с рей трейсингом на steam.

И снова волк в овечьей шкуре

+5
Куда смотрит Роскомнадзор? Персональные данные россиян на серверах Cloudflare!

Теория гиперсмыслов

+2
Чтобы всё смотрелось предельно просто, понятно и минималистично — но при этом охотно отзывалось на внимание, послушно раскрываясь, «распаковываясь» в ответ, содержательно расцвечиваясь новыми полезными смыслами.

https://www.artlebedev.ru/posters/


А как бы смотрелась страничка, если бы всё было крупнее и контрастнее? Она, скорее всего, смотрелась бы перегруженной. И вызывала бы не столько желание её изучить, сколько желание с неё уйти.

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

Как я хакера ловил

Как я хакера ловил

+1
Я не очень понимаю, как вообще работают мошеннические схемы с выводом денег при онлайн-оплате картами. Разве при оплате картой они не перечисляются со значительной задержкой, во время которой клиент может оспорить платеж? А если много клиентов требуют вернуть деньги, банк должен вообще заблокировать счет. Плюс для снятия денег, наверное, нужно предъявить кучу документов.

Как я хакера ловил

+17
Я задумался, а тот, кто взламывает хакера, может тоже быть обвинен во взломе или соучастии? Тем более автор скачал дамп, содержащий данные этих карт. Или это квалифицируется как самооборона?

P.S. Что-то SQL инъекция слишком очевидная. Что если это ложная панель управления?

P.P.S. А что если автор этого сайта хотел подставить gelloiss? Зачем в админке с очевидной инъекцией гордо указывать автора? Если я не путаю, из статьи понятно, что Юрий Искра доказал, что он владелец gelloiss.ru, но не сайта milleniumfilm.ru. (хотя gelloiss создал telegram-чат, можно ли подделать создателя чата?)

Что даёт софт для рекрутинга в деньгах

0
Спасибо за статью, было интересно увидеть поминутный разбор рабочего дня рекрутера. Мне кажется, что такой софт экономит кучу времени засчет ведения единой базы, когда в один клик можно увидеть переписку и резюме кандидата, а также сводку по сторонним сайтам поиска работы, но это время трудно измерить т. к. оно складывается из сэкономленных минут на протяжении всего процесса.
1) Мне всегда было интересно, почему рекрутеры всегда обещают перезвонить, но часто не перезванивают. Из-за отсутствия единой системы или есть более глубокая причина?
2) В таблице написано, что 2 раза по 17,5 минут экономится засчет возможности быстро поднять описание старой вакансии из архива. Я, наверное что-то упускаю, но в чем проблема найти старую вакансию на hh и сделать ctrl+C ctrl+V?
3) Насчёт сортировки писем — это очень интересно, думаю, можно сделать отдельный пост здесь. Я правильно понимаю, что у вас есть алгоритм, который по тексту письма в свободной форме определяет, как минимум, к какой вакансии оно относится? Также я видел у вас на сайте, что вы умеете распарсивать резюме из pdf и автоматически добавлять данные в базу. Это делается полностью автоматически? Какой процент ошибок? Это ваша разработка или готовое решение?

Как рассадить всех по науке и не превратить кабинет в рассадник ненависти

+3

Работал над похожим проектом в habidatum. Мы проанализировали переписку в Slack и сделали веб-приложение, где можно было расставить столы и получить метрику удобства этой расстановки. Поверх столов накладывался граф количества сообщений, у которого можно брать срезы по времени суток.
Метрика — сколько километров в день пройдёт в среднем сотрудник, если вместо отправки сообщения он будет ходить до адресата пешком.
После того, как мы подобрали оптимальное расположение столов, мы задумались: может быть, полезнее если сотрудники будут больше двигаться, то есть метрику лучше максимизировать?

Алгоритм Дугласа-Пекера

+1
Спасибо за статью! Периодически приходится решать подобные задачи отбражении карт в d3.js или WebGL, когда topoJSON файл границ регионов нужно сконверировать в набор полигонов с разумным числом точек и заанимировать. Мне было достаточно простого алгоритма, который пропускает точки, которые находятся слишком близко друг другу и дробит длинные отрезки. Не думал, что существует семейство алгоритмов для решения этой задачи с более точными гарантиями.
Если не секрет, для какой именно задачи вам потребовалась упрощать цепи?

Почему не нужно тратить свое время на создание нишевых тематических сайтов

0
А вы пробовали показывать Яндекс.Директ мобильным пользователям? Не знаю, уже исправили или нет, но по умолчанию в Директе реклама на площадках партнеров включена, а там очень высокий CTR со смартфонов и планшетов. При этом в справке Директа рекомендуют площадки выключить или тщательно фильтровать, но многие предпочитают экономить на директологах и невнимательно читают справку, в итоге Яндекс и площадки получают кучу денег на этом. Лично видел, как из 1.2млн рекламного бюджета у B2B компании 1млн ушел на мобильных пользователей с сайтов типа gismeteo.

Узнать возраст пользователя VK или о чём ещё может рассказать социальный граф

+3
Спасибо большое за материал, поставил плюс. Но мне кажется есть две вещи, которые можно относительно быстро добавить в статью, чтобы сделать ее лучше:

  • Было бы интересно сравнить точность разных формул (например, медиану, моду, среднее и вашу эвристику) на небольшом датасете, хотя бы 1000 человек. Или теперь ВК не разрешает парсить много профилей за раз?
  • Также хочется минимальный обзор стандартных подходов к решению этой задачи. Например: cis.poly.edu/~ross/papers/EstimatingAgeFacebook_extended.pdf.

Проектирование на основе «отражения»

+2
Мне кажется, теория автора идеально подходит как основа для бизнес-тренингов и тренингов личностного роста. Она выражена простыми словами, подходит под любую ситуацию. Чтобы достичь успеха и управлять людьми нужно понять одну очень простую вещь: люди и знания подобны зеркалам, которые друг друга отражают. Далее приводятся примеры жизненных проблем и разбор их решений с точки зрения теории «отражений». У этой теории много схем и свой формализм — это большой плюс. При этом требуется длительная подготовка, чтобы научиться строить схему отражений для решения конкретной проблемы. Это вполне можно растянуть на серию книг. Успех гарантирован тем, что только автор понимает, как применять эту теорию, соответственно людям будут постоянно нужны новые книги и тренинги.

Идеального математического круга не существует

+12
Может быть автор добавил статью в песочницу к 1 апреля, но её только сейчас одобрили?

О применении теории ARMA-процессов в инженерной практике

+1
Спасибо за статью. Мне немного стыдно писать свой комментарий т.к. я как программист не сталкивался с проблемой оценивания спектра внешнего воздействия по коэффициенту демпфирования механической системы.

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

Я правильно понимаю, что это классический случай задач в стиле Flu Trends? То есть у нас есть история поиска лекарств в Google в реальном времени и официальные данные по гриппу с задержкой и мы хотим оценить текущую заболеваемость (Google, кстати, в итоге признали, что модель не работает).

Еще мне вспомнилась недавняя статья "Представление произвольных полиномов в виде конечных разностей с произвольным шагом". Это частный случай этой модели, когда коэффициенты b_i равны нулю и процесс моделируется полиномом степени p.

В общем было бы очень интересно узнать про методы подбора коэффициентов у эконометристов.

Вы не сможете решить эту задачу на собеседовании

+18
У браузеров сейчас довольно продвинутые JIT-компиляторы. Я недавно офигел, когда реализовал force-directed алгоритм рисования графа двумя способами:

  • Максимально разжеванным для компилятора с циклами вида for (let i=arr.length-1; i>=0; --i), заранее выделяя все массивы нужной длины, с выносом всего неизменного в константы, явным приведением типов в духе asm.js и хранением всех данных в плоских типизированных массивах.
  • Модном сейчас функциональном стиле с кучей лямбд, map, созданием десятка промежуточных массивов, хранением данных во вложенных словарях с обращением по строковому идентификатору.

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

Относительно кода автора, уже были сделаны бенчмарки, сравнивающие время выполнения обращения строк и выяснилось, что разница примерно в 2 раза по сравнению с обычными циклами: jsperf.com/string-reverse-function-performance (код автора: «in-built functions»). Да, не оптимально, но в рамках допустимого: если это не узкое место в программе, то решение в одну строчку гораздо более читабельное и поддерживаемое. Думаю, если бы не умные оптимизации компилятора, разница была бы раз в десять.

Ученые впервые показали реальное «фото» черной дыры

+2
Спасибо за ответ. А как можно что-то микроподвинуть на такой маленький угол? Мне это напоминает установку для измерения гравитационных волн. Разве хлопок в ладоши на расстоянии 10 км не изменит направление тарелки?

Ученые впервые показали реальное «фото» черной дыры

0
На изображении, как я понял, аккреционный диск черной дыры в центре галактики M87. Из википедии узнаю, что диаметр этого диска — 0.39 световых лет (это одна из самых больших известных черных дыр), расстояние — 53 млн. световых лет.

Получаем угловой диаметр: arcsin(0.39 / (53 * 10^6)) = 4 * 10^-7 градусов.

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

МКС летает на высоте 400км. Тогда такой угловой диаметр соответствует размеру
400 000 * 0.39 / (53 * 10^6) м = 0.0029 м
То есть мы бы разглядели форму родинки астронавта МКС?
Или я напутал в расчетах?

Мониторинг сообщений в RabbitMQ

0
Насколько помню, в питоне aio-pika ругается, если при объявлении уже существующей exchange тип не совпадает.

Прорабатываем навык использования группировки и визуализации данных в Python

0
Хотелось бы посмотреть последние четыре графика с более точной детализацией, как у синих вначале. Такое ощущение, что значение списка years осталось урезанным после построения бар чартов.

Мониторинг сообщений в RabbitMQ

+5
Мне в RabbitMQ всегда казалось странным, что продюсеры и консьюмеры должны декларировать exchange, при этом указывая ее тип. То есть если мы внедряем мониторинг и меняем тип на fanout, то мы должны сделать исправления во всех консьюмерах и продюсерах, когда они декларируют эту exchange. Хотя они не должны знать, как она работает внутри. Это не критика вашей статьи, просто вещь, которая мне кажется странной.

Представление произвольных полиномов в виде конечных разностей с произвольным шагом

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

Трассировка сервисов, OpenTracing и Jaeger

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

Представление произвольных полиномов в виде конечных разностей с произвольным шагом

0
Докажем вашу формулу для шага = 1:

  • Обозначение 1. Введем разностный оператор Δ. Он принимает на вход полином f и возвращает полином Δ(f) такой, что выполняется (Δ(f))(x) = f(x + 1) — f(x).
  • Лемма 1. Если f имеет степень n, то Δf имеет степень n — 1, если f имеет степень 0 (константа), то Δf = 0.
  • Обозначение 2. Обозначим Δ^k (f) = Δ(Δ(...Δ(f)...)) — k-кратное применение Δ.
  • Следствие 1. Если f имеет степень n, то Δ^k (f) имеет степень n — k, в частности Δ^(n+1) (f) равен 0.
  • Лемма 2. Δ^(n+1) (f) = вашей формуле, но внутри суммы k пробегает диапазон от 0 до n + 1 (у вас k=1..n+1).
  • В итоге получаем, что 0 = Δ^(n+1) (f) = ваша формула без первого члена, равного f(x)
  • Следовательно, f(x) = ваша формула


Для обобщения вашей формулы на произвольный шаг воспользуемся следующим утверждением:

  • Лемма 3. Пусть мы доказали, что для любого полинома степени n выполняется некоторое соотношение на f(1), ..., f(k). Тогда для любого полинома степени n выполняется точно такое же соотношение, но на значения аргумента из любой арифметической прогрессии длины k.
  • Доказательство. Допустим, мы хотим доказать соотношение для последовательности a, a + b, a + 2b,… Рассмотрим линейную функцию h(x) = a + bx. Обозначим g — полином, являющийся композицией f и h, то есть для которого выполняется g(x) = f(h(x)). Заметим, что g имеет степень n, а следовательно мы можем заключить, что для g(1), ..., g(k) выполняется то самое соотношение.
    Так как g(i) = f(a + bi), мы получаем, что соотношение выполняется для f(a), f(a + b),… f(a+kb), что и требовалось доказать.


Относительно использования этой формулы для доказательства того, что полиномы степени n определяются значениями в n + 1 различных точках, есть некоторая проблема:

  • Обычное доказательство следующее. Предположим противное и нашлись два полинома f и g степени n, которые совпадают в n + 1 точке. Тогда рассмотрим их разность — это тоже полином степени не больше n, у которого n + 1 корень. Но согласно следствию из основной теоремы алгебры ненулевой полином степени n может иметь не более n корней. Следовательно разность f и g тождественно равна 0 и они совпадают. Получаем, что полином степени n однозначно определяется значениями в n+1 точке.
  • То есть это утверждение сводится к основной теоремы алгебры, которая в свою очередь доказывается жестким комплексным анализом.
  • Проблема в том, что вся теория манипуляций с полиномами, которая применялась мною выше, основана на фундаментальном соответствии между функциями и наборами коэффициентов. А для этого соответствия необходимо доказать, что не бывает полиномов с разными коэффициентами и одинаковыми значениями, что сводится к основной теореме алгебры.
  • В итоге то доказательство вашей формулы, что я привел, скорее всего где-то внутри себя уже опирается на факт о том, что полином степени n однозначно определяется значениями в n + 1 точке.

Некорректные диаграммы: наш опыт

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

Создаем анимированные гистограммы при помощи R

+2
Для тех, кто не любит R: ggplot2 есть такоже для python: ggplot.yhathq.com
С анимацией графиков в python хуже, можно покадрово сохранить графики в png файлы и склеить при помощи ffmpeg.
Просто в начале статьи рекламируются курсы по python, а в статье R, можно было бы немного адаптировать код. Я понимаю, что это перевод, но все же.

Представление произвольных полиномов в виде конечных разностей с произвольным шагом

+1
Спасибо за статью, думаю многие знают эту формулу для линейной функции, у нас на численных методах всплывало соотношение для второй степени. Но лично я как-то не задумывался о том, что линейное соотношение существует для полиномов произвольной степени и произвольным шагом, при этом коэффициенты не зависят от длины шага.

Очевидно, что это соотношение должно быть хорошо известно, но загуглить его было непросто. Мне кажется, ближе всего написано в разделе «Polynomial sequences» статьи в английской википедии en.wikipedia.org/wiki/Constant-recursive_sequence. Там сама общая формула не указана, но проговорено, что коэффициенты берутся из биномиального преобразования значений полинома в подряд идущих точках, что в точности совпадает с формулой автора статьи.

Скажите пожалуйста, как была выведена общая формула? Потому что в приложенном файле есть подробные выкладки для 1 и 2 степени, а потом просто приводится общая формула для n-ной степени.

Когда формула известна, доказать ее — дело техники. Во-первых приведенная формула очень похожа на развернутую формулу конечной разности (n+1)-ой степени, только первый член перенесен в левую часть. Во-вторых, ключевая идея состоит в том, что конечная разность (n+1)-ой степени всегда равна нулю для полинома n-ной степени (по аналогии с (n+1)-ой производной полинома n-ной степени, которая всегда 0). Собственно, вот и все доказательство.

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

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

Про численную устойчивость у меня большие сомнения. Мне кажется, ошибка при однократном возведении в степень гораздо меньше, чем при повторении линейной рекуррентной формулы миллиарды раз. Я проверил на python (к сожалению я не изучал внимательно Ваш репозиторий, мог что-то упустить) для случая линейной функции: если мы вычисляем 10^8 подряд идущих значений типа double, то по вашей формуле ошибка составит -0.03:

def f(x):
    return x / 3 + 1 / 7

vals = {0: f(0), 1: f(1)}

for t in range(2, 10 ** 8):
    vals[t] = 2 * vals[t - 1] - vals[t - 2]

vals[t] - f(t) == -0.03673642501235008

# "стандартный" способ интерполирования линейной функции
vals[0] + (vals[1] - vals[0]) * t == f(t)

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

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

Представление произвольных полиномов в виде конечных разностей с произвольным шагом

+2
То, о чем говорит автор, следует из короткой формы интерполяционной формулы Ньютона, но не тривиальным образом. Формула автора проще: она содержит один биномиальный коэффициент, а в короткой форме Ньютона двойное суммирование с произведением биномиальных коэффициентов. Упрощение получается подставлением x = n + 1 и схлопыванием знакомеременной суммы произведений биномиальных коэффициентов.

Как стать «толковым джуниором». Личный опыт

+2
Это получился торрент-клиент. Когда я устроился уже на работу, я с огромным наслаждением удалил его с гитхаба. Спустя год после написания мне уже было стыдно смотреть на его код.

Сурово! Не ожидал, что BitTorrent клиент на плюсах подходит в качестве пет-проекта, с учетом того, что BitTorrent Inc. с 2001 до 2008 года вела разработку основного клиента на питоне.

Чего мне никогда не говорили о CSS

+1
Если речь идет об этой реализации правила 110, то она требует действий пользователя: постоянного нажатия Tab + space (сначала нужно накликать желаемое начальное состояние в первой строке, потом следовать инструкции). С таким же успехом Тьюринг-полными можно назвать комментарии на Хабре и камни на берегу моря. Мне кажется, это не совсем честная Тьюринг-полнота, т.к. требует активного участия человека в вычислениях, по крайней мере для меня как любителя портировать трехмерные движки на все подряд.

Как я пишу конспекты по математике на LaTeX в Vim

+3
Я первые два курса на факультете компьютерных наук ВШЭ тоже записывал в Emacs + LaTeX большинство лекций: t-arxiv.appspot.com. Даже сложилась традиция: в каждом поколении первокурсников находится человек, который решает ТеХать конспекты. При этом иллюстрации, оформление и объем обычно лучше, чем у предыдущего поколения.

95% от заявленного объёма торгов Биткоина оказались фейком

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

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

Согласен, на вопрос «во сколько раз» сравнением площадей ответить трудно. Но и бар чарт разницу в 20 раз тоже не покажет интуитивно. Но в заголовке уже было написано про 95% и читатель как бы должен догадаться, что в 20 раз. Наверное, лучше всего было написать про 20 раз текстом.

Как создать палитру, комфортную для всех

0
Формула W3C для контрастности довольно сложная, тем не менее, насколько я понимаю, она не учитывает эффект Гельмгольца-Кольрауша. Парадокс этого эффекта состоит в том, что если вы светите белым фонарем на сцену, а затем добавляете красный фильтр, то субъективно сцена становится ярче, хотя вы уменьшили число фотонов.

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

Первый программируемый компьютер на ДНК

+1
Проблема подхода реализации компьютеров в духе Wang tiles «в лоб» на ДНК в том, что при таких вычислениях часто возникают ошибки. В этой статье указана частота 1 ошибка на 3000 плиток (я мог что-то напутать т.к. читал только abstract по диагонали). С учетом того, что число используемых плиток для самых простых алгоритмов пропорционально размеру входа в битах, умноженному на «число тактов» работы алгоритма, т.е. >100 – это довольно часто.

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

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

Тем не менее, эти проблемы решаемы и я как раз недавно читал ряд интересных статей от этих авторов.
1 There