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

Python заготовка для создания wav-файлов без дополнительных модулей

"""Create wav file."""
import os
import sys

file_name = input("WAV file name: ")
if os.path.exists(file_name):
    print("ERROR: File name is busy")
    sys.exit(1)
with open(file_name, "wb") as wav_file:
    wav_file.write(
        bytes(
            (
                0x52, 0x49, 0x46, 0x46,  # RIFF
                # 0x24, 0x08, 0x00, 0x00,  # Chunk size = 2084
                0xf4, 0x08, 0x00, 0x00,  # Chunk size = ???
                0x57, 0x41, 0x56, 0x45,  # WAVE
                0x66, 0x6d, 0x74, 0x20,  # fmt
                0x10, 0x00, 0x00, 0x00,  # Subchunk1 size = 16
                0x01, 0x00,  # Audio Format = 1 (PCM)
                0x02, 0x00,  # Num Channels = 2
                # 0x01, 0x00,  # Num Channels = 1
                0x22, 0x56, 0x00, 0x00,  # Sample Rate = 22050
                0x88, 0x58, 0x01, 0x00,  # Byte Rate = 88200
                0x04, 0x00,  # Block Align = 4
                0x10, 0x00,  # Bits per sample = 16
                0x64, 0x61, 0x74, 0x61,  # data
                # 0x00, 0x08, 0x00, 0x00,  # subchunk size = 2048
                0x00, 0xf8, 0x00, 0x00,  # subchunk size = ???

                0x00, 0x00,  # sample 1 left
                0x00, 0x00,  # sample 1 right

                0x24, 0x17,  # sample 2 left
                0x1e, 0xf3,  # sample 2 right

                0x3c, 0x13,  # sample 3 left
                0x3c, 0x14,  # sample 3 right

                0x16, 0xf9,
                0x18, 0xf9,

                0x34, 0xe7,
                0x23, 0xa6,

                0x3c, 0xf2,
                0x24, 0xf2,

                0x11, 0xce,
                0x1a, 0x0d,
            )
        )
    )
    for _ in range(1000000):
        wav_file.write(
            bytes(
                (
                    0x16, 0xf9,
                    0x18, 0xf9,

                    0x34, 0xe7,
                    0x23, 0xa6,

                    0x3c, 0xf2,
                    0x24, 0xf2,

                    0x11, 0xce,
                    0x1a, 0x0d,
                )
            )
        )

Определение текущей раскладки в windows через powershell

PS C:\Users\Work> Function Get-CurrentInputLanguage {
>>     $ScriptBlock = {
>>         Add-Type -AssemblyName System.Windows.Forms
>>         [System.Windows.Forms.InputLanguage]::CurrentInputLanguage
>>     }
>>     $Job = Start-Job -ScriptBlock $ScriptBlock
>>     $Null = Wait-Job -Job $Job
>>     $CurrentLanguage = Receive-Job -Job $Job
>>     Remove-Job -Job $Job
>>     Return $CurrentLanguage
>> }
PS C:\Users\Work>

Вывод при английской раскладке:

PS C:\Users\Work> (Get-CurrentInputLanguage).Culture

LCID             Name             DisplayName
----             ----             -----------
1033             en-US            Английский (США)


PS C:\Users\Work> (Get-CurrentInputLanguage).layoutname
США

Вывод при русской раскладке:

PS C:\Users\Work> (Get-CurrentInputLanguage).Culture

LCID             Name             DisplayName
----             ----             -----------
1049             ru-RU            Русский (Россия)


PS C:\Users\Work> (Get-CurrentInputLanguage).layoutname
Русская
PS C:\Users\Work>

Решено: docker: Got permission denied while trying to connect to the Docker daemon в Ubuntu

  1. Проверить, что в системе создана группа docker, если нет, то создать
$ sudo groupadd docker

2. Добавить пользователя, у которого ошибка, в группу docker (можно без консоли через панель управления)

$ sudo usermod -aG docker imyapolzovatelya

3. Перезагрузиться ($ reboot) или попробовать активировать участие в новой группе без перезагрузки ($ newgrp docker)

После этого всё должно заработать, для проверки:

$ docker run hello-world

Вопросы по переходу c MSSQL на PostgreSQL (черновик)

Сам PostgreSQL
	Развёртывание
		Определиться, один будет сервер или кластер
		Если несколько, то у серверов наверно будут разные роли (обычно вроде несколько серверов на чтение данных, один на вставку и изменение)
		Установка ПО на все сервера одним скриптом
		Определиться с местом хранения:
			конфигурации
			баз данных
			резервных копий
			скриптов для обслуживания и т.д.
	Обслуживание
		Определиться с мониторингом состояния серверов и настроить его
		Составить план обслуживания серверов
			Периодичность и типы резервного копирования
			Прочие типовые операции обслуживания (обновление статистики, индексов и т.п.)
			Очистка от лишних данных в БД, логов и т.д.
		Расширение дискового пространства
		Добавление в кластер дополнительных серверов, замена серверов любой из ролей
		Трассировка и логирование запросов
		Определиться с управлением пользователями, созданием и удалением баз данных и схем, изменением таблиц, транзакций, процедур и т.п.
	Восстановление
		Приготовить скрипты для восстановления баз данных из бэкапов
		Восстановление серверов
		Все перечисленные варианты восстановления всего обязательно протестировать
Базы данных
	Перенос с MSSQL на PostgreSQL
		Инвентаризация данных в MSSQL
			какие данные какими приложениями используются
			из каких источников те же приложения будут брать данные после переезда
		Решить что делать с существующими ограничениями на таблицы (CONSTRAINTS)
		--//-- с существующими триггерами
		--//-- с с функциями, процедурами и прочими PROGRAMMABILITY
		Возможно согласовать правила переименования объектов БД (названия таблиц, колонок и т.п.)
		Алгоритм добавления и модификации данных в MSSQL и PostgreSQL на переходный период

Вызов кода C++ из скрипта на Python в Linux — самый простой способ

Создаём два текстовых файла main.py и MyClass.cpp

main.py:

from ctypes import cdll
lib = cdll.LoadLibrary('./libmyclass.so')


class MyClass(object):

    def __init__(self):
        self.obj = lib.MyClass_new()

    def my_function(self):
        lib.MyClass_myFunction(self.obj)


m = MyClass()
m.my_function()

MyClass.cpp:

#include <iostream>


class MyClass{
public:
    void myFunction(){
        std::cout << "Hello MyClass!!!" << std::endl;
    }
};


int main()
{
    MyClass m; 
    m.myFunction();  
    return 0;
}


extern "C" {
    MyClass* MyClass_new(){
        return new MyClass();
    }

    void MyClass_myFunction(MyClass* m) {
        m->myFunction();
    }
}

После этого выполняем в консоли следующие команды:

user@computer:~/MyPets/python_cpp_2023-05-01$ ls
main.py  MyClass.cpp
user@computer:~/MyPets/python_cpp_2023-05-01$ g++ -c -fPIC MyClass.cpp -o myclass.o
user@computer:~/MyPets/python_cpp_2023-05-01$ ls
main.py  MyClass.cpp  myclass.o
user@computer:~/MyPets/python_cpp_2023-05-01$ g++ -shared -Wl,-soname,libmyclass.so -o libmyclass.so myclass.o
user@computer:~/MyPets/python_cpp_2023-05-01$ ls
libmyclass.so  main.py  MyClass.cpp  myclass.o
user@computer:~/MyPets/python_cpp_2023-05-01$ python3 main.py 
Hello MyClass!!!
user@computer:~/MyPets/python_cpp_2023-05-01$

Как видим, всё работает. Проще способа не нашёл.

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

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

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

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

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