Роботизированный хвост человека или немного пятничного киберпанка.

Заметка


Girl with robo tailНемного несерьезные размышления на тему "Зачем человеку мог бы пригодиться роботизированный хвост?"

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

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

Читать далее

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

Заметка

Без ранжирования по важности:

1. автоматическая утяжка для минимизации объема и перемещения веса к спине (вплоть до практической незаметности в пустом состоянии)
2. запас энергии (пауэрбанк)
3. запас воды (кэмелбек с системой гидратации)
4. удобный перевод на грудь
5. система заднего вида (зеркала?)
6.  система быстрого сброса
7. электроника:
- геопозиционирование,
- шагомер,
- датчики температуры,  CO2, влажности, давления,
- аларм-сирена,
- взаимодействие со смартфоном/гарнитурой,
- возможно - центральный сервер для носимой электроники
8.принудительная вентиляция спины
9. защита органов и позвоночника
10. модульность (сопряжение с доп.подсумками в т.ч. - ALICE, MOLLE(???))
11. перераспределение веса (вверх-вниз, смена опоры с плеч на поясницу)
12. ограничение несанкционированного доступа (замок?)
13. городской (до 30 литров)
14. утилитарный (немаркость, прочность, универсальность, стандарты А4, ноутбук, защита содержимого,)
15. корректор осанки
16. индикация и подсветка, также - светоотражающие элементы, которые могут быть спрятаны)
17. вес ??

Возможные способы реализации:

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

Проблемы:
1. Вес
2. Батареи (запрет к перевозу в багаже, влияние на вес)
3. "съедание" полезного объема исполнительными механизмами
4. эргономика будет отличаться от привычной, требуется слом парадигмы пользования

 

Мимоходом:

Яндекс, в части новостей, к сожалению, сильно пожелтели. Это касается как  сервиса Яндекс.Новости, так дзена. Сколько дзен не воспитывал, указывая, что мне это все не нравится - все равно выдает желтизну.

Жалко.

Тактильный интерфейс получения текстовой информации.

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

Простейший вариант - клавиатура qwerty "наоборот", формирующая ощущения соответственно расположению кнопок.  Или последовательно формирование   символов из системы Брайля на коже, или любой другой вариант кодирования.

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

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

 

Создание telegram-бота (python 3)

Часть первая - модуль получения обновлений.

Первый шаг -  зарегистрировать бота в Telegram, пользуясь специальным  ботом Botfather. Процедура несложная с интуитивным интерфейсом и подробно останавливаться на ней мы не будем. Главное - получить  от данного действия  токен - идентификатор, при помощи которого  новый бот будет взаимодействовать с API Телеграма.

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

TOKEN = 'ваш_токен'
offset = 0 # начальный "отступ"
INTERVAL = 1 # Интервал проверки наличия новых сообщений (обновлений) на сервере в секундах
URL = 'https://api.telegram.org/bot' # Адрес HTTP Bot API

Далее - пишем функцию получения обновлений с сервера Telegram:

def  get_updates(TOKEN, URL, offset):
    
 
    # Формируем параметры запроса
    data = {'offset': offset+1, 'limit': 5, 'timeout': 0}
 
    # Отправка запроса обновлений
    try:
        request = requests.post(URL + TOKEN + '/getUpdates', data=data)
    except:
        print('Error getting updates') # сообщение об ошибке получения обновлений
        return False # Завершаем проверку
 
    if not request.status_code == 200: return False # Проверка ответа сервера
    if not request.json()['ok']: return False # Проверка успешности обращения к API
 
    # Проверка каждого элемента списка
    for update in request.json()['result']:
 
        offset = update['update_id'] # Извлечение ID сообщения
 
        #Проверка на наличие сообщения
        if not 'message' in update:
            continue #переход к следующему обновлению
 
        print ('\n\n',   datetime.datetime.now().strftime('%H:%M:%S'),'Сообщение получено:')
        print(update)
        return(update, offset)

Как видно из кода,  функция  возвращает None, если обновлений на сервере нет, и сериализированный объект, если обновление есть.  Пример  такого обновления:

{'update_id': 400390656,
'message': {'text': 'сообщение текстовое',
            'from': {'username': 'evillexus',
                     'id': 9111111111,
                     'last_name': 'А',
                     'first_name': 'Алексей'},
            'chat': {'id': -100110111111, 'title': 'test', 'type': 'supergroup'},
            'message_id': 266,
            'date': 1488625362}}

Доступ к каждой части  обновления осуществляется весьма просто:

# текст сообщения:
message_text = update['message']['text']# id отправителя:
# id отправителя: 
from_id = update['message']['from]['id']
# id чата в котором получено сообщение:
chat_id = update['message']['chat']['id']
# имя отправителя:
first_name = update['message']['from']['first_name']

и т.д.

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

if __name__ == '__main__':
    message = get_updates(TOKEN, URL, offset) # попытка получить обновление
        if message:
            print('Получено сообщение:\n')
            message_text = update['message']['text']
            print(message_text)

 

Чтоб не забыть – когнитивный ассистент

Когнитивный ассистент - система, анализирующая текущий интерес пользователя и  предлагающая ему  в онлайн-режиме  релевантные материалы.

Как вариант - в предварительно обработанной форме,  ориентированной на удобное восприятие и использование.

Акцент - на  ранее неизвестную информацию (требуется   понимание системой уровня знаний пользователя)

Верхнеуровневая схема разбора сообщения бота:

Схема разбора сообщения:

  1. Получение сообщения с сервера
  2. Первичная обработка:
  • определение текста сообщения
  • обработка текста сообщения:
  • очистка от лишних пробелов и знаков препинания
  • поиск обращения
  • поиск прямых команд
  • определение списка слов
  • определение списка слов со знаками препинания
  • поиск цифр, определение меры (рубли, кг, дни)
  • поиск дат и временных периодов
  • поиск имен
  • поиск институтов и организаций
  • поиск других сущностей
  • поиск приаттаченных документов
  • поиск приаттаченных картинок
  • поиск приаттаченного местоположения
  • определение пересылаемого сообщения
  • определение исходного сообщения
  • сохранение сообщения
  1. Действие в соответствие с командой
  2. Поиск дополнительных директив:
    • Расчет TF_IDF для каждого слова
    • Построение схемы слова (сущ_глагол_прилаг)
    • Поиск соответствия в сохраненных схемах
    • Определение действия
    • Определение параметров действия
    • Ответ
  1. Сохранение ответа

 

Пример функции сортировки “пузырьком” (Python)

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

[pastacode lang="markup" manual="def%20bubble_sort(lst)%3A%0A%20%20%20%20for%20i%20in%20range(0%2C%20len(lst)-1)%3A%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(0%2C%20len(lst)-1)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20lst%5Bi%5D%20%3C%20lst%5Bi%2B1%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pass%0A%20%20%20%20%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lst%5Bi%5D%2C%20lst%5Bi%2B1%5D%20%3D%20%20lst%5Bi%2B1%5D%2Clst%5Bi%5D%0A%20%20%20%20return%20lst%0A%0Alst%20%3D%20%5B2%2C8%2C4%2C6%2C-88%2C9%2C0%2C1%2C5%2C8%2C0%2C9%2C8%2C-190%5D%0Abubble_sort(lst)%0A%0A%3E%3E%3E%20%5B-190%2C%20-88%2C%200%2C%200%2C%201%2C%202%2C%204%2C%205%2C%206%2C%208%2C%208%2C%208%2C%209%2C%209%5D" message="Сортировка пузырьком" highlight="" provider="manual"/]