Ф-я получения данных о состоянии системы

import psutil
import datetime
import platform


def get_system_info():

    result = {}

    # ОС
    os_platform = platform.system()
    # Процессор
    processor = platform.processor()
    result.update({'platform': os_platform, 'processor': processor})
    # диски
    disks = psutil.disk_partitions()
    for i in disks:
        try:
            disk_usage = psutil.disk_usage(i.device)
            total = int(disk_usage .total) / 1048576
            used = int(disk_usage .used) / 1048576
            free = int(disk_usage .free) / 1048576
            percent = float(disk_usage .percent)
            disk_dict = {'total_space': total, 'used_space': used, 'free_space': free, 'free_percent': percent}
            result.update({'disk_space': disk_dict})

        except:
            pass

    # загрузка процессора
    cpu_percent = psutil.cpu_percent()
    result.update({'cpu_percent': cpu_percent})

    # аптайм
    boot_time = psutil.boot_time()
    uptime = datetime.datetime.now().timestamp() - boot_time
    result.update({'uptime': uptime})

    # оперативка:
    mem_status = psutil.virtual_memory()
    m_total = int(mem_status.total) / 1048576
    m_available = int(mem_status.available) / 1048576
    m_used = int(mem_status.used) / 1048576
    m_free = int(mem_status.free) / 1048576
    m_percent = float(mem_status.percent)
    memory_dict = {'total_mem': m_total, 'available_mem': m_available, 'used_mem': m_used,
                   'free_mem': m_free, 'free_percent_mem': m_percent}
    result.update({'memory_space': memory_dict})

    # температура процессора:
    try:
        # ToDo скорее всего надо прописать итератор для перечня  датчиков
        proc_temp = float(psutil.sensors_temperatures().current)
    except:
        proc_temp = None

    result.update({'proc_temp': proc_temp})

    return result


if __name__ == "__main__":
    res = get_system_info()
    for i in res.keys():
        print(i, res[i])

Источники:

Читать далее «Ф-я получения данных о состоянии системы»

Re: Self.Tracker

В догонку к своему посту про самошпиона:

Есть такая система опенсорсная HomeAssistant, которая позволяет соединять воедино разные части умного дома. Система весьма гибкая и интересная и я ее даже одно время плотно использовал, хотя и ниасилил в полном объеме.

Так вот, HomeAssistant имеет мобильное приложение (по крайней мере для Андроида), которое может быть установлено на телефон хозяина (равно как и на телефоны домочадцев) и довольно бодро логирует как факт перемещения (в координатах и ключевых точках, причем определяет тип перемещения — пешком или на машине), факт использования интернета, звонков и пр. и др. Все нашпионенное система складывает в локальную sqlite базу данных на локальном компе. Не густо, но хоть что-то. При этом система открыта к доработкам и в целом можно пробовать накручивать что-то свое.

Из минусов — необходимость иметь статичный IP дома, привязывать его к внешнему домену и, самое главное — открывать порты. Внутренний параноик хмурится. Плюс — yaml для меня как то до конца непонятен.

Мой опыт использования HomeAssistant закончился на том, что система в какой то момент упала, а восстанавливать ее было лениво, особенно с учетом того, что все текущие домашние автоматизации худо-бедно ворочаются силами Яндекс.Устройств и Mi Home (пусть боги покарают ленивых ее создателей и всех кто продает в РФ поделки, привязывающиеся только к китайским серверам).

Но надо будет вернуться.

Self.Tracker

В то время, как все кто ни попадя, шпионит за нами через смартфоны, сами мы часто довольствуемся только тем, что подкидывает нам Яндекс или Гугл (смотрите, что вы наснимали 10 лет назад, а вот где вы были, а вот какую музыку слушали). Обидно как то, что кто-то помнит обо мне больше чем я сам.

Почему бы не завести приложение, которое бы в явном виде не тречило все действия хозяина и не сохраняла бы их в понятном и стандартизированном виде в БД? Перемещения там, время онлайн, посещенные сайты, посещенные места, время разговоров, ходьба, письма, частота общения с контактами — это только помет чайки на верхушке айсберга.

И все это — не на сервера корпораций зла и добра, а на жесткий диск родного компа, в зашифрованную БД с паролем о 37 символах.

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

Да, небезопасно, но мир меняется. «… Я чувствую это в земле, я чувствую это в воде… вот и в воздухе уже чем то запахло…» (с)

З.Ы. А как пользователь помрет, так и его цифровую копию легче будет создавать ))

Соревнования танков с ИИ

Давно зреет идея собрать танк в масштабе 1/16, вооруженный хард-пневматикой и оснащенный блоком самоуправления. То есть не пошлый RC, а вполне самостоятельный танк, сам идентифицирующий цели и нацеленный на уничтожение такого же танка-противника. Камеры, датчики, распознавание образов, прицеливание и вот это вот все.

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

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

Цена входа — наверное около 100 т.р. плюс команда из человека с руками и 3d-принтером + средней руки программист.

Но пока жаба душит. И нет под рукой 3d-принтера и человека с руками из плеч. Сам могу претендовать только на роль идеолога-программиста.

Ну и с этичностью подобных разработок есть вопросы, хотя это конечно, детский лепет…

Коннектом. Или нью-эйджа псто.

Если ты плюнешь в коллектив — коллектив утрется.
Если коллектив плюнет в тебя — ты утонешь
.

У человека вроде как порядка 100 млрд. нейронов. Из них в коре головного мозга — около 16 миллиардов. Согласно общепринятой на данный момент концепции, во взаимодействии нейронов и кроется основа, на которой появилось человеческое сознание — способность переживать события внешнего/внутреннего мира, а также выдавать ответную реакцию на них. Мечты, желания, переживания/страдания планирование , пофигизм и вот это вот все — наверняка живут где-то там же.

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

Человеков на планете Земля — чуть меньше 10 млрд, то есть на порядок меньше (можно написать «всего на порядок», но не буду), чем нейронов вообще, и почти столько же, сколько в коре головного мозга. Человеки, помимо того что едят, еще и так или иначе общаются друг с другом. Передают информацию разными способами. Устно, письменно, один к одному, один ко многим. Кто-то с удовольствием передает слухи, кто-то выступает цензором. Кто-то приукрашивает, кто-то фильтрует. Если раньше количество социальных связей худо-бедно укладывалось в число Данбара, то с появлением интернетов и всяких соцсетей, счет легко идет на тысячи связей для каждого человека. При этом география и языковой барьер уже не играют значительной роли.

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

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

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

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

В общем, если вам встретится блаженный, заливающий про эгрегоры, трансерфинг реальности и «сообщения в космос» — подумайте, может он и не такой уж и сумасшедший ))

Функция расчета TWR (time weighted return)

def twr_eavaluate(df):
    
    """Ф-я рассчитывает time weighted return  по данным датафрейма ['AUM_DATE', 'POSITION_VALUE','NET_INPUT']

     AUM_DATE - колонка с датами
     POSITION_VALUE - оценочная  стоимость портфеля на дату
     NET_INPUT - вводы-выводы средств на дату (ввод - вывод)"""

    df.sort_values(by='AUM_DATE', inplace=True)

    # порфтель на  день-1
    prev_portf = [0] + df['POSITION_VALUE'].tolist()[:-1]
    df['prev_portf'] = prev_portf

    df['delta_for_twr'] = (df['POSITION_VALUE'] - df['NET_INPUT']) / df['prev_portf']

    # замена пропусков
    df = df.replace([np.inf, -np.inf], np.nan)
    df.dropna(axis=0, subset=['delta_for_twr'], inplace=True)
    twr = df['delta_for_twr'].prod() - 1
    return twr

Простая функция расчета TWR (time-weighted return) для определения эффективности вложений с учетом вводов и выводов средств

Функция поиска ISIN в строке

Википедия:

Международный идентификационный код ценной бумаги (англ. International Securities Identification Number, общепринятое сокращение — ISIN) — 12-разрядный буквенно-цифровой код, однозначно идентифицирующий ценную бумагу.

import re


def look_for_isins(string):

    ''' Возвращает список ISIN из переданной строки'''

    isins = []
    isin_pattern = '[A-Z]{2}\w{9}\d{1}'
    f = re.findall(isin_pattern, string)
    for i in f:
        isins.append(i)
    return isins

Блок питания. Рессюрекшн.

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

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

Парсинг писем из Outlook в Python

Python-cкрипт разбора писем из папки «Входящие» Outlook. Сохранение письма как html-страницы с сохранением отображения вложенных картинок

import win32com.client
import os
import datetime
import re

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6).Items  # 6- папка Входящие Outlook
msg = inbox.GetLast() # последнее письмо в ящике

path  = r'C:\Users\user\Documents' # папка для сохранения вложений письма

while msg :
    subject = str(msg.Subject) # тема письма
    msg_date = datetime.datetime.strptime(str(msg.SentOn)[0:19], '%Y-%m-%d %H:%M:%S')
    to_list = str(msg.To).split(';') # список получателей
    sender = msg.SenderName # отправитель
    text = str(msg.Body) # текст письма
    html_text = str(msg.HTMLBody) # html код письма
    
    # сохранение вложений
    att_list=[]
    for att in msg.Attachments:
        att_name = att.FileName
        att.SaveAsFile(path + '\\' + att_name) # сохранение файла вложения
        att_list.append(att_name)  
    
    # корректировка html-кода для отражения вложенных картинок (замена адреса картинок на локальный вариант)
    if att_list:
        for fname in att_list:
            # паттерн ссылки на вставленное изображение
            pattern = '\"cid:' + fname  + '@[\w]{,20}.[\w]{,20}\"'
            html_text = re.sub(pattern, '\"' + fname + '\"', html_text, count=5)
    
    # создание  html-страницы с телом письма
    with open(path + '\\' + 'index_.html', 'w', encoding='utf8') as file:
        file.write(html_text)
    
    msg = inbox.GetPrevious() # переход к следующему письму