...

суббота, 4 января 2020 г.

Внутренний мир Форманты П432

История о том, как я неожиданно купил синтезатор, починил его, разобрался с тем, как он устроен, и написал эмулятор.
Эта история началась во время проведения фестиваля Chaos Constructions на последних выходных августа 2019 года. Просматривая вечером Авито в поисках интересных артефактов ушедшей эпохи, я наткнулся на недорогой синтезатор Форманта П432. Выглядел он вполне привычно для цифровых синтезаторов: в нижней части клавиатура из 41 клавиши (3,5 октавы), в верхней ‒ кнопки выбора тембра, включения эффекта хор и унисон, а также регуляторы настройки эффекта вибрато. Слева от клавиатуры установлен джойстик, позволяющий сместить строй вверх и вниз, а также плавно подключить вибрато.

Самое интересное для меня заключалось в том, что этот синтезатор был именно цифровым и генерировал звуки по методу wavetable, т. е. в момент нажатия клавиши он генерировал звук на основе табличных данных, сохраненных в микросхемах ПЗУ. После беглого ознакомления со схемами в интернете стало понятно, что управление синтезатором построено на широко известном микропроцессоре КР580ВМ80 (i8080), а звуки хранятся в 8 микросхемах ПЗУ общим объемом 8*2 = 16 Кб.

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

Но основным мотивом к покупке было желание разобраться с внутренним устройством и извлечь семплы звуков из ПЗУ синтезатора.

DISCLAIMER: Названия составных частей узлов и сигналов синтезатора (кроме указанных в “кавычках” и БОЛЬШИМИ буквами) придуманы мной и могут отличаться от задуманных разработчиками. Описание работы узлов сделано на основе моих (ограниченных) знаний, материалов из сети интернет и советов опытных людей.

Ремонт


Когда П432 [2] добрался до меня в целости и сохранности, первое, что я сделал, это разобрал его. Внутри меня ожидало не очень приятное зрелище из пучков проводов и нескольких печатных плат.
Узел управления

Плата, на которой распаяны кнопки и регуляторы лицевой панели, а также индикация режимов работы.


Узел процессора

Содержит микропроцессор КР580ВМ80 и другие микросхемы комплекта 580, ПЗУ 2 Кбайт на РФ2, две микросхемы статического ОЗУ суммарным объемом 256 байт (К541РУ2). Также на плате установлены дешифраторы, выделяющие части адресного пространства под взаимодействие с клавиатурой, с кнопками управления и регистрами, на выходе которых формируются управляющие сигналы для узла генераторов.


Узел МИДИ-интерфейса

Установлен над узлом процессора и состоит из отдельного ПЗУ с подпрограммами обмена миди сообщениями, мелкой логики и двух больших микросхем: контроллера прерываний ВН59 и последовательно интерфейса ВВ51. К контактам TX/RX ВН51 подключена стандартная схема реализации midi токовой петли с развязкой на оптроне.


Узел хора

В виде изолированной платы, имеющей только аналоговый вход, выход и питание. Реализован на микросхемах КА528БР2 – аналоговых линиях задержки. Узел очень шумный, но придает звуку интересную окраску.


Узел генераторов

Основной модуль синтезатора. Содержит 8 микросхем ПЗУ по 2 Кбайт каждая, цифровую логику (регистры, сумматоры), два ЦАП, аналоговый фильтр с изменяемыми параметрами и термостабилизацией. Узел также содержит генератор тактовых импульсов, с которым синхронизирована работа регистров узла процессора. Дочерней платой на этом узле установлена плата ГУН (генератора, управляемого напряжением), являющаяся заводской доработкой более поздних ревизий синтезатора.


Узел выпрямителей и стабилизаторов

Линейный блок питания, выдающий +5В для питания логики и +12/-15В для операционных усилителей. +5В стабилизированы КР142ЕН5, в качестве радиатора которой выступает металлический корпус синтезатора, а +12/-15В ‒ простейшими параметрическими стабилизаторами на стабилитронах и транзисторах. Дополнительное напряжение питания -5В для КР580ВМ50 формируется стабилитроном из -15В прямо на плате узла процессора. Аналоговая и цифровая земля разведены отдельно и соединяются только в этом блоке.


Клавиатура инструмента

Герконовая, не чувствительная к скорости нажатия, как и на многих отечественных синтезаторах того времени.


Вынос узла МИДИ на отдельную плату со своим ПЗУ обусловлен наличием еще одного синтезатора в линейке П432 – Форманта П432-МИНИ, не имеющего миди интерфейса и эффекта ХОР. Узел процессора у МИНИ немного отличается прошивкой, а узел генераторов такой же, как на П432.

Итак, при первом включении я обратил внимание на две проблемы: очень слабый уровень сигнала на линейном выходе и уже упомянутый призвук при нажатии более одной клавиши одновременно. Надо заметить, что П432 ‒ это полифонический синтезатор, и он может воспроизводить одновременно 4 голоса (частоты) одного тембра. А с включением эффекта УНИСОН количество одновременно звучащих голосов увеличивается до 8-ми, по два для каждой клавиши.

Причина тихого звука была найдена почти сразу, виноват был сгоревший выходной ОУ К544УД1А.

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

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

На поиск проблемы ушло довольно много времени, но в итоге она была локализована на уровне основного ЦАП. Старший бит цифрового входа имел недостаточный уровень для признания его логической 1, поэтому выходной аналоговый сигнал искажался. Виновник этой истории был найден и устранен, после чего проблема решилась. Все тембры стали звучать чисто и без проблем при нескольких нажатиях.

Тут бы и истории конец, но времени на ремонт уже было потрачено много, поэтому я решил, что не стоит на этом останавливаться и надо разобраться:

  • как устроен процесс синтеза звука
  • что хранится в ПЗУ узла генератора
  • как работает фильтр и его характеристики
  • где хранится конфигурация для каждого тембра и параметры огибающих

Итогом этой работы должна была стать программная эмуляция П432 с использованием данных оригинальных ПЗУ.

Устройство узла генераторов


Форма сигнала на выходе основного ЦАП узла генераторов формируется по принципу прямого цифрового синтеза (DDS) [1]. Полученный аналоговый сигнал пропускается через фильтр нижних частот, затем при необходимости смешивается с выходом узла хора, усиливается выходным усилителем и подается на линейный выход. Фильтр в П432 выполнен по схеме, ранее использованной в синтезаторе «Поливокс» [3].


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

Сначала рассмотрим входы и выходы:

  • Вход «Частота» (12 бит) — для каждого голоса, включая унисон, от узла процессора приходят значения, соответствующие нажатой клавише или миди ноте.
  • Вход «Усилитель» (8 бит) —значения огибающей для амплитуды сигнала.
  • Вход «Фильтр» (8 бит) — значения огибающей частоты среза фильтра.
  • Вход «Управление» — (8 бит) – 3 младших бита отвечают за выбор волноформы, 2 бита за смещение фильтра, еще 2 за уровень добротности фильтра Q (резонанс) и последний бит определяет, включен или нет эффект УНИСОН.
  • Выход «Адрес» (3 бит) — отвечает за синхронизацию с узлом процессора.

Теперь посмотрим, как работают основные блоки узла.

Схема синхронизации с помощью мультивибраторов, счетчика и логических элементов формирует импульсы управления различными модулями узла генераторов и выдает на выход «Адрес» номер текущего голоса. При активном режиме УНИСОН «Адрес» принимает значения [0,1,2,3,4,5,6,7] а при неактивном: [0,2,4,6]. Частоту задающего генератора можно менять в небольших пределах ручкой подстройки на передней панели и джойстиком слева от клавиатуры.

Временная диаграмма тактовых импульсов. Пояснения: Unison – лог. 0 активный уровень, FA0-2 – выход «Адрес», DD8-12 – Регистр аккумулятора фазы, DD33-35 – регистр сумматора голосов, DD36-37 – регистр ЦАП.

Цифровая часть платы генераторов для каждого из 4(8) голосов синхронно с изменением значения на выходе «Адрес» производит следующие операции. С узла процессора на вход «Частота» поступает значения частоты сигнала. Линейное значение частоты преобразуется в приращение фазы дешифратором на ПЗУ. Приращения суммируются в аккумуляторе фазы (20 бит), состоящем из сумматора и ОЗУ на 8 слов. Старшие 9 бит суммы подаются на адресные входы ПЗУ волноформ. Конкретная область ПЗУ выбирается тремя младшими битами входа «Управление». 10 бит с выхода ПЗУ суммируются со значением на входе «Усилитель» и подаются на входы ПЗУ масштабирования, которое формирует биполярный код для ЦАП. Выход попадает в накопительный буфер, построенный на сумматорах и регистрах, который последовательно суммирует значения кодов всех 4(8) голосов. В конце каждого цикла итоговый код защелкивается регистром хранения и попадает на 12-бит ЦАП. Частота выдачи кода на ЦАП является частотой дискретизации сигнала и составляет для П432 – около 33 килогерц. Согласно Найквисту, максимальная частота звука, доступная генератору П432, примерно равна 16,5 кГц.

Если для выбранного тембра требуется динамическое изменение параметров фильтра нижних частот, то на вход «Фильтр» выдаются значения огибающей, которые проходя через 10-бит ЦАП формируют управляющее напряжение для ОУ фильтра. ФНЧ выполнен по бесконденсаторной схеме фильтра переменных состояний и включает схему температурной стабилизации, блок изменения добротности Q и начального смещения.

На этой временной диаграмме отображено два периода дискретизации платы генераторов. УНИСОН выключен. На вход «Частота» (Freq_in) синхронно со сменой адреса поступают номера частот четырех разных клавиш. Но нажаты только последние две из них (Volume_in=0xFF). При этом на вход «Фильтр» выдается постоянное значение (Filter_in=0x60). Финальный код поступает на вход ЦАП (DAC) после защелкивания в регистрах хранения (DD36-37).

Для включенного УНИСОНа
все выглядит аналогично, только на вход «Частота» поступает пара номеров: для основного голоса и унисона.

Внимание: отображен только один период.



Более детальное описание узла генераторов


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

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

  1. ПЗУ преобразования частота-приращение — DD1-2, выполненное на двух 573РФ2, содержит таблицу соответствия линейного значения частоты экспоненциальному приращению фазы. В графическом виде ее содержимое выглядит так

    Синхронно с изменением значения на выходе «Адрес» узел процессора выдает 11-бит значения частоты соответствующего голоса на вход «Частота», которое преобразуется в 16 бит приращения.

    Если рассмотреть содержимое первых 16 слов DD1-2, то там записаны какие-то странные числа, которые похоже не используются при синтезе звука:

  2. Аккумулятор фазы — состоит из сумматоров DD3-7 (561ИМ1) и регистров DD8-12 (561ИР11). Сумматоры включены в цепочку общей разрядностью в 20 бит. Блок регистров позволяет хранить восемь 20-байтных значений фазы сигнала. Адресные входы чтения/записи регистров соединены с шиной «Адрес». Такое включение позволяет по приходу тактового импульса получать на выходе предыдущее значение и сохранять текущее со входа. Таким образом обеспечивается накопление фазы отдельно для каждого голоса синтезатора. Старшие 9 бит выхода регистров подаются на адресные входы ПЗУ волноформ.
  3. ПЗУ волноформ — DD13-14, DD18-19 (573РФ2) содержит таблицы восьми форм сигналов, которые может синтезировать узел генераторов. Конкретная область памяти и пара ПЗУ выбирается битами S0-S2 сигнала «Управление». Под описание каждого сигнала отводится 512 слов разрядностью 11 бит. Самый старший 10 бит имеет служебное назначение, указывая на полярность сигнала: 1-положительная, 0-отрицательная. Внешний вид волноформ приведен с учетом разворота отрицательных значений:
    Wave_00
    Wave_01
    Wave_02
    Wave_03
    Wave_04
    Wave_05
    Wave_06
    Wave_07
  4. Сумматор огибающей — на вход «Усилитель» поступает 8 бит огибающей (сдвинутой влево на 2 бита), которые суммируются на элементах DD23-25 (561ИМ1) с 10 младшими битами выхода ПЗУ волноформ. Огибающая имеет 4 фазы: Атака (Attack), Спад (Decay), Поддержка (Sustain), Затухание (Release), которые формируются узлом процессора отдельно для каждого из 4-х основных голосов в зависимости от времени нажатия/отпускания клавиши.
    Пример огибающей для тембра 00: отчетливо видно быструю атаку до значения 255, затем спад до уровня поддержки 239, далее плавное уменьшение уровня, оканчивающиеся резким затуханием до 0 при отпускании клавиши. По горизонтальной оси ‒ время в секундах, по вертикальной ‒ значение входа «Усилитель».
    Огибающая входа \"Усилитель\"

    Значения в ПЗУ синтезатора подобраны таким образом, что при 0 на входе «Усилитель» на выходе ЦАП тоже будет нулевой уровень сигнала, при том, что на всех промежуточных микросхемах постоянно меняются значения переменных и генерируются разные сигналы.

  5. ПЗУ масштабирования, состоящее из DD27-28 (573РФ2), содержит кривые для получения кода биполярного сигнала в соответствии со значением старшего бита волноформы. В графическом виде содержимое ПЗУ выглядит так.

    Если 10-й бит равен 1, то используется значение с выхода DD28 + 256, а если 0, то DD27 + 1.

  6. Сумматор голосов на DD30-32 (561ИМ1) и регистрах DD33-DD35 (561ИР9) смешивает значения кодов всех голосов перед выдачей на ЦАП. После обработки кода последнего голоса полученное значение передается дальше на регистр хранения, а регистр сумматора сбрасывается к нулю.

    Пример: Как уже было упомянуто выше, если «Усилитель»=0, а максимально возможное значение амплитуды на выходе ПЗУ волноформ (1<<10)-1=1023, то на выходе ПЗУ масштабирования мы получим либо 0+256, либо 255+1 в зависимости от 10 бита волноформы, что дает в сумме 256*8=2048 и соответствует 0 на выходе ЦАП.

  7. Регистр хранения на элементах DD36-37 (555ТМ9) принимает и сохраняет на выходе значение кода в течение интервала дискретизации. Частота дискретизации узла генераторов примерно равна 33000Гц.
  8. ЦАП DA38 (534ПА1) – преобразует 12-битное значение в аналоговый биполярный сигнал, код 2048 соответствует аналоговому 0.
  9. Фильтр нижних частот – построен по схеме, разработанной Владимиром Кузьминым для синтезатора «Поливокс», однако в П432 добавлен узел термостабилизации тока управления ОУ фильтра. Причем взят он из того же Поливокса, где использовался для стабилизации частоты генераторов. На сайте автора можно найти инструкцию по настройке этого узла [6].

    Про сам фильтр уже довольно много написано, поэтому обойдемся без подробностей.
    Управление фильтром построено на 10-битном ЦАП (572ПА1), на вход которого подается 8-бит сигнал «Фильтр», представляющий собой огибающую фильтра, причем в зависимости от тембра она может быть и постоянной величиной, и вообще равняться нулю. Также на параметры фильтра влияет значение 4-х бит сигнала «Управление»: F0-F1 задают смещение выходного напряжения ЦАП, а Q0-Q1 отвечают за добротность (уровень резонанса) фильтра.

  10. После фильтра установлен коммутатор, позволяющий включить подмешивание к основному сигналу его копии, обработанной эффектом ХОР. В ранних модификациях П432 этот же коммутатор использовался для отключения выхода звука в моменты, когда ни одна клавиша не нажата. Но в более поздних ревизиях от этого отказались, начали резать дорожки, кидать провода и добавлять в схему новые элементы.
  11. Усилитель – поднимает уровень выходного сигнала до 250мВ.

Конфигурация и узел процессора


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

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

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

Согласно руководству по эксплуатации П432 имеет клавиатуру в 41 клавишу объемом в 3 и 5/12 октавы с диапазоном C1-E4 в научной нотации или С1-e1 в нотации Гельмгольца. Однако на практике (для тембра 00), если исходить из соответствия А4 = 440Гц, оказалось, что звук такой частоты издает клавиша А во второй слева октаве, а это уже дает диапазон C3-E6. Как выяснилось позже, в зависимости от активного тембра диапазон воспроизводимых частот может меняться, сдвигаясь на 1 или 2 октавы.

Значения байта с входа «Управление» я также записал логическим анализатором для всех возможных тембров и свел в табличку.

Список тембров и значения входа «Управление»

Было очевидно, что все эти конфигурационные параметры должны храниться в одной из ПЗУ синтезатора, и после небольших поисков они нашлись во второй половине прошивки DD16 узла процессора. Напомню, что объем ПЗУ 573РФ2 составляет 2048 байт.

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

В итоге получилась такая таблица.
Она не включает все байты конфигурации, потому что они или равны 00/FF, или пока не поддались расшифровке.

Как видно из таблицы, все значения можно разделить на четыре группы: описание огибающей входа «Усилитель», огибающей входа «Фильтр», байт входа «Управление» и байты, отвечающие за частоты основного голоса и УНИСОНа на входе «Частота».

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

Параметры с суффиксом *_dt задают дельту изменения уровня сигнала соответствующей фазы, например, для тембра 00: A_min=0, A_dt=48 а A_max=255. Это значит, что начальное значение Атаки 0 нужно инкрементировать на 48, пока оно не достигнет 255. Для фазы Спад значение D_dt нужно декрементировать из A_max до уровня S_lvl, если S_ft>0, то уровень Поддержки должен уменьшаться с каждым интервалом S_ft на 1, моделируя плавно затухающий звук. Параметр R_dt указывает на дельту фазы Затухания: текущий уровень огибающей необходимо уменьшать на R_dt каждый временной интервал до достижения уровня 0. Реальное dt равно 1, если значение параметра *_dt<=1 и значению *_dt в других случаях.

Параметры *_ft определяют время, в течение которого значение должно оставаться неизменным, своего рода интервал дискретизации для огибающих. Эмпирически было установлено, что нулевое значение этого параметра соответствует ~ 100 периодам дискретизации ЦАП или ~ 3 мс. При значениях больше нуля время нужно рассчитывать по формуле int(256 / *_ft) * 100, т.е. *_ft является множителем для базового интервала в 100 периодов ЦАП.

Иллюстрация, на которой отображены все параметры огибающей. В правой части она продублирована с явной дискретизацией для лучшего понимаю сути параметров *_ft/*_dt.

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

Байты частоты определяют значения входа «Частота». Как уже упоминалось выше, синтезатор может воспроизводить одновременно 4 голоса (полифония), каждому из которых, при включении УНИСОН, может быть добавлен в унисон еще один генератор с небольшой расстройкой или смещенный относительно основного на 1-2 октавы.

Частоты кодируются двумя байтами: FREQ_1, FREQ_2 для основной и FREQ_u1, FREQ_u2 для унисона. Экспериментально была выведена формула расчета значения частоты для ноты A второй октавы клавиатуры П432.

freq_offset = {4:0xd0, 5:0x90, 6:0x50}
freq = (config['FREQ_1'] << 8) + freq_offset[config['FREQ_1']] + config['FREQ_2'] 

Пример для тембра 00, где: FREQ_1=6, FREQ_2=8, получаем: 6 * 0x100 + 0x50 + 8 = 0х658, что согласуется с данными логического анализатора для всех тембров. Для унисона расчет аналогичен.

Стоит отметить, что для тембра 00 значение 0x658 соответствует частоте 440Гц или ноте A4.
Опытным путем было установлено, что интервал «Частоты» для соседних (включая черные) клавиш составляет 16(0x10) единиц. Следовательно, если мы знаем значение для 22-ой слева клавиши (А второй октавы) — 0x658, то можем легко получить значение для самой левой (№1): 0x508 и самой правой (№41): 0x788.

Исходя из этого можно рассчитать диапазон клавиатуры и воспроизводимых частот для разных тембров. Колонка «Частота» будет корректна только для простых волноформ.

Описанного выше более чем достаточно для создания эмулятора П432, поэтому перейдем к нему.

Создание эмуляции П432 на Python


Я подумал, что было бы неплохо разделить хранение конфигурации и генерирование звука, поэтому были созданы два основных класса:
  • P432data, отвечающий за подгрузку значений из образов ПЗУ и приведение конфигурации тембров в удобный для использования вид;
  • P432, содержащий методы для создания форм огибающих и собственно генерации цифровых семплов.
Подробно останавливаться на P432data я не буду, исходники можно посмотреть на github.
А вот методы P432 рассмотрим поподробнее.

Основной это, конечно, gen_samples с параметром, означающим количество семплов, которое он должен вернуть. В этом методе максимально близко к прототипу воссоздана обработка сигналов от поступления значения на вход «Частота» до выхода на ЦАП. В принципе ориентируясь на схему П432, можно довольно быстро найти питоновские аналоги модулей узла генераторов. Единственное, что пришлось явно добавить, это приведение переменных к заданной размерности: 20 бит для аккумулятора фазы, 11 бит для сумматора огибающей и 12 бит для сумматора голосов. Это ограничение необходимо для того, чтобы нормально работала логика переполнения этих переменных.

Методы создания огибающих усилителя getADS и фильтра getFADS формируют списки со значениями амплитуды огибающей, из которого gen_samples берет значения в момент нажатия клавиш. К ним в компанию есть пара методов getR и getFR, формирующих фазу Затухание огибающей. Они принимают на вход параметр level — текущее значение уровня огибающий, начиная с которого он будет уменьшаться до 0.

Четыре основных голоса имеют одну и ту же форму огибающей Усилителя и Фильтра, но если для Усилителя огибающая своя для каждого голоса и запускается при нажатии клавиши, то для фильтра она общая для всех голосов, запускается от первого нажатия, перезапускается при последующих и длится до последнего отпускания. Смотри выше

Согласно руководству по эксплуатации, П432 выдает по MIDI номера нот с 36 по 77 (в реальности 76) для клавиш клавиатуры с 1 по 41 соответственно. Чтобы не изобретать велосипед, я решил использовать в эмуляторе диапазон 36-76 в качестве номеров нажатой клавиши, поэтому понадобился метод midi2freq, преобразующий номер клавиши в значения «Частоты» с учетом выбранного тембра.

Последней парой методов были key_press(midi_note) и key_release(midi_note), которые формировали словарь соответствия голоса частоте основного тона, фазе и текущей позиции огибающей.

Последний из основных метод это setprog(prog, clean=True), предназначенный для выбора активного тембра. Setprog подгружает конфигурацию нужного тембра и, если флаг clean не сброшен, очищает внутренние переменные. Если clean в значении False, то внутренние переменные не обнуляются, что позволяет переключаться между тембрами во время генерирования звука практически без щелчков и других неприятных звуков.

Для записи сгенерированных семплов в WAV файл был создал служебный метод write_wav на основе модуля wave. Для каждого семпла выполняется масштабирование для увеличения амплитуды и приведения его к signed 16bit виду.

Этих методов достаточно, чтобы получить wav файл с записью нескольких секунд любого из тембров синтезатора.

# создали экземпляр класса
p432=P432()
# выбрали тембр
p432.setprog(0)
# отключили унисон и фильтр (для чистоты эксперимента)
p432.unison=False
p432.filter_en = False
# нажали клавишу A второй октавы
p432.key_press(57)
# сгенерировали 3 секунды семплов
samples=p432.gen_samples(33000*3)
# отпустили клавишу
p432.key_release(57)
# сохранили в файл
p432.write_wav('test_00.wav',samples)

Волноформа тембра 00 представляет собой синусоиду, поэтому на выходе мы получим синусоиду с наложенной огибающей. Послушать.

Немного интереснее будет выглядеть запись тембра 14 с включенным унисоном и фильтром. Послушать.

Графический интерфейс


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

Интерфейс делался под влиянием реального П432 с добавлением легенды по клавишам, кнопки выбора MIDI входа и возможности отключения фильтра.


Кнопка “Midi In” появится, если у вас установлен модуль “python-rtmidi”. После ее нажатия и выбора Midi-input устройства, программа активирует callback функцию, перехватывающую события Note-On, Note-Off и Program Change на всех 16 midi каналах. Через Program Change можно менять номер активного тембра эмулятора.

Для перехвата нажатий клавиш клавиатуры используется метод Tkinter bind(''), bind(''), а затем в callback функции, номер клавиши сверяется со списком разрешенных, преобразуется в midi ноту и вызываются методы p432.key_press(), p432.key_release(). Перехват активируется при запуске программы и деактивируется при завершении.

Для вывода потокового звука используется модуль pyaudio в non-blocking режиме. После отрисовки интерфейса он запускается в отдельном Threading потоке, а tkinter продолжает работать в основном. В callback функцию, pyaudio передает количество семплов, которое надо сгенерировать, а в ответ он получает семплы от gen_samples и флаг статуса. Для уменьшения latency между событием note-on (нажатием клавиши) и появлением звука выбран достаточно маленький буфер: 200 семплов. Его задает параметр “frames_per_buffer” метода “open” pyaudio.

Скомпилированную pyinstall версию P432_emulator для Windows можно скачать в releases.

Заключение


В этой статье почти не раскрыты подробности работы аналогового фильтра в узле генераторов (и его цифровой реализации в эмуляторе), узла процессора, эффекта ХОР и MIDI-интерфейса. Акцент был сделан на устройстве цифровой части узла генераторов, способе хранения параметров тембров и использовании их при создании эмулятора.

Если тема вызовет интерес, то я запланирую вторую статью с разбором оставшегося.

Также, если вам кажется, что в описании работы узлов П432 есть ошибки или неточности, пожалуйста, пишите в комментарии.

Исходный код проекта, прошивки ПЗУ, схемы и руководство по эксплуатации доступны на github.

Список литературы


  1. Ридико Л. DDS: прямой цифровой синтез частоты.
  2. Музей Советских Синтезаторов, Форманта П432. www.ruskeys.net/base/form432.php
  3. Wikipedia. Поливокс.
  4. Инструмент электромузыкальный клавишный “Форманта П432”. Руководство по эксплуатации.
  5. Схемы электрические принципиальные изделия “Форманта П432”.
  6. Настройка температурной стабильности Поливокса.

Let's block ads! (Why?)

[Перевод] Я был главой отдела международных отношений в Google. Вот почему я ушел

Когда-то девизом компании была фраза «Don't be evil». Времена изменились.

image

В день когда я покидал пост главы отдела международных отношений в Google, я не мог не вспоминать свой первый день в компании. Тогда я сменил офис, отделанный деревянными панелями, костюм и галстук, а так же работу в качестве заместителя главы администрации губернатора Шварцнеггера на ноутбук, джинсы и обещание, что я сделаю мир лучше, под простым, но таким сильным лозунгом «Don't be evil».
Я пришел в Google в 2008 году, тогда эта фраза еще что-то значила. Но я так же видел как под этим лозунгом разрабатывались продукты, которые ставят успех компании выше конфиденциальности пользователей, как например в случае с Google Buzz. Я же сам руководствовался им в 2010 году когда был ответственным за политику компании в Азиатско-Тихоокеанском регионе, когда исполнил знаменательное решение компании прекратить цензуру поисковых результатов в Китае, ставя на первое место права человека.

Впервые на китайский рынок Google вышла в 2006 году. Тогда основатели Лари Пейдж и Сергей Брин говорили, что Google останется только в том случае, если присутствие компании будет приносить больше пользы, чем вреда — что пользователи смогут получать больше информации чем раньше, даже при условии цензуры некоторых тем. Но со временем список цензурируемых тем значительно увеличился, и после того как китайское правительство попыталось взломать Gmail аккаунты правозащитников в 2009 году, Лари и Сергей решили пересмотреть решение 2006 года. И после напряженных обсуждений с другими руководителями они решили, что единственным вариантом при котором они смогут предоставлять услуги поиска в Китае и при этом останутся верны мантре «Don't be evil», — это прекратить сотрудничество с государственными цензорами.

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

Когда в 2010 году мы приняли решение прекратить сотрудничество с китайскими цензорами, это был первый случай, когда некитайская корпорация выступила против правительства Китая. Принимая такое решение Google поставила на карту — свое будущее на мировом, быстрорастущем интернет-рынке, прибыль в миллиарды долларов и даже безопасность наших китайских сотрудников. В какой-то момент я даже начал планировать возможность массовой эвакуации всех наших сотрудников и их семей из Китая. Хоть это было и сложно, но я был очень горд принципиальным подходом компании.

Тем не менее, это решение привело в ярость не только правительство Китая, но и разочаровало некоторых руководителей в Google, которые думали об огромном рынке и сопутствующих прибылях. В течение года после нашего решения, руководители занимающиеся картами и андроидом, продвигали идею запуска этих продуктов в Китае. Я же энергично выступал против этих планов, понимая, что смена нашей позиции сделает нас соучастниками преступления против прав человека и вызовет возмущение гражданского общества и многих западных правительств, которые приветствовали наше решение в 2010 году. Я также объяснял, что ни один из этих планов не удастся реализовать, потому что китайское правительство разозлилось на нас и откажется даже устроить встречу, чтобы обсудить эти проекты. Фактически, в течении следующих двух лет китайское правительство согласилось встретиться с нами только один раз, это были чиновники довольно низкого ранга, сотрудники Министерства земельных и природных ресурсов, они вежливо выслушали наши вопросы по поводу запуска Google Maps. А когда мы подтвердили, что и в этом продукте не сможем соответствовать требованиям гос-цензора, они перестали отвечать на дополнительные запросы.

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

В этой роли моя команда и я продолжали взаимодействие с руководителями отделов, которые были поражены ростом китайского рынка и настаивали на возвращении туда. Я насторожился, когда узнал в 2017 году, что компания работает над новой версией цензурируемого поисковика для Китая под кодовым названием «Dragonfly». Но это было лишь одно из нескольких событий, которые беспокоили тех из нас, кто все еще верил в мантру «Don't be evil». Я также был обеспокоен тем, что руководители Google Cloud активно заключают сделки с правительством Саудовской Аравии, несмотря на ужасную историю нарушения прав человека в этой стране. Руководители их отдела не скрывали того факта, что они хотели нанять свою собственную команду, которая эффективно бы блокировала любой пересмотр их контрактов моей командой. И в довершении, в декабре 2017 года Google объявила о создании в Пекине центра исследования искусственного интеллекта — что застало меня врасплох, и дало понять, что у меня больше нет возможности влиять на многочисленные разработки и сделки совершаемые корпорацией.

И я решил что надо выступить за принятие официальной программы по правам человека в масштабах всей компании, которая бы публично обязывала Google придерживаться принципов изложенных в Декларации ООН о правах человека, и создать механизм оценки влияния на права человека всех продуктов выходящих на рынок.

Но каждый раз, когда я предлагал эту программу, старшие руководители находили предлоги, чтобы сказать «нет». По началу они говорили, что вопросы прав человека лучше решать внутри отдельных команд, а не запускать отдельную программу для всей компании. Но команды занимающиеся разработкой не были обучены тому, как работать с правами человека. Когда я вновь пришел к высшему руководству с идеей глобальной программы, они заявили, что их беспокоит увеличение юридической ответственности компании. Мы предоставили мнение сторонних экспертов, которые вновь подтвердили, что эти опасения необоснованны. В этот момент, моему коллеге поручили заниматься политическими вопросами касательно «Dragonfly». Как человек, последовательно выступающий за подход основанный на правах человека, я был отстранен от обсуждения возможности запуска этого проекта. И тогда я осознал, что компания никогда и не намеривалась придерживаться принципов прав человека в своих бизнес решениях. Как раз тогда, когда от Google требовалось удвоить приверженность ценностям прав человека, она вместо этого решила сосредоточиться на увеличении прибыли и стоимости акций.

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

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

И затем, несмотря на то, что меня считали одним из лучших менеджеров в компании, несмотря на 11 лет моих заслуг, несмотря на почти идеальные оценки в системе компании, и несмотря на то, что я был участником элитной программы Foundation, предназначенной для «самых важных талантов» компании, которые являются «ключом для нынешнего и будущего успеха Google», мне сказали, что в результате «реорганизации» у меня больше нет работы, несмотря на то, что на тот момент оставались открытыми более 90 управленческих вакансий.

Когда я нанял адвоката, в Google заверили меня, что произошло недоразумение, и мне предложили небольшую роль в обмен на мое согласие и молчание. Но для меня выбор был очевиден, как и ситуация. Я ушел. Солидарность с женщинами, ЛГБТ-сообществом, цветными коллегами и правами человека — стоила мне карьеры. Мне больше не нужны никакие дополнительные доказательства того, что «Don't be evil» больше не является истинным отражением ценностей компании; теперь это только очередной инструмент корпоративного маркетинга.

После возвращения домой меня много раз спрашивали: «Что изменилось?»

Во-первых, люди. Основатели компании, Лари Пейдж и Сергей Брин ушли и передали руководство новым корпоративным исполнителям. В Google Cloud назначали нового CEO, а новый финансовый директор пришел с Уолл-Стрит, и рост прибыли в каждом квартале стал ключевым приоритетом. Каждый год тысячи новых сотрудников приходят в компанию, подавляя всех, кто боролся за сохранение первоначальных ценностей и культуры компании. Когда я начинал свой путь, в Google работало меньше 10 000 человек, а к моменту моего ухода их было больше 100 000 человек.

Во вторых, изменились продукты. Кто-то скажет, что Google всегда была плохим корпоративным игроком, с очень непрозрачной политикой конфиденциальности. Но есть большая разница между показом рекламы на основе ваших поисковых запросов и работой с правительством Китая в сфере искусственного интеллекта, или размещение приложений правительства Саудовской Аравии, таких как Absher, приложение которое используют мужчины, чтобы отслеживать, и контролировать передвижение своих жен. Руководители, одержимые желанием отобрать долю рынка облачных вычислений у Microsoft, Oracle и Amazon, даже не слушали тех из нас кто выступал за какую-то принципиальную дискуссию, они размещали приложения и данные любого клиента готового заплатить.

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

Хотя насчет причин и следствий еще можно спорить, я уверен в правильном ответе. Крупные технологические компании больше не могут работать свободно от государственного надзора. Как только Конгресс поинтересовался у руководителей Google проектом «Dragonfly» и приверженности компании идеям прав человека и свободе выражения мнений, руководители заверили, что это просто исследовательский проект, который в итоге был закрыт.

Эти компании влияют на то, как мы проводим наши выборы, на то как воспитываем и развлекаем детей, их роль слишком велика, чтобы оставлять все в руках руководителей, которые подотчетны только своим главным акционерам — в случае Google, Amazon, Facebook и Snap — акционеры являются, так получилось, инсайдерами и основателями этих компаний.

Через две недели после ухода из Google я вернулся домой в штат Мэн. Там я родился и вырос, и там меня научили главным ценностям, таким как важность усердного труда и отстаивание правды. После того как я рассказал свою историю, мои соседи и семья помогли мне понять, почему я так часто конфликтовал с руководителями компании, пока Google менялась. У нас в штате живет много людей под девизом «Don't be evil». Может мы и не заявляем об этом прямо, и у нас нет миллиардных маркетинговых бюджетов, чтобы убедить мир в нашей доброте. Но мы живем этим кредо каждый день, и мы ожидаем, что наше правительство и наши корпорации будут поступать так же.

Так же больше интересных штук — в Telegram канале.

Let's block ads! (Why?)

Божественный Незнакомец

Боксёрские перчатки. Перчатки для MMA. Вообще, полный набор для тренировок – лапы, шлем, защита на колени. Спортивный костюм, даже два – для лета и осени. Гитара. Синтезатор. Гантели. Кроссовки, купленные специально для пробежек. Беспроводные наушники, разумеется.

Всё это лежит в моей квартире. Формально всё это – моё. Но я этим не пользуюсь, т.к. купил не для себя. Не, я, конечно, пару раз тягал гантели, попиликал на синтезаторе, освоил аккорд A на гитаре, месяц ходил на тренировки по MMA, столько же занимался пробежками. Но нельзя же злоупотреблять чужой добротой? Вдруг вернётся хозяин всех этих замечательных вещей, и ему не понравится моё самоуправство?

Как думаете, кто он? Для кого я всё это купил? Потерпите, скоро узнаете.

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

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

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

Делаю, выкатываю, показываю, дорабатываю, дотачиваю – всё, принят функционал. И… И-и-и-и! Пф… Ничего.

Человек работает, как работал. Новой штукой, которую заказал, не пользуется. Вообще.

Причем, это касалось и рядовых сотрудников, и руководителей, и собственника. Говорит собственник – хочу смотреть показатели работы предприятия на одном экране! Сделай мне, это именно то, чего не хватало! Не могу я ковыряться в десятке отчетов, хочу на одном экране, в графическом виде!

Ну, делаю – уж такой-то человек не попросит то, чего ему не нужно. Ан нет. Получит диаграммы на мониторе, пару дней потычется, и перестанет пользоваться. Спрашиваю иногда – пользуешься? Да, говорит, конечно! А по глазам вижу, что нет.

Решил проверить – и его, и остальных. Факты нужны ведь, всегда пригодятся. Сделал маленькую подсистему, фиксирующую использование любых форм, отчетов и т.д. Назвал Статистика Использования Функционала Автоматизации (СИФА).

Жду какое-то время, проверяю – вах, не используется 90% того, что сделано. Девяносто процентов, Карл! Показываю собственнику, он в бешенстве! Ведь программисту платят огромные деньги! Я, разумеется, тут же получаю право решать, какие заказы на автоматизацию исполнять, а какие – нет. Ну а заказчики получают обязанность пользоваться всем тем, что заказали.

Что заставляет взрослого, здорового, умного, ответственного человека просить то, что ему не нужно? Причем, если разобраться, функционал-то полезный. Особенно это очевидно, когда меняется руководитель. Один не пользовался, второй приходит, смотрит, и говорит – блин, какая классная штука, буду пользоваться!

А если новому пользователю сказать, что использование обязательно – он даже возникать не будет, возьмет в работу и будет нахваливать. А потом попросит что-нибудь «для себя», я сделаю (т.к. новым людям выдаю кредит доверия), ну и подключаю СИФА – результат почти всегда одинаковый.

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

А когда, например, проводят опрос, нужна ли нам программа ДМС, или корпоративный абонемент в спортзал/бассейн, или приглашенный в офис фитнес-тренер – большинство яростно тянут руку вверх. Когда же запрошенное появляется, через месяцок-другой количество участников становится настолько мало, что никакое экономическое, корпоративно-культурное или бюджетно-освоенное объяснение не может оставить программу в действии.

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

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

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

Есть возможность запилить свою систему? Легко, верстаем на коленке за один день. Без понтов, лишней аналитики, удобств и т.д. Только базовая, необходимая прямо сейчас функциональность. Но – без жесткой привязки к текущим процессам. Т.е. система содержит в себе атомарные сущности – задача, пользователи, сроки, очереди и т.д. А алгоритм живет в голове – до тех пор, пока не докажет свою эффективность.

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

Но, как я говорил, к такому подходу я пришел интуитивно – просто видя ошибки коллег. Так и живу последние несколько лет.

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

Ну вот, так и жил. Пока не прочитал книгу Келли Макгонигал «Сила воли. Как развить и укрепить». Тут всё и встало на свои места.

Ну так что, готовы узнать, для кого я купил боксёрские перчатки, Коля заказал пробковую доску в офис, Лена купила CRM-систему, а Галя установила два массажных кресла?

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

Будущее Я – это Незнакомец. Тот Я, который в мечтах. Он совсем не похож на меня.

Он постоянно занимается спортом – и пробежки делает, и на какие-нибудь единоборства ходит. Именно ему я купил весь этот спортинвентарь – мне-то он нахрена? Будущий Я знает все гитарные аккорды, прекрасно управляется с синтезатором, и гантели у него не пылятся. Разумеется, он не курит, не пьет, не ругается матом, а его статьи ждут, как чуда. Если он вообще пишет статьи – нафига оно ему? Не, он, пожалуй, живет где-нибудь у моря. С боксёрскими перчатками, гитарой и гантелями.

Все те 90% автоматизации, которую мне заказывали на заводе, тоже были не для заказчиков, а для их будущих Я.

Ведь кто такой текущий я? Ну, тот же Вася. Просто местный князёк, колхозный менеджер, который не знает ни одного метода управления, кроме «ну-ка быстро работать!», понятия не имеет, куда податься, если выгонят, книжек не читает, результаты подразделения не улучшает – так, на плаву держится, лишь бы под «особый контроль» не попасть.

А его будущий Я? О, это блестящий менеджер! Всегда владеет ситуацией, знает всю деятельность подразделения в бесчисленном множестве разрезов. Это ему Вася заказал Монитор Руководителя Снабжения с кучей показателей (которые я должен был придумать). Будущий Я Васи – душа компании, все остальные менеджеры просто тащатся от него. Именно для своего будущего Я Вася придумал еженедельные встречи менеджеров в ресторане, даже сумел одну встречу организовать, а на вторую сам не пришел (хотя другие пришли). Будущий Я Васи, конечно, очень образован. Именно ему Вася выбил обучение на MBA за счет компании, даже сгонял на пару занятий (вместо будущего Я), но ведь самому-то Васе это не надо, поэтому и бросил, а долг в 400k выплатил в рассрочку.

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

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

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

Аналогично поступали, когда их просили выкроить время на благое дело – помощь другим студентам. В текущем семестре находили только 27 минут, для будущего Я – 85 минут, а для другого парня и все 120.

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

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

Хал Эрснер-Хершфилд, психолог из Нью-Йоркского университета, так же занимался исследованиям будущего Я. Правда, в контексте пенсионных накоплений – хотел найти объяснение, почему с годами всё меньше людей вообще об этом беспокоятся.

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

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

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

По окончании студентам выдавали по 1000 долларов, и просили распределить – на текущие расходы, развлечения и пенсионный счет. Те, что «познакомились» со своим будущим Я, отложили на пенсию вдвое больше, чем те, кто «принимал плацебо» — просто поболтал со своим отражением.

Короче, всё плохо. Разрыв между текущим и будущим Я усиливается, и люди уже не знают, что надо одному, а что – другому.

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

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

Ну а так, в целом, мне кажется, разделение очень четкое. Текущему Я – сиюминутные удовольствия. Будущему Я – ответственность за последствия.

Я буду курить, жрать бургеры, покупать всякую чушь в кредит, смотреть телек, игнорировать детей, бухать почаще, фейсбук тупить, ютубчик пялиться. Не, а чё. Придёт Он и всё исправит. А мне чего делать, пока Он не пришел? Буду развлекаться.

А он что? А Он справится.

Let's block ads! (Why?)

Mash — язык программирования, компилирует сам себя

image

Приветствую всех в новом 2020-м году.

С момента публикации первого поста про Mash прошел практически ровно 1 год.
За этот год язык был сильно доработан, были продуманы многие его аспекты и определен вектор развития.

Этим всем я рад поделиться с сообществом.

Disclaimer

Данный проект разрабатывается исключительно на энтузиазме и не претендует на мировое господство в сфере динамических языков программирования!

Не стоит рассматривать данную разработку в качестве эталона, к которому нужно стремиться, проект — не идеален, но тем не менее развивается.

GitHub
Сайт
Форум

Новый компилятор


В ветке /mashc репозитория проекта, вы можете увидеть новую версию компилятора, которая написана на Mash'е (на первой версии языка).

Компилятор имеет генератор кода в asm листинг (для ассемблера под стековую ВМ).
В данный момент веду разработку версии генератора под Java (JDK 1.8).

Новая версия компилятора полностью поддерживает функционал первой версии языка и дополняет его.

Новое ООП


В новой версии языка отчасти переработана работа с классами.
Методы класса могут быть объявлены, как в теле класса, так и за его пределами.
У класса теперь есть явно выражаемый конструктор: init.
Пример кода:
...
class MyClass:
  private:
    var a, b

  public:
    init(a, b):
      $a ?= a
      $b ?= b
    end

    func Foo():
      return $a + $b   
    end
end

func MyClass::Bar(c):
  return $a + $b + c
end
...

Если происходит наследование, то у нас появляется возможность легко делать inherited вызовы (super).
Пример кода:

...
class MySecondClass(MyClass):
  public:
    var c

    init(a, b, c):
      super(a, b)
      $c ?= c
    end

    func Bar():
      super($c)  
    end
end
...

x ?= new MySecondClass(10, 20, 30)
println( x -> Bar() )     // 60

Динамическое переопределение методов у экземпляров классов:

...
func Polymorph::NewFoo(c):
  return $a + $b + c  
end
...
x -> Foo ?= Polymorph -> NewFoo
x -> Foo(30)    // 60

Пакеты / пространства имен


Пространство имен должно оставаться чистым!
Соответственно язык должен предоставлять эту возможность.
В Mash'е, если метод класса статичен — он может быть безопасно вызван из любого участка кода.
Пример:
...
class MyPackage:
  func MyFunc(a, b):
    return a + b  
  end
end
...
println( MyPackage -> MyFunc(10, 20) )    // 30

К слову, оператор super при таком вызове будет работать корректно.

Исключения


В новой версии языка они обрабатываются, как классы:
...
try:
  raise new Exception(
    "My raised exception!"
  )
catch E:
  if E is Exception:
    println(E)
  else:
    println("Unknown exception class!")
  end
end
...

Новый enum


Теперь элементам перечисления могут быть присвоены константные значения:
enum MyEnum [
  meFirst = "First",
  meSecond = 2,
  meThird
]
...
k ?= meSecond
...
if k in MyEnum:
  ...
end

Встраиваемый ЯП


Потенциально — Mash может занять свою нишу в качестве встраиваемого языка программирования, по типу Lua.

Чтобы начать использование Mash в данных целях, не нужно даже самостоятельно собирать проект.
У Mash есть Runtime Environment — стековая ВМ, собранная в качестве динамической библиотеки с полноценным API.
Требуется лишь добавить её в зависимости проекта и совершить пару вызовов.

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

Mash + JVM


Начал вести разработку версии транслятора для JVM.
Возможно, спустя N-ное количество времени, на хабре появится пост на эту тему.

Итоги


Итогов особо нет. Это промежуточное представление результатов.
Всем удачи в 2020-м году.

Let's block ads! (Why?)

AirPods Pro, Apple TV+ и много денег: почему акции Apple достигли рекордной цены

После наступления нового года на американских биржах возобновились торги. В ходе одной из первых торговых сессий акции Apple достигли рекордной цены в $300 за штуку.

В итоге капитализация производителя iPhone выросла до $1,33 трлн, что позволило обойти извечных соперников из Microsoft ($1,23 трлн). Несмотря на то, что на следующий день акции немного подешевели, рекорд активно обсуждался в СМИ. Разбираемся в причинах успехов Apple.

Почему растут в цене акции Apple


Аналитики Bloomberg изучили причины оптимизма инвесторов. Несмотря на то, что в 2019 году компании пришлось впервые почти за двадцать лет снизить прогноз по продажам, у нее были и яркие успехи. Один из них – выпуск наушников AirPods Pro, спрос на которые держится на стабильно высоком уровне.

Также аналитики положительно оценили запуск стримингового сервиса Apple TV+. Компания сумела заключить сделку с производителем телеконтента Eden Productions, основанным бывшим исполнительным директором HBO Ричардом Плеплером. Новый подрядчик будет заниматься созданием телесериалов, документальных и художественных фильмов эксклюзивно для Apple TV+.

Еще один повод для оптимизма: очень много денег


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

Мы рассказывали о самых прибыльных направлениях деятельности Apple в этой статье. По подсчетам аналитиков, стоимость «сервисной» части бизнеса Apple составляет около $500 млрд, тогда как hardware-направление оценивается «всего» в $400 млрд. В фискальном 2018 году продажи Apple составили $265,6 млрд, а чистая прибыль – $59,5 млрд.

Купить акции Apple из России можно без необходимости открывать отдельный брокерский счет у зарубежных брокеров. Акции компании из Купертино, как и ценныу бумаги других американских корпораций, торгуются на рынке иностранных ценных бумаг Санкт-Петербургской биржи. Сегодня к торгам допущены более 500 ликвидных акций ведущих компаний всех секторов мировой экономики, в том числе все акции индекса S&P 500.

Чтобы совершать операции с акциями Apple вам понадобится брокерский счет – открыть его можно онлайн.


Полезные ссылки по теме инвестиций и биржевой торговли:


Читайте обзоры, аналитику рынков и инвестидеи в Telegram-канале ITI Capital

Let's block ads! (Why?)

Исследователи хотят использовать игру Mega Man 2 для обучения нейросетей

Источник: Nintendo

Разработчики из Бразилии, Нидерландов и Великобритании создали игровую соревновательную платформу EvoMan, которая имитирует игру Mega Man 2. Платформа разработана для обучения нейросетей. С её помощью исследователи проверят способность искусственного интеллекта не только выучить правила игры, но и адаптировать своё поведение под каждого из игровых боссов.

Как считают авторы статьи, Mega Man 2 — одна из немногих сред, на основе которой можно проверить способность ИИ одерживать победу как над одним, так и над несколькими противниками, а также перенимать навыки побеждённого. В EvoMan нейросеть должна победить восемь боссов Mega Man 2, оснащенных различным оружием. Каждый раз, когда враг побежден, нейросеть приобретает его оружие, что облегчает победу над оставшимися.

Участники соревнований EvoMan будут обучать своих ботов бою с любыми четырьмя врагами. Остальных искусственный интеллект должен будет победить самостоятельно. Предполагается, что в ходе обучения нейросети научатся выявлять общие закономерности игры и реагировать на них, например, избегать атаки противника или истощать его здоровье.

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

Игра Mega Man 2 — далеко не единственная, которая использовалась для обучения ИИ. В июле исследователи Facebook заявляли, что Minecraft хорошо подходит для усовершенствования алгоритмов понимания естественного языка. В 2013 году команда исследователей представила Arcade Learning Environment — коллекцию из более чем 55 игр для приставки Atari 2600, разработанную для тестирования искусственного интеллекта. В начале декабря исследовательская компания OpenAI представила Procgen Benchmark, набор из 16 виртуальных миров, которые также предназначены для проверки способности искусственного интеллекта к обучению.

Ранее компания OpenAI выпустила Neural MMO, виртуальную учебную площадку, представляющую собой RPG-подобный мир. В её рамках нейросети пытаются решать такие задачи, как поиск пищи в условиях ограниченных ресурсов и участие в бою с другими агентами.

Let's block ads! (Why?)

[Перевод] Статическая типизация не обязательно требует церемоний

Примечание переводчика: в текущий момент я подготавливаю материалы для обещанной статьи по монадам. К сожалению, это занимает довольно много времени, не говоря о том, что я всё же должен заниматься основной работой и уделять время семье, но процесс идёт. А пока представляю вам перевод небольшой свежей заметки от замечательного товарища Mark Seemann'а, которая мне показалась любопытной.

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


Церемонность

Люди, которые предпочитают динамически типизированные языки статически типизированным, часто подчеркивают тот факт, что отсутствие церемонности делает их продуктивнее. Это звучит логично, однако, это ложная дихотомия.


Церемонность — это то, что вы делаете до того, как начнете делать то, что вы действительно собирались сделать.

Venkat Subramaniam

Динамически типизированные языки производят такое впечатление, что им не требуются особые церемонии, но отсюда нельзя сделать вывод что статически типизированные языки их требуют. К сожалению, все мейнстримные статически типизированные языки относятся к одной и той же семье, и они требуют церемонности. Я думаю, что люди экстраполируют то, что они о них знают, ложно заключая что все статически типизированные языки обязательно идут в комплекте с оверхедом церемонности.

Это привело меня к мысли о том, что существует злосчастная Зона Церемонности:

Конечно же, эта диаграмма всего лишь упрощение, но я надеюсь, что она демонстрирует суть. C++, Java и C♯ — языки, которые требуют церемонности. Справа от них находятся языки, которые мы могли бы назвать транс-церемониальными, включая F♯ и Haskell.

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


Малое количество церемоний в JavaScript

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

> consume ([1,2,3], 1);
[ 2, 3 ]
> consume ([1,2,3], 2);
[ 3 ]
> consume ([1,2,3], 3);
[ 3 ]
> consume ([1,2,3], 4);
[]

В первом случае мы удалили только первый элемент, тогда как во втором и третьем мы удалили и 1, и 2, потому что сумма этих значений 3, а запрошенный quantity был 2 и 3 соответственно. В четвертом примере мы удалили все элементы, потому что запрошенный quantity был равен 4, и нам нужно просуммировать все числа, чтобы сумма стала достаточно большой. Функция должна работать строго слева направо, поэтому мы не можем взять только 1 и 3.

В JavaScript эта функция могла бы быть реализована примерно так:

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


Большое количество церемоний в C♯

Давайте сравним пример на JavaScript с кодом на C♯. Та же самая функция на C♯ моглбы бы выглядеть так:

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

Но на самом деле всё еще хуже. Код выше работает только с int массивами. А что, если мы хотим использовать long?

Нам придется написать еще одну перегрузку:

Вам нужна поддержка shortов? Еще ода перегрузка. decimal? Еще одна. byte? Еще одна.

Неудивительно, что сторонникам динамической типизации это кажется неудобным.


Малое количество церемоний в F♯

Ту же самую функцию в F♯ можно написать так:

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

quantity: ^a -> (seq< ^b> -> seq< ^b>)
  when ( ^a or  ^b) : (static member ( + ) :  ^a *  ^b ->  ^a) and
        ^a : (static member get_Zero : ->  ^a) and  ^a : comparison

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

> consume 2 [1;2;3];;
val it : seq<int> = seq [3]

> consume 2m [1m;2m;3m];;
val it : seq<decimal> = seq [3M]

Статическая типизация означает только то, что вы не можете вызвать её с произвольными значениями. Выражение вроде consume "foo" [true;false;true] просто не скомпилируется.

Вы можете объявлять типы явно в F♯ (так же, как вы делаете это в C♯), но по моему опыту обычно этого делать не надо: типы склонны протекать через вашу кодовую базу. Изменение тип функции, и вызывающий код как правило сам "поймет что к чему", Если вы подумаете о функциях, вызывающих друг друга, как о графе, то зачастую вы можете просто поправить листовые узлы, даже если вы поменяли типы где-то в глубине кодовой базы.


Малое количество церемоний в Haskell

Аналогично вы можете написать эту функцию в Haskell:

И снова вам не нужно указывать никаких типов. Компилятор просто их выведет. Вы даже можете спросить у GHCi о типе функции, и он вам выдаст:

> :t consume
consume :: (Foldable t, Ord a, Num a) => a -> t a -> [a]

Оно выглядит чуть более компактно чем выведенный в F♯ тип, но суть остается той же. Оно скомпилируется для любого Foldable контейнера (В том числе и об этом в следующей статье, прим. пер), и для любого типа принадлежащему тайпклассам Ord и Num. Num поддерживает сложение, а Ord — сравнение.

Как вы можете видеть, в F♯ и Haskell требуется довольно мало церемоний, однако оба языка остаются статически типизированными. Более того, их система типов мощнее чем у C♯ или Java. Они могут выражать такие взаимоотношения между типами, которые эти языки не могут.


Резюмируя

В спорах о статической типизации против динамической типизации, участники обычно обобщают их опыт с C++, Java или C♯. Им не нравится количеством церемоний, требуемое в этих языках, но они ложно считают, что отсюда следует, что не бывает статически типизированных языков без церемоний.

Но дело лишь в том, что мейнстримные статически типизированные языки просто занимают Зону Церемонности.

Статическая типизация без церемоний существует, как было показано на примерах F♯ и Haskell. Вы можете называть эти языки транс-церемониальными. Они предлагают лучшее из двух миров: проверки времени компиляции и небольшое количество церемоний.

Let's block ads! (Why?)

Electronic Arts считает читерами пользователей BattleField V, которые запускают игру под Linux, и перманентно банит их

Игроки в BattleField V столкнулись с неприятной ситуацией. Их аккаунты навечно блокируются разработчиками (Electronic Arts) из-за того, что пользователи хоть раз запускали игру под Linux, применив пакет DXVK (реализация Direct3D через API Vulkan, например, с использованием Wine). При переходе на платформу Windows блокировка учетной записи сохраняется.
Battlefield V — мультиплатформенная компьютерная игра в жанре шутера от первого лица, пятнадцатая по счtту из серии игр Battlefield, разработанная компанией EA DICE и изданная Electronic Arts для платформ Windows, PlayStation 4 и Xbox One.

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

Фактически, пользователей Linux обвинили в нарушении требований из шестого пункта (Правила поведения) Пользовательского соглашения Electronic Arts. Правда там ничего не сказано о Linux и DXVK. Вероятно, разработчики Battlefield V столкнулись с тем, что мошенники, возможно, нашли уязвимость при использовании DXVK именно с этой версией игры, что привело к тому, что Electronic Arts теперь банит всех подряд, включая обычных пользователей, кто использует пакет DXVK.

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

Если действие вашей Учетной записи EA было прекращено, у вас не будет доступа к вашей Учетной записи EA или Правам, а также для вас может быть заблокирован доступ к любому Сервису EA в будущем. При таком прекращении действие вашей лицензии по настоящему Соглашению также прекращается.

Получив такой ответ, некоторые пользователи разочаровались в Electronic Arts и пожалели, что потратили деньги на покупку игры. Вдобавок разработчики в других более ранних версиях Battlefield позволяли свободно использовать пакет DXVK и запускать приложения под Linux без всяких блокировок.

Let's block ads! (Why?)

[Перевод] Что внутри у Google Coral Edge TPU: тесты на скорость и разбор устройства

В 2019 году Google, наконец, выпустила оборудование с TPU под брендом Coral, которое можно купить. Однако не такие мощные облачные сети для обучения типа BigGAN со своими 100 петафлопс/с, и даже не такие, как самые дешёвые 180 TFlop/s v2 TPU, которые можно арендовать за $4,5 в час. Эти TPU-устройства должны работать «на краю», то есть, обеспечивать возможность внедрения решений с глубинным обучением для малых устройств без доступа к интернету. Насколько же хороши будут те TPU, которые мы сможем купить?
В спецификации текущих продуктов их скорость указана, как 4 TOPs (тераопераций в секунду). Это не стандартные устройства с поддержкой операций с 32-битными числами с плавающей запятой, поскольку tensorflow-lite, работающий на этих устройствах, использует 8-битную арифметику с фиксированной запятой. Также вы не найдёте у них такой полосы пропускания для памяти, как на облачных TPU или GPU. «Краевые» TPU подсоединяются к устройствам через USB 3.0 или по шине mPCIe 2-го поколения, поэтому скорость ограничится 500-640 МБ/с. Конечно, поскольку на таком устройстве есть всего 8 МБ SRAM, на передачу данных на или с устройства уйдёт не более 16 мс, а у модели, которую мы тестировали для написания этой статьи, на это ушло всего 10 мс. Вы не будете страдать от нехватки памяти, поскольку эти устройства не предназначены для обучения с нуля. Однако на этом устройстве можно обучить последний слой модели. Основной смысл использования краевых TPU – построение логических заключений, и именно так я буду проверять скорость данного устройства.

Самое закрытое из устройств типа Coral Edge TPU вышло в марте 2019, и именно с ним мне удалось поиграться. Это один из прототипов Coral, хотя по документам у него абсолютно такая же производительность, как у выпущенных плат с mPCIe. С USB 3.0 проблем не возникает, но если вам не хочется возиться с внешним донглом, можно поставить в разъём платы M.2 Accelerator A+E вместо WiFi-карты:


Слева: моя WiFi-карта в ноутбуке. Справа: ускоритель M.2 A+E, вставляющийся в такой же слот.

И что же находится внутри краевого TPU-ускорителя размером 30 мм х 65 мм и стоимостью в $75? Может ли там быть mPCIe-ускоритель размером 30 мм х 22 мм за $35 с USB-адаптером и радиатором? Можем ли мы аккуратно вскрыть коробку из пластика и металла?


Передняя и задняя часть Edge TPU

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


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

Ответ на поставленный выше вопрос: нет, не буквально, но платы весьма схожи:


Рабочая сторона Coral Edge TPU. Справа – ускоритель M2 A+E и отдельный TPU-чип на одноцентовой монете

Чипы, касающиеся радиатора – это, вероятно, TPU (покрупнее) и память. Собрав Edge TPU обратно, я провёл собственные тесты на скорость, хотя тесты от Google говорят о 10- и даже 20-кратном ускорении работы по сравнению с CPU.

Пример с сайта Coral для распознавания объектов можно запускать и на CPU, и на TPU. Я подсоединяю это устройство к своему Acer Chromebook 11 с Galium OS 2.1, которая достаточно похожа на Debian для того, чтобы можно было без проблем установить tf-lite и программу для работы с TPU. Модели MobileNetV2 SSDLite для распознавания объектов занимают менее 7 МБ и работают с изображениями размером 300х300. На TPU одно изображение обрабатывается за 20 мс (+10 мс на однократное копирование изображения). На моём ноутбуке с процессором Intel Celeron 2.16GHz CPU 2014 года изображение обрабатывается за 1500 мс. На другом ПК, с процессором Intel Xeon 2.5 GHz CPU (который в 15 раз быстрее моего по данным cpubenchmark.net), изображение обрабатывается за 130 мс (при потреблении в 210 Вт!). По данным cpubenchmark.net, самый быстрый CPU из доступных будет в 3 раза быстрее этого: и это всё равно будет медленнее краевого TPU, который, к тому же, гораздо дешевле и потребляет гораздо меньше!

Более интересный проект – распознавание объектов в видеопотоке с камеры моего ноутбука. На процессоре Celeron выбранный пример успевает обработать меньше одного кадра в секунду. На TPU он обрабатывает 20 кадров в секунду – то есть, работает в реальном времени. И лишь четверть времени уходит на общение с TPU, остальное – это изменение размера картинок и вывод итоговых данных, которыми занимается CPU. Хотя я установил программу для работы TPU на максимальной частоте, я и близко не подошёл к пределам его возможностей, поэтому радиатор TPU не нагрелся до какой-либо некомфортной температуры.

Приведённые примеры было достаточно легко изменить и подстроить. Для начала работы с устройством нужно всего лишь установить рабочее окружение TPU через apt-get, потом установить tf-lite через pip – и всё готово для работы с примерами. Модели в этих примерах уже предварительно откомпилированы. Для более правдоподобного теста скорости нужно было бы обучить модель с нуля, запустить её на GPU и CPU, преобразовать в tf-lite, и выполнить его на CPU и TPU.

В целом, меня обрадовало это устройство. Мне кажется удивительным, что сеть, распознающая объекты на изображениях размера 300х300, работает на нетбуке 2014 года в реальном времени, с апгрейдом стоимостью всего в $75 (или даже $35, если взять плату M.2). Конечно, краевой TPU не заменит GPU для обучения и даже для оценки моделей. Однако я вижу большой потенциал у платы, в которой один TOPs обходится в $10 и потребляет 0,5 Вт. Это, по меньшей мере, в 10 раз дешевле, чем работать с GPU! И гораздо менее затратно по энергии. Это прекрасный вариант для демонстрации работы где-то в полях. Если интересующая вас задача указана в приведённой на сайте продукта табличке, то этот чип окажется полезным в случае, если приоритетом для вас будут низкое энергопотребление и небольшой размер системы.

Let's block ads! (Why?)

Артур Хачуян: искусственный интеллект в маркетинге

Артур Хачуян — известный российский специалист по обработке больших данных, основатель компании Social Data Hub (сейчас Tazeros Global). Партнёр НИУ ВШЭ. Подготовил и представил совместно с НИУ ВШЭ законопроект по Big Data в Совете Федерации Выступал в институте Кюри в Париже, СПБГУ, ФУ при Правительстве РФ, на Red Apple, International OpenDataDay, RIW 2016, AlfaFuturePeople.

Лекция записана на open-air фестивале «Гик-пикник» в Москве в 2019 году.

Артур Хачуян (далее – АХ): – Если из огромного количества отраслей – из медицины, из строительства, из чего-то, чего-то выбирать то, где технология больших данных, машинного обучения, глубинного обучения наиболее часто используется, то это, наверное, маркетинг. Потому что последние где-то года три всё, что окружает нас в каких-то рекламных коммуникациях, сейчас завязано именно на анализ данных и именно на том, что можно назвать искусственным интеллектом. Поэтому сегодня буду рассказывать вам про это из такой, очень отдалённой истории…

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

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

С помощью технологий пытаются решить проблему эффективной коммуникации


Если я вам скажу подумать, что общего между «Порнхабом» и «М. Видео», о чём вы подумаете?

Комментарии из зала (далее – З): – Телеки, аудитория.

АХ: – Моя концепция в том, что это – два места, куда люди приходят за определённым видом услуг, или назовём это – за определённым видом товаров. И эта аудитория отличается тем, что она ничего не хочет рассказывать продавцу. Она хочет зайти и получить то, что её интересует в каком-то явном или неявном виде. Естественно, никто, приходя в «М. Видео», не хочет общаться ни с какими продавцами, не хочет понимать, не хочет отвечать ни на какой из их вопросов.

Поэтому из этого всего вытекает первая история.

Когда появились технологии получения дополнительных знаний для того, чтобы каким-то образом не коммуницировать с человеком. Нам всем нравится, когда мы звоним в банк, и банк нам говорит: «Здравствуйте. Алексей, вы наш вип-клиент. Сейчас с вами поговорит какой-то суперменеджер». Вы приходите в этот банк, и там действительно есть уникальный менеджер, который может с вами поговорить. К сожалению или к счастью, ещё ни одна компания не додумалась, как на тысячу клиентов нанять тысячу персональных менеджеров; а так как большинство этих людей сейчас находится в онлайне, задача – понять, что это за человек и как правильно с ним коммуницировать до того, как он пришёл на какой-нибудь рекламный ресурс. И поэтому, собственно, появились технологии, которые пытаются решить эту задачу.

Извлечение данных – вот новая нефть


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

Приходит ещё какой-нибудь… Виталий. Виталий тоже очень долго разбирается, говорит, – Ну, вот, мне нужно то-то, то-то. А вы ему говорите, – Цветы для мамы, да? И продаёте ему букет.

Концепция здесь в том, чтобы узнать достаточное количество данных, для того чтобы понять, что этому человеку вообще нужно. Все сразу подумали о каких-то рекламных сетях и так далее…

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

Значит, в двух деревнях решили провести исследование о средней длине мужского достоинства. Значит, в первой деревне, Вилларибо, средняя длина – 15 сантиметров, в деревне Виллабаджо – 25. Знаете почему? Потому что в первой деревне проводили измерения, а во второй – опрос.

Порноиндустрия – флагман рекомендательных систем


Это то, почему современный подход именно анализа всех людей поголовно, пусть их и чуть меньше, чем 100%, но это те люди, которых не нужно спрашивать, на них не нужно смотреть. Достаточно проанализировать то, что сейчас называется цифровым следом, чтобы понять, что этому человеку нужно, как с ним правильно говорить, как правильно сформировать спрос вокруг него. С одной стороны, это бездумная машина (но мы это с вами это прекрасно знаем); мы не хотим общаться с людьми из «М. Видео», а уж тем более, заходя на такие ресурсы, как «Порнхаб», мы хотим получить ровно то, что нам нужно.

Почему я всегда говорю про «Порнхаб»? Потому что adult-индустрия – первая, которая пришла к анализу подобных технологий, к внедрению подобных технологий, к анализу данных. Если вы возьмёте три самые популярные библиотеки в этой сфере (например, TensorFlow или Pandas для «питончика», для обработки csv-шек и так далее), если вы откроете на «Гитхабе», недолгим «гуглением» все эти фамилии вы найдёте парочку человек, которые либо работали, либо на данный момент работаю в компании «Порнхаб», и первые, кто там занимался внедрением именно рекомендательных систем. Вообще, эта история очень продвинутая, и показывает, насколько эта аудитория, насколько эта компания ушла вперёд.

Три уровня идентификации


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

Если, скажем, мы говорим о построении рекомендательной системы, то первый уровень – данные, которые находится у самого магазина (история покупок, всевозможные транзакции, то, как человек взаимодействовал с интерфейсом).

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

И третья большая часть – это окружение самого этого человека. Да, бытует мнение, что если человека нет в соцсетях – о нём нет там никаких данных (вы наверняка уже знаете, что это не так), но самое важное, что данные, которые находятся у человека в профиле (или в каком-то приложении) – это только 40% знаний, которые можно получить о нём. Остальная информация получается из его окружения. Фраза «скажи мне, кто твой друг, и я скажу, кто ты» в XXI веке обретает новый смысл, потому что огромный массив данных можно получить вокруг этого человека.

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

Анализируют даже поведение героев сериалов


Я вам покажу три картинки, а вы скажите, в чём между ними разница.

Вот эта:

Эта:

И вот эта:

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

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

Тут технологии пошли настолько далеко, что сейчас анализируются герои сериалов, на которых смотрит человек. То есть вы лайкаете сериалы – они [лайки] смотрятся, отсматриваются, с кем вы там взаимодействовали, для того чтобы понять, какое лицо подойдёт, чтобы вы с ним провзаимодействовали. Звучит как полный бред, но вы ради интереса на каком-нибудь из ресурсов попробуйте – разные люди видят разный креатив (для того, чтобы правильно с ним взаимодействовать).

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

Как определяют потребности? Психометрия. Физиогномика


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

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

  • первая основана на контенте, который вы потребляете – на словах, что вы пишете, на какой-то информации, которую вы лайкате, видео и т. д.;
  • вторая завязана на том, как вы взаимодействуете с веб-интерфейсом, как вы печатаете, какие кнопочки зажимаете – действительно, есть целые компании, которые по клавиатурному почерку умеют достаточно достоверно определять то, что сейчас называется психотипами.
  • Я вот – не очень психолог, досконально плохо понимаю, как это работает, но с точки зрения рекламных коммуникаций аудитории, разбитые на эти сегменты, работают очень хорошо, потому что кому-то нужно показать красный экран с синей женщиной, кому-то – тёмно-синий фон с какой-то абстракцией, и это работает очень круто. На каких-то низких уровнях – настолько, что человек, даже не думает об этом. Сейчас основная проблема какая на рекламном рынке? Все – агенты спецслужб, все прячутся, у всех установлен миллион тысяч разрешений для браузеров, для того чтобы их никак не идентифицировали – у вас наверняка стоят «Адблоки», «Гостри» и всевозможные приложения, блокирующие отслеживание. Из-за этого очень сложно что-то понимать о человеке. А технологии ушли дальше – нужно не просто знать, что этот человек вернулся на ваш сайт в 125-й раз, а что он ещё такой-то странный человек.

Физиогномика – очень спорная наука. Её даже наукой не считают. Это группка людей, которые раньше программировали детекторы лжи для какого-нибудь МВД, а сейчас занимается, что называется, персонификацией креатива. Подход здесь очень простой: берётся несколько ваших публичных фотографий из каких-нибудь соцсеточек, по ним строится трёхмерная геометрия. И если вы юрист, то сейчас скажете, что это лицо и персональные данные; а я вам скажу, что это 300 тысяч точек, находящихся в пространстве, и это не лицо, и персональными данными не являются. Так обычно говорят все, когда к ним приходит Роскомнадзор.

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

«Чёрный ящик» машинного обучения


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

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

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

Люди не хотят знать, что о них знают


А вторая история – в том, что клиент никогда не хочет узнать, почему он получил именно это объявление, именно этот продукт. Я вам расскажу такую историю. Мой первый опыт коммерческого внедрения рекомендательных систем на подобных алгоритмах именно ради исследования был в 2015 году в очень крупной сети секс-шопов (да, тоже не особо лицеприятная история).

Клиентам была предложено следующее: они заходят, авторизуются своей социальной сетью, где-то через 5 секунд получают полностью персонифицированный магазин для них, то есть прям все товары изменились – они попадают в определённую категорию и так далее. Знаете, насколько увеличилась конверсия этого магазина? Ни на сколько! Люди заходили и сразу убегали из него. Они заходили и понимали, что им предложено именно то, о чём они думали…

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

Очень популярная история – это СМИ, потому что все они используют подобные рекомендательные системы. Раньше алгоритмы были очень простые: смотрите категорию «Политика» – вам и показывают новости из категории «Политика». Сейчас всё настолько сложно, что анализируются те места, где вы остановили мышку, на каких словах вы сконцентрировались, что вы скопировали, как вы вообще провзаимодействовали с этой страницей. Потом анализирует лексика самих сообщений: ага, вы не просто новости про Путина читаете, а в каком-то определённом ключе, с каким-то определённым эмоциональным окрасом. И когда человек получает какую-то новость, он даже не задумается над тем, как он сюда пришёл. Тем не менее потом с этим контентом взаимодействует.

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

Искусственный интеллект ловит клиента на взлёте и формирует спрос


И тут возникает один очень интересный философский вопрос, переходя от создания рекомендательной системы к формированию спроса. Редко кто о нём задумывается, но, когда вы пытаетесь спросить у условного «Инстаграма», – «Зачем вы собираете данные? Почему не показывать мне абсолютно рандомную рекламу?», – «Инстаграм» вам скажет: «Друг, это всё сделано, чтобы тебе показывать именно то, что тебе интересно». Мол, мы настолько точно хотим тебя узнать, чтобы показать тебе именно то, что ты ищешь.

Но технология давно перешагнула этот страшный рубеж, и подобные технологии уже давно не предсказывают то, что вам нужно. Они (внимание!) формируют спрос. Это, наверное, самая страшная вещь, которая крутится вокруг искусственного интеллекта в подобных коммуникациях. Страшна она в том, что она используется последние 3-5 лет почти повсеместно – от гугловой выдачи до яндексовой выдачи, до каких-то систем… Ладно, не буду про «Яндекс» ничего плохого говорить; и хорошего.

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

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

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

Google может начать формировать ваше мировоззрение


Такие исследования проводили несколько зарубежных компаний, которые занимаются i-трекингом. Они ставили на специальные компьютеры девайсы, которые записывают, куда смотрят глаза подопытного. Брала от пяти до семи тысяч добровольцев, которые просто скролили ленту, взаимодействовали с соцсетями, с рекламой, а они записывали информацию, на каких частях баннеров, креативов эти люди останавливают взгляд.

И получилось, что, когда люди получают такой сверх-персонифицированный креатив, они даже не задумываются об этом – они сразу переходят, начинают с этим взаимодействовать. С точки зрения бизнеса это хорошо, но с точки зрения нас, как пользователей, это не очень круто, потому что, – всего чего боятся? – Что в один прекрасный момент условный «Гугл» может начать (может, конечно, и не начать) формировать своё мировоззрение. Он может завтра, например, людям начать показывать новости о том, что земля плоская.

Шутка шуткой, но их ловили огромное количество раз, что во время выборов они начинают определённым людям давать определённую информацию. Мы все привыкли, что поисковая система всё достаёт честно. Но, как я всегда говорю, если хотите узнать на самом деле, как устроен мир – напишите свою собственную поисковую систему, без фильтров, без обращения внимания на копирайт, без ранжирования каких-то ваших друзей в выдаче. Выдача реальных данных в интернете вообще отличается от того, что показывают «Гугл», «Яндекс», «Бинг» и так далее. Какие-то материалы скрываются, потому что друзья, коллеги, враги или ещё кто-то (или бывший любовник, с кем ты переспал) – неважно.

Как победил Трамп


Когда были последние выборы в США, проводилось очень простое исследование. Они брали по одним и тем же запросам в разных местах, с разных «айпишников», с разных городов, разные люди гуглили одно и то же. Условно, запрос был в стиле: кто победит на выборах? И удивительным образом результаты таким образом были построены, что в тех штатах, где наибольшее количество людей пыталось голосовать не за того кандидата, они получали какие-то хорошие новости про кандидата, которого продвигал «Гугл». Какого? Ну, тут понятно какого – того, который президентом стал. Это абсолютно недоказуемая история, и все эти исследования – пальцем по воде. «Гугл» может сказать: «Ребят, всё это сделано для того, чтобы мы показывали максимально релевантный контент для вас».

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

Тех, у кого нет денег сейчас, уже готовят к будущим покупкам


Здесь ещё такой интересный момент, о котором я расскажу. Огромное количество активной аудитории сейчас в социальных сетях, в приложениях – это молодёжь. Назовём так её – неплатежеспособная молодёжь: дети 8-9 лет, которые кликают в дебильные игры, это – 12-13-14, которые только регистрируются в социальных сетях. Зачем огромные компаниям тратить огромные бюджеты и ресурсы на то, чтобы создавать приложения для неплатёжеспособной аудитории, которая никогда не монетизируется? В тот момент, когда эта аудитория станет платёжеспособной, о ней будет достаточный объём данных, чтобы очень хорошо прогнозировать её поведение.

Сейчас любого таргетолога спроси, какая самая сложная аудитория? Они скажут: высокодоходная. Потому что продать, например, квартиру стоимостью 150 миллионов рублей через социальные сети практически невозможно. Единичные случаи, когда вы делаете какую-то рекламу на 10 тысяч человек, один покупает эту квартиру – у клиента успех… Но один из десяти тысяч с точки зрения статистики – это хрень полная. Так вот, почему сложно определить высокодоходную аудиторию? Потому что люди, которые сейчас являются членами высокодоходной аудитории, были рождены, когда интернет ещё был совсем маленький, когда Артемия Лебедева ещё никто не знал, и о них нет никакой информации. Невозможно предсказать их модель поведения, невозможно понять, кто для них является лидерами мнение, из каких источников контент они принимают.

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

Естественно, это ни фига не работает на практике, поскольку все дети всё равно играют в мамины, папины аккаунты – таким образом информация собирается. Когда дадите ребёнку в следующий раз планшет, подумайте об этом.

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

Предсказание поведения этих людей будет доступно через 10-15 лет – именно в тот момент, когда они станут платёжеспособной аудиторией. Что самое главное, эти люди уже заранее дали разрешение на обработку своих персональных данных, передачу их третьим лицам и всё вот это вот счастье, и так далее.

Кто потеряет работу?


И последняя у меня история о том, что все всегда спрашивают, что будет через 50 лет: мы все умрём, будет безработица у маркетологов… Есть тут маркетологи, переживающие за безработицу, да? Переживать, вообще, не стоит, потому что любой высококвалифицированный человек работу не потеряет.

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

У меня с историей всё, так что можете задавать вопросы, если у вас есть ещё. Спасибо.

Ведущий: – Друзья, мы сейчас переходим к блоку «Вопрос – ответ». Вы поднимаете руку – я к вам подхожу.

Вопрос из зала (З): – Вопрос про «чёрный ящик». Говорили, что можно конкретно понять, почему именно такой результат по такому-то пользователю. Это какие-то алгоритмы, или это каждый раз для каждой модели ad hoc (прим. автора: «специально для этого» – латинский фразеологизм) нужно разбирать? Или есть уже готовые, для какой-то нейросетки можно понять, грубо говоря, бизнес-смысл?

АХ: – Здесь нужно понимать следующее: в машинном обучении есть огромное количество задач. Например, есть задача – регрессия. Для регрессии вообще никаких нейросетей не нужно. Там всё просто: у вас есть несколько показателей, вам нужно просчитать следующие. Есть задачи, где необходимо прибегать к такой штуке, как глубинное обучение. Действительно, в глубинном обучении сложно достоверно понять, какие веса к каким нейрончикам были установлены, но юридически всё, что вам необходимо – понять, какие данные были на входе, как они отыграли на выходе. Этого достаточно юридически для того, чтобы запантентовать подобное решение и этого достаточно для того, чтобы понять, на основании чего была принята история.

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

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


З: – Просто вопрос в чём: именно понять, как объяснить, продать кому-то, кто не разбирается в машинном обучении. Я хочу сказать: моя модель – от цвета волос чётко ведёт к… вот, цвет волос меняется… Это возможно или нет?

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

О создании виртуальной личности


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

АХ: – Есть куча разных плагинов, которые занимаются именно рандомизацией поведения. Есть крутая штука – Ghostery, которая, по-моему, почти полностью тебя скрывает от кучи различных трекеров, которые не могут потом записывать эту информацию. Но по факту сейчас вам достаточно будет закрытого профиля в социальных сетях, чтобы никто, никакие злые парсеры там ничего не собрали. Лучше, наверное, поставить какое-нибудь расширение или написать что-нибудь самому.

Понимаете, здесь такая концепция, что юридически, например, персональными данными называются данные, по которым вас можно идентифицировать, и в законе приведён как пример адрес местожительства, возраст и так далее. Сейчас данных, по которым вас можно идентифицировать – бесчисленное множество: тот же клавиатурный почерк, то же нажатие, цифровая подпись браузера… Рано или поздно, человек ошибается. Он может где-нибудь в «кафэхе» сидеть через «Тор», но в конце концов в один прекрасный момент либо VPN забудет включить, либо ещё что-то, и в этот момент его можно будет идентифицировать. Так что проще всего сделать закрытый аккаунт и поставить какое-нибудь расширение.

Рынок идёт к тому, что нужно нажать только одну кнопочку для получения результата


З: – Спасибо за рассказ. Как всегда, очень интересно всегда (я за вами слежу). Вопрос такой: какой прогресс в смысле создания систем позитивных для пользователей, рекомендательных систем? Вы говорили, что в своё время занимались рекомендательными система для поиска партнёра полового, друга жизни (или музыка, которая потенциально может понравиться человеку)… Насколько всё это перспективно, и как вы видите его развитие именно с точки зрения создания нужных людям систем?

АХ: – Вообще, рынок идёт к тому, что людям нужно нажать одну кнопочку и сразу получить то, что нужно. Что касается моего опыта создания приложений для знакомств (мы его, кстати, в конце года перезапустим), там, помимо того, что 65% было женатых мужиков, самая сложная рекомендательная проблема была в том, что человеку на старте приложения предлагалось несколько моделей – «Дружба», «Секс», «Секс-дружба» и «Бизнес». Люди выбирали не то, что им нужно. Мужчины приходили выбирали «Любовь», а на самом деле они кидали всем обнажёнку, ну и так далее.

Проблема была в том, чтобы идентифицировать человека, который не подходит какой-то одной из этих моделей, и его как-то плавно взять и переместить в другую сторону. Из-за малого количества данных определить, ошибка ли это алгоритма прогнозирования, либо человек находится не в своей категории – очень сложно. То же самое с музыкой: очень мало сейчас реально достойных алгоритмов, которые хорошо «факастят» музыку. Может быть, «Яндекс.Музыка». Кто-то считает алгоритм «Яндекс.Музыки» плохим. Мне она, например, нравится. Мне лично, например, не нравится алгоритм «Ютуб»-музыки и так далее.

Там есть, конечно, свои тонкости – там всё завязано на лицензиях… Но реально спрос на подобные системы достаточно велик. В своё время была известна компания «Ритейл Рокет», которая занималась внедрением рекомендательных систем, сейчас она как-то не очень хорошо живёт – видимо, потому что они долго алгоритмы свои не развивали. Всё идёт к этому – к тому, чтобы мы зашли и, ничего не нажимая, получили то, что нам нужно (и полностью отупели, потому что умение выбирать у нас полностью исчезло).

Influence-маркетинг


З: – Здравствуйте. Меня зовут Константин. Я хотел бы поднять вопрос по поводу influence-маркетинга. Знаете ли вы какие-то системы, которые позволяют бизнесу подобрать бизнесу подходящего ему блогера по каким-то данным статистики и так далее? И по каким признакам это производится?

АХ: – Да, я сейчас начну издалека и сразу скажу, что проблема подобных всех технологий в том, что весь этот искусственный интеллект в маркетинге сейчас как канатоходец идёт: слева находятся крупные компании, у которых куча бабла, и у них в любом случае будет эффективно всё работать, потому что у них рекламные кампании направлены просто на просмотры; с другой стороны есть куча мелкого бизнеса, у которого это не будет работать, потому что у них данных много. Пока применимость этих историй где-то посерединке.

Когда есть уже хорошие бюджеты, и задача эти бюджеты правильно обрабатывать (и данных уже, в принципе, достаточно много)… Я знаю пару сервисов, что-то вроде «Гетблогера», в которых вроде как есть алгоритмы. Я, честно говоря, эти алгоритмы не изучал. Могу вам рассказать, какой подход используем мы для поиска лидеров мнений, когда нужно каким-нибудь мамам подарить подарок.

Мы используем метрику, которая называется «Время распространения контента». Работает это следующим образом: вы берёте человека, чью аудиторию вы анализируете, и вам нужно на каждый пост планомерно (напр., раз в 5 минут) собирать информацию, кто его залайкал, закомментировал и так далее. Таким образом можно будет понять, в какой момент времени каждый человек из его аудитории провзаимодействовал с его контентом. Повторить эту операцию для каждого представителя его аудитории, и таким образом, используя метрику среднего времени распространения контента, её можно, например, в большом сетевом графе этих людей кинуть в цвет и использовать эту метрику для построения кластеров.

Это работает достаточно хорошо, если мы хотим, например, найти 15 мам, которые держат своё общественное мнение на каком-нибудь woman.ru. Но это достаточно сложная техническая реализация (хотя чисто теоретически можно и на «Питоне» это сделать). Суть в том, что проблема influence-маркетинга в крупных рекламных агентствах – им нужны крупные, крутые, дорогие блогеры, которые ни хрена не работают. Вот, автобренд хочет через какого-то лидера мнений продать какой-то товар – им использовать автоблогера нужно в последнюю очередь, потому что аудитория таковых либо уже купила автомобиль, либо точно знает, какой автомобиль она хочет просто сидит смотрит на крутые тачки. Здесь важно ещё не упустить анализ аудитории самого человека.

Боты маркетинга


З: – Подскажите, как сильно боты в социальных сетях влияют на сбор информации и её качество?

АХ: – С ботами такая интересная штука. Дешёвых ботов достаточно легко идентифицировать – у них либо контент одинаковый, либо они в друзьях друг у друга находятся, либо они в единой сетке находятся. Со сложными ботами есть тоже подходы. Или вы спрашиваете задачу, как человека к его фейку привязать?

З: – Насколько качественная информация будет на выходе со всем этим мусором?

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

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

Здесь всё сводится не к проценту погрешности, а к количеству времени, которое необходимо для достоверной идентификации человека. Для кого-то, кто живёт со своим «Инстаграмом», это время достоверной идентификации, сводится к пяти минутам. Для кого-то – к шести-восьми месяцам.

Кому и как продать данные?


З: – Здравствуйте. Мне интересно узнать, как происходит продажа данных между компаниями? К примеру, у меня есть приложение, в котором можно узнать (разработчику), куда ходит человек, в какие магазины, и сколько там тратит денег. И мне интересно узнать, как, допустим мне, продать этим магазинам данные о своей аудитории или вкинуть свои данные в одну огромную базу данных и получить за это деньги?

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

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

Кто победит – художник или технарь?


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

АХ: – Слушайте, ну они работают вместе. Инженеры не придумывают креатив. Те, кто креативит, не придумывает аудитории. Тут некая мультидисциплинарная история. Реально проблемы сейчас у тех, кто сидит и кнопочки нажимает, у тех, кто делает «манки-джоб», каждый день нажимает одно и то же – вот такие люди пропадут.

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

Примитивная реклама отомрёт


З: – По большому счёту реклама, которая демонстрируется, баннеры – там же по большому счёту даже продающие тексты не пишутся: «Нужны окна – бери!», «Нужно ещё что-то – бери!», то есть там вообще никакого креатива нет.

АХ: – Такая реклама отомрёт, конечно, рано или поздно. Она отомрёт не столько из-за развития технологий, а сколько из-за развития нас с вами.

Релевантное лучше перемешивать с нерелевантным


З: – Я здесь! У меня вопрос по поводу эксперимента, который, как вы сказали, у вас не получился (с рекомендательной системой). А на ваш взгляд, проблема в том, что там было подписано, почему рекомендуется, или в том, что всё, что видел пользователь, как бы было ему релевантно? Потому что я читала эксперимент для мам, и там ещё не было столько данных и там не было ещё столько данных из интернета, просто были данные продуктового ритейлера – предсказывал беременность (что они будут мамами). И когда они показывали подборку товаров для будущих мам, мамы приходили в ужас от того, что о них это узнали до каких-то официальных вещей. И это не работало. И для того, чтобы решить эту проблему, они нарочно перемешивали релевантные товары с чем-то совсем нерелевантным.

АХ: – Мы специально людям показали, на основании чего сделаны рекомендации, чтобы понять их обратную связь. Собственно, отсюда и родилась концепция, что людям не нужно говорить, что это какие-то супер-релевантные товары для него.

Да, кстати, подход перемешивать их с нерелевантными есть. Но тут есть обратная штука: иногда заходят люди, и они с этим нерелевантным товаром взаимодействуют – получаются случайные выбросы, модели ломаются и происходит всё ещё сложнее. Но такое есть на самом деле. Более того, многие компании специально, если знают, что кто-то обрабатывает их данные (кто-то может у них украсть подобную выдачу), – они специально её иногда перемешивают для того, чтобы можно было потом доказать, что вы взяли данные не со своей рекомендательной системы, а с условного «Яндекс.Маркета».

Блокировщики рекламы и браузерная безопасность


З: – Привет. Ты упоминал про Ghostery и Adblock. Можешь вообще рассказать, насколько такие трекеры вообще эффективны (может, по статистике)? И были ли у тебя какие-нибудь заказы от компаний: мол, сделай так, чтобы нашу рекламу нельзя было закрыть «Адблоком».

АХ: – Мы напрямую с рекламными платформами не связываемся – как раз из-за того, чтобы они не просили сделать так, чтобы их рекламу видели все. Я лично пользуюсь Ghostery – считаю, очень крутое расширение. Сейчас же все браузеры борются за приватность: «Мозилла» выпустила кучу всевозможных обновлений, «Гугл Хром» супер-«секьюрный» теперь. Они все блокируют всё что только можно. «Сафари» уже даже «Гироскоп» по умолчанию отключил.
И этот тренд, конечно, хороший (не для тех, кто собирает данные, хотя и они тоже выкрутились), потому что люди сначала заблокировали «куки». Все, кто владел рекламными сетями, вспомнили о такой замечательной технологии, как фингерпринты браузера – это алгоритмы, которые получают 60 разных параметров (разрешение экрана, версия, установленные шрифты) и на основании их высчитывают уникальный «айдишник». Перешли на это. А браузеры начали бороться и с этим. В общем, это будет бесконечная битва титанов.

Последняя девелоперская «Мозилла» достаточно защищена. Она практически никакие «куки» не сохраняет, устанавливает малое время жизни. Особенно, если включить «Инкогнито», тебя вообще никто не найдёт. Вопрос в том, что неудобно будет во всех сервисах пароли вводить.

Где работает и не работают психотипирование и физиогномика?


З: – Артур, спасибо большое за лекцию. Тоже с удовольствием слежу за твоими лекциями на «Ютубе». Ты упомянул о том, что маркетологи чаще и чаще прибегают к тому, чтобы использовать психотипирование, физиогномику. У меня вопрос: в каких категориях брендов это работает? Моё убеждение – это только для FMCG подходит. Например, автомобиль выбирать – это…

АХ: – Могу скачать, где это точно работает. Это работает во всяких историях типа «Амедиатеки», сериалах, фильмах и так далее. Это хорошо работает в банках и банковских продуктах, если это не премиальный сегмент, а всякие студенческие карты, рассрочки – вот такие вещи. Это действительно очень хорошо работает в FMCG и во всяких «Айфонах», зарядках, во всей этой чебурде. Это работает хорошо в «маминых» товарах, «папиных». Хотя знаю, что в рыболовстве (есть такая тема)… Несколько раз были кейсы с рыболовами – их никогда не удаётся достоверно сегментировать. Не знаю почему. Какая-то ошибка статистическая.

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

Машины распознают уловки как статистические вбросы.


З: – У меня вопрос про таргетинг. Возможно ли существование (или вдруг они существуют) условного рандомного персонажа, который во всём противоречит себе: в начале он гуглит «лучшие спортзалы», а потом гуглит «10 способов ничего не делать»? И так во всём. Может ли таргетинг уследить за таким, который сам себе противоречит?

АХ: – Здесь вопрос только вот в чём: если вы 2 года пользовались «Гуглом», рассказали ему про себя всё, что только можно, а сейчас установите себе плагин, который будет подобные рандомные запросы писать, то, конечно же, по статистике можно будет понять – то, что вы делаете сейчас – это статистический выброс, и всё это дело отсеять. Если вы хотите – зарегистрируйте новый аккаунт, но объём рекламы не изменится. Она просто странной станет. Хотя она и сейчас странная.


Немного рекламы :)


Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас, оформив заказ или порекомендовав знакомым, облачные VPS для разработчиков от $4.99, уникальный аналог entry-level серверов, который был придуман нами для Вас:Вся правда о VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps от $19 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

Dell R730xd в 2 раза дешевле в дата-центре Equinix Tier IV в Амстердаме? Только у нас 2 х Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ от $199 в Нидерландах! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — от $99! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?

Let's block ads! (Why?)