Архивы автора: 1 1

Установка и запуск Trac чисто попробовать

Документация здесь https://trac.edgewall.org/wiki/TranslationRu/TracGuide

Trac можно устанавливать как модуль для Python (https://pypi.org/project/Trac/)

$ pip install Trac

Под проекты создадим папку например в домашней

$ mkdir ~/trac

После установки будут доступны программы tracd — веб-сервер и trac-admin — для администрирования через командную строку.

Команда для запуска веб-сервера:

$ tracd -p 8000 --env-parent-dir ~/trac

После запуска можно войти через браузер на страницу http://127.0.0.1:8000/. Здесь будут отображаться ссылки на доступные проекты, но сначала их надо добавить через trac-admin. Например создадим тестовый проект

$ trac-admin ~/trac/test initenv
Создание нового окружения Trac в ~/trac/test

Trac will first ask a few questions about your environment
in order to initialize and prepare the project database.

 Please enter the name of your project.
 This name will be used in page titles and descriptions.

Название проекта [My Project]> Test project

 Please specify the connection string for the database. By default,
 a local SQLite database is created in the environment directory.
 It is also possible to use an existing MySQL or PostgreSQL database
 (check the Trac documentation for the connection string syntax).

Строка подключения к базе данных [sqlite:db/trac.db]> 

Project environment for 'Test project' created.

You may configure the environment by editing the file:

  ~/trac/test/conf/trac.ini

You can run the Trac standalone web server `tracd` and point
your browser to http://localhost:8000/test.

  tracd --port 8000 ~/trac/test

Navigate to "Help/Guide" to browse the documentation for Trac,
including information on further setup (such as deploying Trac
to a real web server).

The latest documentation can also be found on the project
website:

  https://trac.edgewall.org/

Теперь после перезапуска tracd по адресу http://127.0.0.1:8000/ в списке появится Test project, в который можно заходить.

По умолчанию в созданном проекте ничего нельзя делать — нет прав. Управление правами производится через trac-admin. Поскольку мы установили trac чисто посмотреть покрутить, то включим полные права всем анонимным пользователям без всякого входа

$ trac-admin ~/trac/test permission add anonymous TRAC_ADMIN

Теперь можно перезапускать tracd, будет всё можно.

Прочая полезная информация для общего понимания:

  • лог для тестового проекта будет писаться в ~/trac/test/log/trac.log
  • данные сайта будут храниться в ~/trac/test/db/trac.db (формат SQLite, можно открывать любым подходящим просмотрщиком)
  • настройки — в ~/trac/test/conf/trac.ini, для вступления изменений в силу нужно перезапустить tracd

Как отключить управление курсором мышки с джойстика в Ubuntu

Включаем игру, собираемся играть, и тут при нажатии на кнопки джойстика мышь начинает бегать и нажимать куда попало.

Рецепт, как отключить это:

  1. Открыть командную строку
  2. Выполнить
$ xinput list

3. Найти строку со своим джойстиком. У меня это

 ⎜ ↳ Sony Interactive Entertainment Controller id=17 [slave pointer (2)]. 

4. Нас интересует id, в данном случае 17

5. Выполнить

$ xinput list-props 17

Нас интересуют следующие 2 строки и цифры у них в скобках

...
	Generate Mouse Events (638):	1
	Generate Key Events (639):	1
...

6. И теперь непосредственно отключаем джойстик от мыши:

$ xinput set-prop 17 638 0
$ xinput set-prop 17 639 0
$

После этого курсор мыши бегать от джойстика перестанет.

Чтоб вернуть как было, нужно выполнить последние 2 команды с последним параметром 1 вместо 0

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$

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