Обновить
29
0
Игорь Хмельков@khmelkoff

Data Scientist

Отправить сообщение
Комментарий удален
Когда браслет обменивается информацией с телефоном, к нему нельзя подключиться. Так что только по очереди.
вот и вот Но про акселерометр там ничего толкового нет, что-то вроде:
0xFF0E read notify SENSOR_DATA, и всё.
LED в новой версии уже не цветные, а белые, во всяком случае нет ни одного штатного режима, который показал бы обратное. Подозреваю, что теперь предусмотрен только один режим — индикация значения по схеме: первый мигает — остальные выключены, первый включен — второй мигает, два включены — третий мигает, три включены. Индикация работает при спаривании со смартфоном, заряде батареи и контроле прогресса (взмахом руки).

Что касается акселерометра, данные можно было получить в старой версии в режиме нотификации. Сейчас не понятно по какому адресу искать. Анализ трафика показывает, что смартфон разрешает браслету четыре нотификации, одна из которых это сердечный ритм. Можно посмотреть на три оставшиеся. Если получится, проверю и сделаю update.
Анонимное устройство не может получить пульс, но может его подслушать. Также нельзя скачать с браслета данные пользователя (но тоже можно подслушать), остальное раздается всем кто попросит. Используется минимальный уровень безопасности, хотя, например, уже на следующем уровне — middle, данные начинают шифроваться.
Вроде можно мерить непрерывно, используя приложение в смартфоне (не пробовал). Но нужно понимать, что измерение пульса при помощи оптического датчика отличается от режима измерения нагрудным датчиком, если он электрокардиографический. Цикл измерения браслетом это примерно 15 секунд, потом данные усредняются и отправляются в виде нотификации. Есть не мало моделей браслетов, которые начинают измерять пульс непрерывно, после нажатия кнопки на браслете.
Поясните пожалуйста, что вас интересует. Использование user info из телефона? Вот:
Один из исследователей предыдущей версии браслета в своем блоге написал, что не все сервисы могут быть доступны анонимному устройству. Насколько я смог разобраться, в ряде случаев устройство, взаимодействующее с браслетом, должно передать в браслет корректную информацию о пользователе, которая частично хешируется при спаривании со смартфоном.


Еще вот:
Соединение в интерактивном режиме без спаривания обычно длится секунд 20. Это так называемый низкий уровень секретности
Браслет с малиной работает без спаривания, это security=low в gatttool по умолчанию.

Практически вся информация с браслета доступна любому анонимному устройству, кроме измерения пульса, для этого нужно представиться телефоном и отправить на браслет данные пользователя.
Да, работа с малиной не портит профиль браслета в телефоне, так как используется user info телефона. Собственно, браслет «думает», что малина — это телефон. Ретранслятор? Я не подобрал правильного термина — задача малины принять данные от браслета и передать в облако.
Разобрать MIBand не думал, на форумах пишут, что производитель её всё больше обфусцирует с каждой новой версией. Смысл, если все потом передается в открытом виде? Да, есть еще очень много интересного, чего не попробовал, PyGATT, например, или вот ребята пишут мибанду (https://bitbucket.org/OscarAcena/mibanda) — библиотеку для доступа к браслету из Python. NodeJS — очень интересно, обязательно посмотрю, спасибо.
Спасибо, не знал что такой путь есть. С WireShark-ом у меня не очень, пробовал мой лог из Packet Sniffer конвертировать в pcap и смотреть в WireShark-е. Показалось очень сложно. У Packet Sniffer очень простой интерфейс. И неудобный, фильтры работаю почему-то не всегда, приходится просматривать от начала до конца. Но всё очень наглядно.
Да, спасибо. Уже написал update.
Спасибо, Вы правы. Нашел, написал update.
Да, счастья бы не помешало.

Вот так модель считывает слова из файла:
void ReadWord(char *word, FILE *fin) {
  int a = 0, ch;
  while (!feof(fin)) {
    ch = fgetc(fin);
    if (ch == 13) continue;
    if ((ch == ' ') || (ch == '\t') || (ch == '\n')) {
      if (a > 0) {
        if (ch == '\n') ungetc(ch, fin);
        break;
      }
      if (ch == '\n') {
        strcpy(word, (char *)"</s>");
        return;
      } else continue;
    }
    word[a] = ch;
    a++;
    if (a >= MAX_STRING - 1) a--;   // Truncate too long words
  }
  word[a] = 0;
}

Из кода видно, что EOL может и не быть в файле, а значит моя фраза абсолютно корректна.
Теперь, что будет, если EOL в файле есть.
Он заменяется на специальное слово:
</s>
Это слово не участвует в расчете частоты, поэтому не выбрасывается из словаря и всегда находится в его начале. Если EOL в тексте несколько, меняется распределение слов, находящихся рядом с EOL. Вот расчет дистанции, если EOL только один:
Word: </s>  Position in vocabulary: 0
          Word   CosDist
1       factor 0.3524520
2  frightening 0.3380254
3        admit 0.3336470
4        scary 0.3289483
5     scariest 0.3148671
6         prom 0.3142520
7         time 0.3083785
8   paranormal 0.3076151
9       cheesy 0.3073355
10   impressed 0.3042146

А вот, если три (текст тот же самый, просто я добавил три EOL):
Word: </s>  Position in vocabulary: 0
1       yelling 0.3524468
2       toddler 0.3464943
3       janitor 0.3398002
4       running 0.3376773
5         drunk 0.3368221
6         bunch 0.3361016
7            iq 0.3348956
8  pathetically 0.3328072
9  unbelievably 0.3261482
10     retarded 0.3218134

А теперь попробуйте из этого что-то понять про абзацы внутри текста.
Удачи!
Извините, не нарочно ответил ниже.

Я попробовал сейчас на скорую руку просто ввести два абзаца в строку обучающей выборки, ничего заметно не изменилось. Пространство слов из word2vec — это матрица, первый столбец — слова из словаря, начиная со второго по последний — значения компонент вектора. Есть вероятность, что эти значения меняются для слов, которые находятся между переводом строки, но это сложно увидеть. Если получу подтверждение, напишу update.
С сайта gensim: The training algorithms were originally ported from the C package code.google.com/p/word2vec and extended with additional functionality.

Единственное, чего не понял, почему они не используют оригинальную кластеризацию из word2vec и предлагают взять K-Means из scikit-learn вот в этом примере.
Да, спасибо. Пробовал и так, не нашел на что это влияет. В примере от разработчиков одна большая строка на 80 мегабайт: mattmahoney.net/dc/text8.zip
Сделал PCA, см. update в статье. 102 компоненты при пороге в 0.95. Форест на 5% ниже, SVM на один с небольшим.
Я считаю, что ребята старались не зря выдумывая переменные. И, скажем, мне не понятно, как связаны между собой мат.ожидание уровня сигнала и угол между векторами. Я попробую на этой неделе сделать PCA, о результатах напишу.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность