Рубрика развивается при поддержке

Разработчик-диабетик собрал искусственную поджелудочную железу, работающую на JavaScript​ Материал редакции

Лиаму Зебеди понадобились инсулиновая помпа, пара контроллеров и несколько программ с открытым исходным кодом.

В закладки

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

  • Диабетики принимают инсулин для усвоения углеводов, по наитию определяя дозировки. В разной пище — разное количество углеводов со своим гликемическим индексом (скоростью усвоения). Законы разрешают производителям закладывать в информацию о пищевой ценности отклонения до 10% от того или иного значения.
  • Плохой сон нарушает метаболизм, при пробуждении инсулина требуется больше — как и при стрессе или болезни.
  • Организм менее восприимчив к инсулину, когда уровень сахара в крови больше положенного.

Диабетики, контролируя приём инсулина, занимаются математической оптимизацией, считает Зебеди. Его искусственная поджелудочная железа занимается тем же самым, только процесс на 80% автоматизирован.

Оборудование

  • Глюкометр FreeStyle Libre CGM.
  • Трансмиттер Miaomiao — передаёт данные с Libre (работает на NFC) на телефон по Bluetooth.
  • Nightscout — программа с открытым исходным кодом для хранения и визуализации данных для диабетиков первого типа (инсулин практически не вырабатывается организмом). Хостинг — Heroku.
  • Приложение xDrip, которое принимает данные по Bluetooth и отправляет их в Nightscout.
  • Инсулиновая помпа Medtronic — для инъекций инсулина.
  • Intel Edison + Explorer HAT — плата с поддержкой Wi-Fi и радиокоманд частотой 900 МГц.
  • Аккумулятор на 4400 мА.
  • OpenAPS — «операционная система» искусственной поджелудочной. Выгружает данные из Nightscout, прогнозирует и подстраивает доставку инсулина помпой, подгружает данные в Nightscout для непрерывного отслеживания. Исходный код открыт.

Цены

  • Помпа у разработчика уже была, стоит она, как правило, около €3100.
  • FreeStyle Libre CGM — €70 за считыватель (разовая трата) и €140 в месяц на сенсоры.
  • Трансмиттер Miaomiao — €200.
  • Хостинг Heroku для Nightscout — бесплатно.
  • xDrip — Зебеди пришлось купить годовую лицензию разработчика за €93, чтобы установить программу на телефон: Apple запрещает его загрузку в App Store.
  • Intel Edison обошёлся в €57. Мини-компьютер не продаётся уже два года, поэтому пришлось как следует поискать на Amazon и eBay.
  • Explorer HAT — плату изготовила компания Enhanced Radio в США за €68.
  • Аккумулятор Adafruit за €50 ёмкостью в два раза больше нужной — просто на всякий случай.
  • OpenAPS — бесплатно, открытый исходный код.

Итого, исключая помпу: €608.

Ежемесячные траты, исключая инсулин: €140.

Сборка

На сборку Зебеди потратил около девяти часов:

  • Час на чтение документации по OpenAPS, она очень большая.
  • Два часа на загрузку Jubilinux и настройку Edison.
  • Два с половиной часа на загрузку пакетов и библиотек с помощью APT и NPM. Поскольку OpenAPS — обычный набор простейших Bash-скриптов, всё пришлось загружать заново.
  • Час на покупку лицензии разработчика Apple и установку xDrip.
  • Час на настройку хостинга для Nightscout, с аутентификацией и особыми плагинами для OpenAPS.
  • Два часа на устранение багов. Система почему-то не считывала показатели из Nightscout. Не сумев устранить неполадки, Зебеди обратился за помощью в Gitter. Оказалось, проблема была в приложении Tomato, которым он пользовался для отслеживания уровня сахара в крови. Поэтому разработчик переключился на xDrip.
​Все нужные детали
​Трансмиттер Miaomiao
​Инсулиновые помпы (Зебеди использовал нижнюю)
​Модуль Intel Edison
​Подключение к модулю Edison через USB Serial. Зебеди использовал путь /dev/tty.usbserial-xyz 115200
​Установка Jubilinux
​Настройка протоколов SSH
​Лог OpenAPS

OpenAPS предельно проста благодаря большому собранию Bash, Python и JavaScript. В этот момент Зебеди столкнулся со стектрейсом ниже (список строк кода, которые были вызваны до возникновения в приложении сбоя).

myopenaps/monitor/glucose.json: Unexpected end of JSON input

Разработчик установил xDrip на замену Tomato. Первая — с открытым исходным кодом, что, замечает Зебеди, видно по простому дизайну.

​Интерфейс xDrip

Зебеди написал в Gitter, и через час ему помогли решить проблему: не хватало параметра dateString.

​Сообщение Зебеди

После код заработал.

Использование

Ниже — интерфейс Nightgraph. Зебеди пометил цифрами четыре основных элемента:

  1. Статус системы.
  2. Динамика уровня сахара в крови.
  3. Прогноз OpenAPS.
  4. Введение инсулина помпой.

OpenAPS каждые пять минут корректирует базальные профили, или дозировки подачи инсулина («Как OpenAPS принимает решения»). Основные параметры, которые вычисляет система:

  • Разница между текущим уровнем сахара в крови и средним за последние пять минут.
  • Среднее изменение уровня сахара за 15 и 45 минут.
  • Количество инсулина в организме: это важно, поскольку он расходуется неинтуитивно, оставаясь в теле какое-то время, а не исчезая вместе с переработанной глюкозой.
  • Чувствительность к инсулину.
Средний уровень сахара в крови — производная от предыдущих средних показателей, а количество инсулина в организме представляет собой экспоненциальную кривую Документация OpenAPS

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

OpenAPS, отмечает разработчик, — не панацея. Ему по-прежнему нужно принимать инсулин перед едой, да и с алкоголем система тоже не поможет. Тем не менее с OpenAPS ему гораздо удобнее и спокойнее.

​Собранное устройство
​Слева — трансмиттер Miaomiao, справа — датчик глюкометра
​Инсулиновая помпа
{ "author_name": "Кирилл Казаков", "author_type": "editor", "tags": ["\u0437\u0434\u043e\u0440\u043e\u0432\u044c\u0435","javascript"], "comments": 44, "likes": 26, "favorites": 16, "is_advertisement": false, "subsite_label": "dev", "id": 84930, "is_wide": true, "is_ugc": false, "date": "Mon, 30 Sep 2019 13:36:03 +0300", "is_special": false }
Облачная платформа
Основа для цифровизации бизнеса
0
{ "id": 84930, "author_id": 127882, "diff_limit": 1000, "urls": {"diff":"\/comments\/84930\/get","add":"\/comments\/84930\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/84930"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 235819, "last_count_and_date": null }
44 комментария
Популярные
По порядку
Написать комментарий...
26

На языке в котором '5' - '2' = 3, а '5' + '2' = '52' я бы как-то забоялся поджелудочную гонять 😂

Ответить
4

Вы, возможно, не поверите, но подобное поведение довольно логично и предсказуемо, если представлять себе как устроен javascript. Если вам подобная логика не нравится - вы можете писать строго типизированный код на typescript, например, где операция '5' - '2' приведет к ошибке еще на стадии компиляции.

Ответить
0

Или C, но это не сделает из JavaScript нормальный язык. 

Ответить
0

а что значит нормальный или не нормальный? ts программистам платят больше, чем c# или java - вполне нормально

Ответить
0

И при чем тут typescript? Это всего лишь dsl, который пытается исправить косяки js. Насчёт зарплат не согласен. Можете привести источник?

Ответить
0

https://habr.com/ru/company/moikrug/blog/443810/

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

понятно что это не язык в целом, но важно его уметь правильно применять и работать с ним, что равносильно изучению нового языка. Плюс в вакансиях указывается typescript разработчик, а не js.

Ответить
0

Что? Там по ссылке медианная зарплата Java и c# выше JavaScript. Какие средние зарплаты синьоров? Там даже верхние границы не соответствуют вашему заявлению. 

Ответить
0

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

Ответить
0

Те вы говорите о том, что зарплаты выше потому, что в статье на хабре одна мертвая площадка заявляет о том, что зарплаты ниже, но нужно не делать из этих данных выводы, а поискать зарплаты сеньоров, где был указан typescript? Прям вспоминаются те самые железные 146% уверенности в своих данных. 

Ответить
0

а откуда данные что площадка мертвая? Из тех же 146%?

Ответить
1

"Сейчас на сайте 979 вакансий и 130760 резюме, в среднем 10 откликов на вакансию"

Прям внизу написано.

Ответить
0

ваша 5-ая точка сейчас, возможно, рванёт на Марс, но JavaScript более ООП язык нежели эти самые Java, C# и их батя С++. Алан Кей и Smalltalk в помощь. поэтому нормальность крайне субъективна, особенно, если просто не разбираешься в предметной области

Ответить
0

ваша 5-ая точка сейчас, возможно, рванёт на Марс, но JavaScript более ООП язык нежели эти самые Java, C# и их батя С++.

Не знал, что степень нормальности определяется оопностью языка. А как быть процедурным языкам? Чем Си хуже JavaScript?

Алан Кей и Smalltalk в помощь.

Вообщем-то Smalltalk class-based, а JavaScript prototype-based, но заход неплохой.

поэтому нормальность крайне субъективна, особенно, если просто не разбираешься в предметной области

Это единственное что вы правильно подметили :)

Ответить
0

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

Не знал, что степень нормальности определяется оопностью языка. А как быть процедурным языкам? Чем Си хуже JavaScript?

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

Вообщем-то Smalltalk class-based, а JavaScript prototype-based, но заход неплохой.

на работу вы ходите в одной одежде, дома в другой, но всё равно это является одеждой, class-based и prototype-based - частным случаи ОО парадигмы. 

Это единственное что вы правильно подметили :)

я надеюсь, вы меня поняли и заметили, что не единственное :)

когда-то, лет эдак 5 назад, когда я ещё писал на C#, а потом на Java, мне было интересно, чего все так *банулись с этим ООП и решил хорошенько разобраться с этим веером парадигм и методологий, а  сопоставив для себя более лёгкие ассоциации в голове, до сих пор, если кто на собеседованиях втирает мне про крутость ООП в каких-то только определённых языках, то стараюсь включить мозг товарищу напротив подводя его под логические умозаключения. просто, это как-то глупо выглядит, как будто сравнивать 42-ой и 43-ий размеры обуви.

p.s.: 42-ой офигенный размер, всем советую :) 

Ответить
0

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

Да всем пофиг на ООП. И типизация никак не связана с реализацией. Почитайте про статический полиморфизм в C++.

на работу вы ходите в одной одежде, дома в другой, но всё равно это является одеждой, class-based и prototype-based - частным случаи ОО парадигмы.

Если приводить аналогии с одеждой, то как раз class-based могут быть домашней и рабочей одеждой, а в prototype-based одежда может быть только наследницей предка. Вот и получается домашняя пижама с карманами для молотка. Так в принципе и выглядят все проекты на JavaScript. Частный - не частный, из говна(ООП) может только получиться еще большее говно(прототипный ООП).

когда-то, лет эдак 5 назад, когда я ещё писал на C#, а потом на Java, мне было интересно, чего все так *банулись с этим ООП и решил хорошенько разобраться с этим веером парадигм и методологий

Видимо не разобрались. ООП используют только потому, что для большинства задач ничего другого не придумали.

если кто на собеседованиях втирает мне про крутость ООП в каких-то только определённых языках, то стараюсь включить мозг товарищу напротив подводя его под логические умозаключения. просто, это как-то глупо выглядит, как будто сравнивать 42-ой и 43-ий размеры обуви.

У меня для вас плохие новости. В нормальных компаниях уже давно не спрашивают про языки. Язык это инструмент, который можно освоить за день(Python, Golang, JavaScript) или за несколько месяцев(C++). Опять же, т.к. пока не придумали ничего лучше, то решили спрашивать на собеседованиях алгоритмические задачи. И часто эти алгоритмические задачи разрешают писать вообще псевдокодом.

Ответить
0

ОО парадигма подразумевает, что всё есть объект, даже if и else конструкции.

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

почитайте хотя бы википедию что-ли, уж честное слово стыдно за ваши знания. а лучше почитайте Алана Кэйя, это тот чувак который ООП и придумал.

Ответить
0

ООП этого не подразумевает. То о чем вы говорите относится уже к дизайну самого языка, который может использовать функции/переменные как first class citizen. C не ООП, но позволяет использовать указатель и как функцию. Становится он от этого ООП?

Ответить
0

я не пытаюсь вас переубедить, и так уже наша беседа зашла слишком далеко так как мы всё же общаемся на разных "волнах", просто попробуйте взглянуть с другой стороны хотя бы на определение - https://en.wikipedia.org/wiki/Object-oriented_programming, - возможно, вы меня поймёте :) пусть каждый и останется со своим мнением  

Ответить
0

Да, я совершенно не понимаю как ООП может сделать из языка, который складывает строковые литералы с цифрами нормальный язык. 

Ответить
0

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

в JavaScript есть несколько так называемых "примитивных" типов, к ним как раз и относятся строки и числа, примитивные они по тому, что могут хранить только одно значение (если это строка, то только строка, если число, то только число), но они тоже являются объектами только иммутабельными. у строк и даже чисел можно вызывать методы без дополнительных обёрток как в некоторых других языках. это всё делает под "капотом" интерпретатор.

так вот, когда мы складываем строку и число, это, внезапно, не что иное как перегрузка операторов (полиморфизм, все дела). только вот JavaScript интерпретатор поверил в свои силы и предоставляет неявные правила приведения типов. 

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

Ответить
–1

Это как раз логичное поведение и не представляет особой угрозы.

Где действительно надо быть осторожным в ПО для подобного прибора, это в моментах типа 0.1 + 0.2 !== 0.3

Ответить
1

В медицинском ПО не используют floatы, ровно по той же причине, что и в банках.

Ответить
0

в банках float не используют?

Ответить
0

Для работы с точными данными никогда не используют float, тк результат арифметических операций не предсказуем. 

Ответить
0

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

Ответить
–1

На самом деле решение вполне логичное. Как mvp вполне подойдёт, а получив финансирование можно и научиться платы разводить и писать под микроконтроллеры. Я когда проектировал свой процессор тоже сначала писал на C++ эмулятор(тк это основной язык), а потом уже купил fpga и переписал все на verilog. 

Ответить
7

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

Ответить
2

Абсолютно те же эмоции. Пойду ща сыну бахну инсулинчика. 

Ответить
0

Как биомед инженер, который погружался в эту проблему скажу что то что он делает это ад. В принципе FDA по этой причине и выпустила свое предупреждение https://www.fda.gov/news-events/press-announcements/fda-warns-against-use-unauthorized-devices-diabetes-management

Ответить
6

Интересно, а не яваскрипт ли довел человека до диабета?

Ответить
2

Ваш уровень сахара в крови: NaN ммоль/л

Ответить
1

Велосипед, такие системы есть.

Вот если бы он сделал копию сенсора из подручных средств - весь мир был бы благодарен.

Хотя, пристрелили его тогда бы.

Ответить
0

А кстати в чем проблема этих сенсоров? Почему они так адово стоят и их нужно постоянно менять?

Ответить
0

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

Ответить
0

Скальпель это тоже медицинский прибор, и он стоит не 120$
Эндоскоп/рентгеновский аппарат тоже медицинский прибор, но их не нужно менять каждый месяц

Если не знаете, просто не пишите

Ответить
1

Я знаю. Я знаю и общался с разработчиком libre freestyle sensor который используется этим умельцем. Менять сенсор нужно по 3 причинам: адгезивная поверхность теряет свои свойства, филамент который идёт в верхний слой кожи засоряется и перестает поставлять пот, иммобилизованная глюкозоксидаза теряет свои свойства.

Теперь перейдем к скальпелям: скальпели есть разные и ультразвуковые скальпели стоят нормально. Эндоскоп и рентген имеют тоже свои расходники которые нужно менять. Сенсор на либре это такой же расходник.

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

Ответить
0

Менять сенсор нужно по 3 причинам:

1) адгезивная поверхность теряет свои свойства,
2) филамент который идёт в верхний слой кожи засоряется и перестает поставлять пот,
3) иммобилизованная глюкозоксидаза теряет свои свойства.

оке, вот это более нормальный ответ, спасибо. Можно дальше говорить:
1) Вы хотите сказать, что сенсор отклеивается от кожи? Ну так и говорите. Думаю, приклеить его труда не составляет
2) Филамент это что? Я только про 3д печать знаю, это не то.
И почему бы не заменить именно его?
3) оке. Так почему бы ее и не заменить? Зачем менять весь сенсор?

Вы же знаете сколько стоил пенициллин как только появился и сколько стоит сейчас?

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

Ответить
0

1. Две недели достаточный срок для адгезивной поверхности по причине износа в первую очередь других компонентов системы
2-3. Филамент там - это микрокапилярная система собирающая внеклеточную жидкость. Ни филамент, ни GOx нет возможности заменить по следующим причинам:
- сборка разработана так чтобы эффективно выполнять свою функцию и если ее сделать разделяющуюся/заменяемую, то результат будет плюс-минус километр;
- если делать заменяемые модули, то размеры и цена устройства существенно вырастет (надо будет решать сопутствующие проблемы). Получится как техника из СССР - вроде как вся ремонтируется но качество оставляет желать лучшего;
- все сенсоры калибруются на заводе после производства, вы предлагаете ещё чтобы пользователи сами калибровали сенсор после замены частей? Ещё один девайс разработать? 
- регистрация в FDA займет ещё больше времени с большой вероятностью недопуска на рынок, что приведет к росту цены изделия т.к. риски

И про зарвавшиеся корпорации: патентное право для того и создано, чтобы через время на рынке появлялись дешёвые аналоги. А если государство будет заставлять корпорации продавать все дёшево то получим СССР опять по уровню мед.приборов. Никто не будет вкладываться в затратные разработки по причине того что это станет не выгодно. Советую просто зайти на сайт FDA и посмотреть хоть один road map по сертификации изделий. 

Ответить
0

Про сборку/разборку дальше дискутировать не могу  - не обладаю знаниями. Но предположу, что круто было бы _попробовать_ сделать модульный модуль, где изнашивающаяся часть (клейкая лента и филамент) была бы съемная и идентичная - калибровка тогда будет не нужна

Интересно есть какой-нибудь самопальный аналог?

то получим СССР опять по уровню мед.приборов.

думаю, для начало надо иметь такой уровень медприборов бесплатно и для всех. А потом уже думать о чем-то лучшем.

Ответить
0

"можно сделать модульный прибор чтобы менять только изнашивающуюся часть" - вы как раз предложили то что и реализовано у libre freestyle - замена сенсора.

Что значит иметь уровень приборов бесплатно? Всегда кто-то платит. Если делать "бесплатно и для всех" то и получается как раз качество и функциональность СССР - говно. А скорее всего ничего даже и не получается так как умные люди не хотят работать бесплатно

Ответить
0

Неинвазивный сенсор постоянного мониторинга? Вы про такие?

Ответить
1

I never asked for this // this undefined

ну вы понели))00

Ответить
0

аугументация hand-made, великолепно

Ответить
0

Надеюсь никакому хакеру не захочется взломать эту систему

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cgxmr", "p2": "gnwc" } } } ] { "page_type": "default" }