Архив рубрики: Без рубрики

Решено: LoadLibrary failed with error 87: The parameter is incorrect

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

Варианты решения:

  • Постоянное решение: Попробовать подобрать версию видеодрайвера, на которой ошибка перестанет появляться
  • Разовое решение:
    • Перед запуском нужной программы войти в «Управление компьютером» — «Диспетчер устройств»
    • Найти видеокарту
    • «Обновить драйвер» — «Найти на этом компьютере» — «Выбрать из списка доступных» — «Базовый видеоадаптер (Microsoft)»
    • Запустить спокойно нужную программу, которая раньше не запускалась
    • После того как нужная программа успешно запустилась, можно так же через диспетчер устройств переключиться обратно на видеодрайвер AMD, при этом программа продолжит нормально работать

Проверено на текстовом редакторе Spyder.

Программа для подключения двух сервоприводов к Arduino

#include <Servo.h> 
Servo myservo_1;  // для управления первым сервоприводом
Servo myservo_2;  // для управления вторым сервоприводом
int val = 1;  // угол положения сервопривода 
int increment = 1;  // на сколько градусов менять угол
 
void setup() 
{ 
  // жёлтый провод первого сервопривода на 9 пине
  myservo_1.attach(9); 
  // жёлтый провод второго сервопривода на 10 пине 
  myservo_2.attach(10);
} 
 
void loop() 
{ 
  // Сервоприводы поворачиваются на противоположные углы
  if(val <= 1){
    increment = 1;
  }
  if(val >= 178){
    increment = -1;
  }
  val += increment;
  myservo_1.write(val);
  myservo_2.write(179 - val);
  delay(15);
} 

Ходовые модули Python для анализа данных и машинного обучения

== CNTK

  • # The Microsoft Cognitive Toolkit
  • «A free, easy-to-use, open-source, commercial-grade toolkit that trains deep learning algorithms to learn like the human brain.»
  • pip install cntk
  • «CNTK is no longer actively developed»

== deap

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

== jupyter

  • среда для выполнения кода на питоне и просмотра результатов в браузере
  • можно перезапускать с изменениями только выбранные куски кода
  • можно выводить графики matplotlib

== keras

  • для нейронных сетей
  • может работать поверх theano, tensorflow или CNTK

== matplotlib

  • рисование графиков

== numpy

  • многомерные массивы, матрицы
  • удобная загрузка данных из бинарных файлов
  • библиотека используется во многих других (pandas, …)

== nvidia-…

  • nvidia-cublas-cu12
  • nvidia-cuda-cupti-cu12
  • nvidia-cuda-nvcc-cu12
  • nvidia-cuda-nvrtc-cu12
  • nvidia-cuda-runtime-cu12
  • nvidia-cuda-sanitizer-api-cu12
  • nvidia-cufft-cu12
  • nvidia-curand-cu12
  • nvidia-cusolver-cu12
  • nvidia-cusparse-cu12
  • nvidia-npp-cu12
  • nvidia-nvjitlink-cu12
  • nvidia-nvjpeg-cu12
  • nvidia-nvml-dev-cu12
  • nvidia-nvtx-cu12
  • nvidia-pyindex

== opencv-python

  • pip install opencv-python
  • машинное зрение, распознавание объектов на изображениях и т.п.

== orange3

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

== pandas

  • для извлечения и подготовки данных
  • похоже на электронные таблицы, можно задавать и использовать имена колонок и индексы для строк
  • на базе numpy
  • загрузка данных из excel, csv, json, sql
  • группировка и фильтрация данных
  • применение функций ко всем значениям в выбранных колонках — в разы быстрее чем использовать циклы на чистом питоне
  • надо внимательно следить при работе с данными, когда они нормально скопированы, а когда ссылаются на источник, чтоб изменяя значения в одном месте, не испортить их в другом

== pillow

  • работа с изображениями
  • можно попиксельно

== plotly

  • интерактивные графики в браузере
  • pip install plotly

== pyodbc

  • для выполнения запросов к разным базам данных (MSSQL, PG и т.п.)
  • для разных баз данных изредка работает с разными ошибками (изредка случалось, результаты из модуля не совпадали с результатами через нативные клиенты), но в большинстве случаев всё хорошо

== pytorch

  • библиотека для машинного обучения
  • нейронные сети
  • тензорные вычисления
  • может работать с GPU
  • говорят, что замена для numpy
  • вроде поддерживает динамические графики

== scikit-learn

  • библиотека всяких алгоритмов машинного обучения — кластеризации, регрессии, классификации, …
  • на основе numpy и scipy

== scipy

  • для статистики, линейной алгебры, числовых процедур и оптимизации
  • на основе numpy

== seaborn

  • библиотека построения графиков и визуализации данных
  • основана на matplotlib

== spyder

  • интерактивный редактор кода с автодополнением
  • можно выполнять код прямо внутри редактора
  • можно сразу выводить графики matplotlib

== sympy

  • для символьных вычислений — не только получения значений, а сокращения формул и т.п.
  • для уравнений в решении умеет возвращать несколько корней, как положено
  • хорошая статья с примерами на хабре https://habr.com/ru/post/680258/

== tensorflow

  • для нейронных сетей

== theano

  • для нейронных сетей
  • может использовать GPU

Ещё не написал про модули от nvidia для работы с GPU

Если кто ещё знает полезные модули по теме — пишите в коментариях, тоже соберём в кучу

C++ Компиляция HelloWorld для wxWidgets в Ubuntu

  1. Установить пакеты wxWidgets (версии могут быть другие):
sudo apt install libwxgtk3.0-gtk3-0v5
sudo apt install libwxgtk3.0-gtk3-dev

2. Создать файл main.cpp:

// https://docs.wxwidgets.org/latest/overview_helloworld.html
// https://docs.wxwidgets.org/latest/overview_install.html

// wxWidgets "Hello world" Program
// For compilers that support precompilation, includes "wx/wx.h".
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
    #include <wx/wx.h>
#endif
class MyApp: public wxApp
{
public:
    virtual bool OnInit();
};
class MyFrame: public wxFrame
{
public:
    MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
private:
    void OnHello(wxCommandEvent& event);
    void OnExit(wxCommandEvent& event);
    void OnAbout(wxCommandEvent& event);
    wxDECLARE_EVENT_TABLE();
};
enum
{
    ID_Hello = 1
};
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
    EVT_MENU(ID_Hello,   MyFrame::OnHello)
    EVT_MENU(wxID_EXIT,  MyFrame::OnExit)
    EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
wxEND_EVENT_TABLE()
wxIMPLEMENT_APP(MyApp);
bool MyApp::OnInit()
{
    MyFrame *frame = new MyFrame( "Hello World", wxPoint(50, 50), wxSize(450, 340) );
    frame->Show( true );
    return true;
}
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
        : wxFrame(NULL, wxID_ANY, title, pos, size)
{
    wxMenu *menuFile = new wxMenu;
    menuFile->Append(ID_Hello, "&Hello...\tCtrl-H",
                     "Help string shown in status bar for this menu item");
    menuFile->AppendSeparator();
    menuFile->Append(wxID_EXIT);
    wxMenu *menuHelp = new wxMenu;
    menuHelp->Append(wxID_ABOUT);
    wxMenuBar *menuBar = new wxMenuBar;
    menuBar->Append( menuFile, "&File" );
    menuBar->Append( menuHelp, "&Help" );
    SetMenuBar( menuBar );
    CreateStatusBar();
    SetStatusText( "Welcome to wxWidgets!" );
}
void MyFrame::OnExit(wxCommandEvent& event)
{
    Close( true );
}
void MyFrame::OnAbout(wxCommandEvent& event)
{
    wxMessageBox( "This is a wxWidgets' Hello world sample",
                  "About Hello World", wxOK | wxICON_INFORMATION );
}
void MyFrame::OnHello(wxCommandEvent& event)
{
    wxLogMessage("Hello world from wxWidgets!");
}

3. Скомпилировать вот такой командой:

$ g++ main.cpp -o main `wx-config --cxxflags --libs`

4. Можно запускать получившуюся программу:

$ ./main

Python Генерация звуков через PyAudio

Следующий код генерирует и проигрывает звук:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Генерация звуков через pyaudio.

За основу взят https://medium.com/py-bits/sound-generation-python-904e54f5398d

sudo apt-get install python3-pyaudio
"""

import pyaudio
import math
PyAudio = pyaudio.PyAudio
BITRATE = 5000
FREQUENCY = 10000
LENGTH = 5
if FREQUENCY > BITRATE:
    BITRATE = FREQUENCY + 100
NUMBER_OF_FRAMES = int(BITRATE * LENGTH)
WAVEDATA = ''
for x in range(NUMBER_OF_FRAMES):
    WAVEDATA = WAVEDATA + chr(
        int(
            math.sin(
                x
                / (
                    (
                        BITRATE / FREQUENCY
                    ) / math.pi
                )
            ) * 127 + 128
        )
    )
REST_FRAMES = NUMBER_OF_FRAMES % BITRATE
for x in range(REST_FRAMES):
    WAVEDATA = WAVEDATA + chr(128)
# print(WAVEDATA)
# óYªQ±J¹CÀ<Æ5Í/Ó)Ù$Þãèìð
# öùûýþþþþýüúø	õ
# óYªQ±J¹CÀ<Æ5Í/Ó)Ù$ÞãèìðÛ&Ö,Ð2Ê9Ã?¼FµN®U¦\lt|xph
# öùûýþþþþýüúø	õ
# ...
p = PyAudio()
stream = p.open(
    format=p.get_format_from_width(1),
    channels=2,
    rate=BITRATE,
    output=True
)
stream.write(WAVEDATA)
stream.stop_stream()
stream.close()
p.terminate()

wxPython пример рабочего окна с кнопкой

# -*- coding: utf-8 -*-
"""
# Самый простой пример окна.

# Отсюда: https://wiki.wxpython.org/Getting%20Started

import wx

# Create a new app, don't redirect stdout/stderr to a window.
app = wx.App(False)
# A Frame is a top-level window.
frame = wx.Frame(None, wx.ID_ANY, "Hello World")
frame.Show(True)     # Show the frame.
app.MainLoop()
"""

import wx


class MyFrame(wx.Frame):
    """Главное окно."""

    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(200, 100))
        # текстовое многострочное поле
        self.text_input = wx.TextCtrl(
            self,
            style=wx.TE_MULTILINE,
            size=(400, 200),
        )
        # кнопка
        self.exit_button = wx.Button(
            self,
            label="Exit",
            pos=(300, 300),
            size=(100, 100)
        )
        self.Size = (500, 500)
        # Привязка нажатия кнопки к запуску метода главного окна
        self.Bind(wx.EVT_BUTTON, self.my_exit, self.exit_button)
        self.Show(True)

    def my_exit(self, param):
        """Самодельный метод - Закрыть главное окно."""
        # quit()  # раскоментировать чтоб выход заработал
        print(f"param: {dir(param)}")  # что во втором параметре
        self.text_input.SetValue("Exit")  # изменить текст


app = wx.App(False)
frame = MyFrame(None, 'Small editor - Тестовый редактор')
app.MainLoop()

Python matplotlib быстро нарисовать график

matplotlib — модуль питона для рисования графиков

Установка matplotlib:

python3 -m pip install matplotlib

Код чтоб нарисовать простой график:

import matplotlib.pyplot as plt
plt.plot([1,2,3], [2,1,3])

просто два массива — по x и y

Результат:

Сборка Python из исходников в Linux

Имеем распакованный архив с исходниками, например Python-3.10.0.tar.xz

 1490  cd Python-3.10.0
 1491  ls
 1492  mkdir debug
 1493  cd debug/
 1498  make -C ".." clean
 1499  ../configure --with-pydebug
 1500  make
 1502  ./python

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

Как узнать код активации Windows из Linux

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

sudo cat /sys/firmware/acpi/tables/MSDM