LINUX.ORG.RU

Сообщения Xintrea

 

Обработка имен файлов с пробелами, полученных от команды find - оно работает, но странно глючит

Наконец-то я почти нашел относительно адекватное решение старого вопроса: как в цикле правильно перебрать имена файлов, полученных от команды find, причем в именах файлов могут встречаться пробелы?

Решение такое:

find -name \*.mp3 -or -name \*.MP3 -or -name \*.Mp3 -or -name \*.ogg -print0 | while IFS= read -r -d '' file; 
do

    echo "Processing ${file}"
 
done

Однако есть проблема. Если в заданном каталоге вручную в консоли вызвать одну команду find, то она, как и положено, найдет все мои ~300 файлов:
find -name \*.mp3 -or -name \*.MP3 -or -name \*.Mp3 -or -name \*.ogg
./Last love jam.mp3
./WindJam/Minus 4.mp3
./WindJam/Minus 3.mp3
./WindJam/Minus 2.mp3
./WindJam/Minus 1.mp3
./Thrash-electronics JAM.mp3
... 300 файлов ...

Если же в этом же каталоге запустить полный вышеуказанный скрипт, то он найдет только *.ogg файлы.

Почему так? Что в скрипте еще надо исправить, что бы обрабатывались все файлы?

 , , , ,

Xintrea
()

Как в XPath выбрать элементы с частично известным именем?

Имеется следующий XML-код, сгенерированный некой программой с закрытыми исходниками:

<?xml version="1.0" encoding="utf-8"?>
<preparedreport>
    <b1 t="0">
        <m1 u="Период: 01.01.2024..08.08.2024"/>
    </b1>
    <b7 t="80.25201">
        <m53 u="Таблица"/>
    </b7>
    <b5 t="178.92919">
        <m33 u="09.01.2024"/>
        <m38 u="1"/>
        <m40 u="00:06"/>
    </b5>
    <b5 t="196.92919">
        <m33 u="10.01.2024"/>
        <m38 u="1"/>
        <m40 u="00:22"/>
    </b5>
</preparedreport>

Необходимо через XPath выбрать значения атрибута u для всех элементов, имя которых начинается на m.

То есть, в данном случае для элементов m1, m53, m33, m38, m40. А циферки в реальном XML-документе могут быть непредсказуемы, то бишь совершенно разные.

Вопрос: как через XPath выбирать элементы, имя которых начинается на m?

И вопрос со звездочкой: как через XPath выбрать элементы, имя которых начинается на m, после чего в имени идут только цифры?

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



Перемещено hobbit из general

 ,

Xintrea
()

GitHub стал показывать профиль рекурсивно

На основной странице показывает ошибку:

Uh oh!
There was an error in loading the activity feed. Reload this page.

А на странице профиля - профиль, потом с отступом ниже тот же профиль, потом с отступом еще один и так до бесконечности.

Браузер Firefox 86.0.1.

Если уменьшить шрифты, то выглядит вот так:

https://ibb.co/gFFNV3F

 

Xintrea
()

Как пользоваться ByeDPI для Android? Раззамедление YouTube

Наконец-то и мой провайдер стал резать YouTube. В поисках бесплатных OpenSource альтернатив VPN, я нашел такое:

Способ есть, протестил лично на своих девайсах:
(Работает по той же технологии, что и на пк GoodbyeDPI)

1. Качаете программу ByeDPI с гитхаба
https://github.com/dovecoteescapee/ByeDPIAndroid

2. Устанавливаем, включаем (при включении она запросит подключение впн). Ютуб работает. Вот так вот просто.

⚡️ Гайд, как пофиксить ютуб на Windows: https://t.me/modden_yt/1521

P.S. Ясное дело, есть впн, но бесплатный впн некачественный, а платный стоит денег. Так что, вот ответ тем, кто напишет про впн.


Ну окей. Поставил Obtainium, а через него ByeDPI for Android. Запускаю, нажимаю Connect. Пишет Connected. В Termux через ifconfig вижу, что создался интерфейс tun0. И дальше что?

Каким образом траффик Youtube должен завернуться на этот интерфейс?

Андроид, если что, не рутованный.

Искал-искал что где надо настраивать, везде в интернетах какая-то жесть. Наконец нашел следующее:

https://androidow.com/program/internet/3084-byedpi-ubiraem-zamedlenija-youtub...

Там написано:

Откройте ByeDPI после установки и перейдите к настройкам. Поменяйте VPN на Proxy. Альтернатива нажмите на шестерёнку в правом верхнем углу, во вкладке General выберите Mode и нажмите Proxy.

Активизация ByeDPI

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

Проверка работы

Запустите YouTube на вашем Android TV или Google TV и оцените улучшение скорости воспроизведения видео. ByeDPI должен устранить все замедления и обеспечить плавный просмотр.


То есть, надо вместо режима VPN включить режим Proxy. Переключаю. Туннель пропадает. ByeDPI пишет что «Proxy is up 127.0.0.1:1080».

И дальше что делать?

Как траффик клиента YouTube завернуть на этот прокси?

UPD: Решение здесь: Настройки ByeDPI for Android для восстановления работы YouTube

 ,

Xintrea
()

Понимание других людей: что обозначает иконка?

Я давно уже перестал понимать людей из инторнета.

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

https://ibb.co/WKDGVPg

Что она обозначает? Только я не понимаю?

UPD: Я даже дам подсказку: это как-то связано с иностранными языками.

 ,

Xintrea
()

Не могу правильно вставить рекламный блок Yandex 220x300 (коряво в Firefox)

Здравствуйте, уважаемые веб-мастера.

Не могу нормально вставить рекламный блок Yandex размером 220x300.

Вот как выглядит вставленный блок:
https://ibb.co/ykGKmBC

Сама страница здесь:
https://webhamster.ru/mytetrashare/index/mtb0/340

Код такой:

...
<td rowspan="2" style="background-color: #eae9e0; 
                       padding:0px; 
                       vertical-align: middle;" 
                       width="220px" 
                       height="300px">
 <div style="text-align: center;">
  <div style="display: inline-block;">

   <!-- Yandex.RTB R-A-259917-2 -->
   <div id="yandex_rtb_R-A-259917-2">
   ...

Как видно, этот блок отображается со странными полями сверху и снизу. При просмотре свойств элементов никаких отступов не установлено. Но рекламный блок, почему-то, обрезан сверху и снизу.

Проблема в старых и новых (102.12.0esr) Firefox.
В Chrome такая проблема не наблюдается.

Как нужно подправить свойства элементов, чтобы блок правильно выглядел?

 , ,

Xintrea
()

Что означает Default для Experimental QUIC protocol в браузере Chrome?

Ели в Chrome в строке адреса ввести команду:

chrome://flags/#enable-quic

То будет отображена страница настройки значения Experimental QUIC protocol:

Experimental QUIC protocol
Enable experimental QUIC protocol support. – Mac, Windows,
Linux, ChromeOS, Android, Fuchsia, Lacros

#enable-quic


Возможные варианты: Default, Enable, Disable.

Вопрос: как понять, что означает Default?

 ,

Xintrea
()

Загадки исходников NVIDIA

Имеется исходник:

https://github.com/NVIDIA/open-gpu-kernel-modules/blob/main/src/nvidia/genera...

И в нем не понятно, что это за конструкция в виде отдельного блока, завершаемого запятой «{...},» посреди других определений:

#if defined(BINDATA_INCLUDE_STORAGE_PVT_DECL)
BINDATA_STORAGE_PVT kgspBinArchiveBooterLoadUcode_TU102_patch_meta_storage_pvt;
#endif // defined(BINDATA_INCLUDE_STORAGE_PVT_DECL)

#if defined(BINDATA_INCLUDE_STORAGE_PVT_DEFN)
{
    12, // uncompressed data size (bytes)
    12, // compressed data size (bytes)
    kgspBinArchiveBooterLoadUcode_TU102_patch_meta_data, // compressed data pointer
    NV_FALSE, // is pData compressed?
    NV_TRUE, // contain information for file overriding?
    NV_FALSE, // is the data referenced during load? (Only valid when BINDATA_IS_MUTABLE is true)
},
#endif // defined(BINDATA_INCLUDE_STORAGE_PVT_DEFN)

#if defined(BINDATA_INCLUDE_DATA)
static BINDATA_CONST NvU8 kgspBinArchiveBooterLoadUcode_TU102_num_sigs_data[] = 
{
    0x01, 0x00, 0x00, 0x00,
};
#endif // defined(BINDATA_INCLUDE_DATA)

Эта конструкция «{...},» ничему не присваивается, то есть не участвует в инициализации, зачем она нужна? Встречается в этом файле несколько раз.

 , ,

Xintrea
()

Почему на bestfonts.pro для DejaVu Sans нет правильного начертания?

Оnкрываю страницу википедии:

https://ru.wikipedia.org/wiki/DejaVu

Внизу есть картинка, как должен выглядеть шрифт DejaVu Sans:

https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/DejaVuSans.svg/198p...

То есть это прямой шрифт обычной толщины без засечек.


Иду на сайт шрифтов, открываю страницу этого шрифта:

https://bestfonts.pro/font/dejavu-sans

И среди всех вариантов нет прямого шрифта обычной толщины без засечек.

Почему так, куда он делся?

 

Xintrea
()

Есть ли какая-то консольная утилита, способная сравнить два HTML-файла по степени похожести?

Есть два HTML-кода. В одном - статья на одном сайте, в другом - копия этой статьи на другом сайте, прошедшая некие html/xml преобразования. То есть, до и после текста статьи - все в коде разное (header/bottom), да и сам текст статьи на разных сайтах отформатирован разными тегами. И еще текст статьи тоже может немного отличаться.

Так вот, есть ли какая-то консольная утилита, которая покажет некую метрику, через которую можно (хотя бы с некоторой долей вероятности) понять, что эти два HTML-кода содержат одинаковую статью? Или что один HTML-код содержит часть статьи (достаточно крупную) с другой страницы?

Чтобы в утилите была какая-то реализация string kernels или там косинусного подобия или чего-то такого.

 , , ,

Xintrea
()

Не могу понять, что там с deprecated QFlags в Qt 5.15?

Пытался собрать старенький проект на Qt 5.15.

Он даже собирается и работает. Но при компиляции куча варнингов про всякие deprecated. Один из варнингов следующий.

Сам код:

class RecordInfoFieldsEditor : public QDialog
{
  RecordInfoFieldsEditor( QWidget * parent = nullptr, Qt::WindowFlags f = 0 ); 


Варнинг такой:
In file included from src/views/record/RecordInfoFieldsEditor.cpp:11:
src/views/record/RecordInfoFieldsEditor.h:22:75: warning: ‘constexpr QFlags<T>::QFlags(QFlags<T>::Zero) [with Enum = Qt::WindowType; QFlags<T>::Zero = int QFlags<Qt::WindowType>::Private::*]’ is deprecated: Use default constructor instead [-Wdeprecated-declarations]
   22 |   RecordInfoFieldsEditor( QWidget * parent = nullptr, Qt::WindowFlags f = 0 );
      |                                                                           ^  

В документации на конструктор QDialog ничего внятного про прекращение поддержки флагов не написано:

QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

Constructs a dialog with parent parent.

A dialog is always a top-level widget, but if it has a parent, its default location is centered on top of the parent. It will also share the parent's taskbar entry.

The widget flags f are passed on to the QWidget constructor. If, for example, you don't want a What's This button in the title bar of the dialog, pass Qt::WindowTitleHint | Qt::WindowSystemMenuHint in f.

See also QWidget::setWindowFlags().



Да и для QWidget, от которого наследуется QDialog, тоже глухо:

QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())

Constructs a widget which is a child of parent, with widget flags set to f.

If parent is nullptr, the new widget becomes a window. If parent is another widget, this widget becomes a child window inside parent. The new widget is deleted when its parent is deleted.
The widget flags argument, f, is normally 0, but it can be set to customize the frame of a window (i.e. parent must be nullptr). To customize the frame, use a value composed from the bitwise OR of any of the window flags.

If you add a child widget to an already visible widget you must explicitly show the child to make it visible.

Note that the X11 version of Qt may not be able to deliver all combinations of style flags on all systems. This is because on X11, Qt can only ask the window manager, and the window manager can override the application's settings. On Windows, Qt can set whatever flags you want



Как исправить код, чтобы этого варнинга не было? Чего хочет Qt или компилятор? Что там с QFlags, их дальше в Qt не будет?

Достаточно ли просто убрать из прототипа и реализации параметр Qt::WindowFlags f и его установку по-умолчанию?

 , , ,

Xintrea
()

Работа с PHP DOM - как в XML заменить один тег на другой, сохраняя подчиненные элементы?

Имеется текст с XML-форматированием:

<div id="recordContent">
    <div style="font-style:normal;">
        <p>Text 1</p>
        <p>Text 2</p>
    </div>
</div>

Необходимо в нем заменить тег <div id=«recordContent»> на <body>, вот так:
<body>
    <div style="font-style:normal;">
        <p>Text 1</p>
        <p>Text 2</p>
    </div>
</body>

Для этого я написал следующий минимальный код:
<?php

$contents = <<<STR
<div id="recordContent">
    <div style="font-style:normal;">
        <p>Text 1</p>
        <p>Text 2</p>
    </div>
</div>
STR;

$htmlDom = new DOMDocument();
$htmlDom->loadHTML($contents);

// Поиск элемента с внутренними узлами
$element = $htmlDom->getElementById("recordContent");

if ($element) 
{
    // Создание нового элемента <body>
    $htmlBody = $htmlDom->createElement('body');

    // Копирование дочерних элементов из <div> в <body>
    foreach ($element->childNodes as $child) 
    {
        $htmlBody->appendChild($child);
    }

    // Замена элемента <div> верхнего уровня
    $element->parentNode->replaceChild($htmlBody, $element);

    // Получаем HTML-код внутри элемента
    $innerHtml = $htmlDom->saveXML();

    echo $innerHtml;
}    

?>

И этот PHP-код генерит вот такой текст:
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><body>
    </body></body></html>

Вопрос: что не так, почему вместо замены одного головного элемента происходит не то что ожидается?

 , , ,

Xintrea
()

psycopg2 не имеет элемент sql?

Использую Astra Linux 1.6

Установлен пакет python3-psycopg2 версии 2.6.2-1.

Пишу минимальный код:

#!/usr/bin/python3

import sys
import enum

from psycopg2 import connect
from psycopg2 import sql

И при запуске вижу ошибку:
Traceback (most recent call last):
  File "./sample_import.py", line 7, in <module>
    from psycopg2 import sql
ImportError: cannot import name 'sql'

То есть, connect импортируется нормально, а sql - нет.

Это потому что кривая (старая) библиотека, как у этого товарища: https://github.com/OCA/openupgradelib/issues/193
Похоже, что SQL string composition появилось только в версии 2.7?

А как же тогда раньше генерировали безопасные запросы, которые имеют динамические имена объектов БД? (Имеется в виду именно динамические имена объектов БД а не представление данных, пишущихся в БД).

Получается, что все что написано здесь:
https://www.psycopg.org/docs/usage.html#passing-parameters-to-sql-queries
и здесь:
https://www.psycopg.org/docs/sql.html
в моем случае неприменимо, т. к. система сертифицирована и замена пакетов не допускается.

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

 , , ,

Xintrea
()

psycopg2 генерирует неправильные команды для комментариев и схем

Продолжаю пытаться использовать библиотеку psycopg2. Проблема подкралась откуда не ждали.

Итак, код написан в соответствии с документацией:

https://www.psycopg.org/docs/usage.html

В которой сказано, что psycopg2 в методе execute() сама делает подстановки в SQL-запрос из переданного кортежа, и делает это правильно. Однако, по факту оказалось, что это не так.

Следующие ошибки демонстрируют, что psycopg2 не понимает где пользовательские данные, а где обращение к объектам. Она просто все подстановки анализирует на переданный базовый Python-тип, и вставляет данные соответственно этому типу. Если это строка - то она будет заключена в одинарные кавычки. Если целое число - будет вставлено число без кавычек.

А что делать, если в кортеже передано имя объекта БД, значение которого не нужно заключать в кавычки? Об этом авторы документации ничего не говорят.

Поэтому, например при использовании комментариев к таблице или при работе со схемами возникают ошибки:

Команды:

cursor.execute( "COMMENT ON TABLE %s IS 'version=%s';", (tableName, tableVersion) )

cursor.execute("CREATE SCHEMA IF NOT EXISTS %s;", (dbSchema,) )


Ошибки:

File "./sample.py", line 205, in setTableVersion
    cursor.execute( "COMMENT ON TABLE %s IS 'version=%s';", (tableName, tableVersion) )
psycopg2.ProgrammingError: ОШИБКА: ошибка синтаксиса at or near "'devices'
LINE 1: COMMENT ON TABLE 'devices' IS 'version=12';
                         ^

File "./sample.py", line 89, in connect
    cursor.execute("CREATE SCHEMA IF NOT EXISTS %s;", (dbSchema,) )
psycopg2.ProgrammingError: ОШИБКА: ошибка синтаксиса at or near "'service'
LINE 1: CREATE SCHEMA IF NOT EXISTS 'service';
                                    ^

В этих командах значения devices и service не должны заключаться в кавычки. Но они заключаются, чем и ломают саму команду.

Вопрос: а как же правильно передавать значения в execute() ?

 , , , ,

Xintrea
()

psycopg2 не может работать со схемой «validate»

Продолжаю разбираться в связке PostgreSQL+Python+psycopg2.

Вот код, который создает схему our_scheme и создает таблицу в этой схеме:

# Подключение к БД с заданными параметрами
connection = psycopg2.connect(**pgConnectionParameters)
cursor = connection.cursor()

# Переключение на заданную схему
dbSchema = 'our_schema'
cursor.execute("CREATE SCHEMA IF NOT EXISTS %s" % dbSchema)
cursor.execute("SET search_path TO %s" % dbSchema)

# Проверка текущей схемы
cursor.execute("SHOW search_path;")
result = cursor.fetchone()
print( result )

# Создание таблицы
cursor.execute("CREATE TABLE IF NOT EXISTS our_table (id varchar(128) UNIQUE, name varchar(128))")

Все прекрасно работает. Но теперь берем и меняем название схемы:
dbSchema = 'our_schema'
на
dbSchema = 'validate'

И код резко перестает работать. Появляется ошибка:
$ ./sample.py
('validate',)
Traceback (most recent call last):
  File "./sample.py", line 31, in <module>
    cursor.execute("CREATE TABLE IF NOT EXISTS our_table (id varchar(128) UNIQUE, name varchar(12
8))")

psycopg2.ProgrammingError: ОШИБКА: схема для создания объектов не выбрана
LINE 1: CREATE TABLE IF NOT EXISTS our_table (id varchar(128) UNIQUE...

Я проверяю те же самые команды в чистой консоли psql - все работает, схема validate создается, в ней создается таблица.

Но почему-то эти же команды через psycopg2 выдают ошибку.

Почему так?

 , ,

Xintrea
()

psycopg2 не может вернуть текущую схему через команду «SHOW search_path;»

1. Создаю собственную схему,
2. переключаюсь на нее,
3. и сразу хочу посмотреть какая схема используется.

Делаю это следующим кодом:

# Подключение к БД с заданными параметрами
connection = psycopg2.connect(**pgConnectionParameters)
cursor = connection.cursor()

# Переключение на заданную схему
dbSchema = 'our_schema'
cursor.execute("CREATE SCHEMA IF NOT EXISTS %s" % dbSchema)
cursor.execute("SET search_path TO %s" % dbSchema)

# Проверка текущей схемы
result = cursor.execute("SHOW search_path;")
print( result )

А результат None. Соответственно, даже fetchone/fetchall от результата вызвать не могу.

Вопрос: почему переменная result равна None?

 , , ,

Xintrea
()

Понять структуру бинарного файла прошивки - получить максимальную информацию

Привет, народ.

Имеется вот такая прошивка для гитарного процессора BOSS GT-1:

https://static.roland.com/assets/media/zip/gt1_sys_v109.zip

В архиве лежит незашифрованный бинарник.

Нужно понять две вещи:

1. Что за структура у этого бинарника? Похоже, что вначале идет нечто вроде таблицы разделов какой-то файловой системы. Но какой - по сигнатуре нагуглить не могу. Или это какие-то таблицы смещений? Или еще что-то?

2. Надо понять, где начинается код. И какой архитектуры этот код. ARM? MIPS? Что-то еще? Каким инструментарием смотреть?

Свои мысли я начал записывать здесь: https://webhamster.ru/mytetrashare/index/mtb0/17186974979qcubc1ew5 , хочу расширить понимание как устроена эта прошивка.

 ,

Xintrea
()

А вы знали, что в глубинах Firefox используется протокол chrome:// ?

Запускаем Firefox, на новой странице нажимаем ПКМ на логотипе или на надписи Firefox. И получаем следующее:

chrome://branding/content/about-logo.png
chrome://branding/content/firefox-wordmark.svg

Как вам?

 , ,

Xintrea
()

Как любители Linux выводят копеюшечки из Binance наиболее выгодно в 2024 году?

Знаю, что тут есть специалисты по крипте. Я просто не успеваю разбираться в вечноменяющемся интерфейсе и вечно меняющихся правилах и ограничениях на Binance.

Сейчас хочу вывести эквивалент двухсотпятидесяти $ из валюты ETH в рубли. Начал разбираться, везде информация разная, включая официальные страницы Binance, которые явно устарели.

Пишут что можно через P2P биржу, которая есть в Binance, вывести на рублевую карточку, указав Зеленый или Желтый банк. Начинаю искать где это и как. Ничего похожего не нахожу. В P2P - интерфейсе подсовывается соглашение на суточные ограничения для C2C. Я ничего не понимаю, при чем тут C2C. Потом не могу найти в этом P2P вывод в рубли RUR или RUB. Даже вывода в USD нет. Зато в EUR есть. Почему так - непонятно. Можно ли эти EUR на валютный счет в Сбере или в ВТБ перевести - нигде информации нет. Какой курс и комиссии при этом будет - тоже невозможно выяснить.

В общем, сейчас вижу только одну схему - конвертнуть в пределах Binance ETH в USDT, вывести на WebMoney кошелек WMT, а из него уже на ихней бирже Exchanger получить за WMT рубли. Но я не знаю насколько это выгодно. Может, есть какой другой более простой или более выгодный способ?

 , ,

Xintrea
()

Почему не обновляется значение поля через триггер и функцию в PostgreSQL? (Отладочный вывод в наличии)

Имеется таблица our_table с полем change_time типа TIMESTAMP DEFAULT CURRENT_TIMESTAMP.

Необходимо менять поле change_time при действиях INSERT и UPDATE.

Для этого в базе создан триггер со следующим кодом:

CREATE TRIGGER our_table_update_change_time
AFTER INSERT OR UPDATE
ON our_table 
FOR EACH ROW EXECUTE PROCEDURE update_change_time_column();

Этот триггер использует следующую функцию, в которой есть отладочное сообщение:
CREATE OR REPLACE FUNCTION public.update_change_time_column()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
BEGIN
  RAISE NOTICE 'Trigger our_table_update_change_time is run'
  NEW.change_time: = now();
  RETURN NEW;
END;
$function$;

Изменение значения в таблице приводит к вызову триггера, а из него и кода функции. Это видно из вывода:
UPDATE our_table SET about='Any new text' WHERE id='1';
ЗАМЕЧАНИЕ:  Trigger our_table_update_change_time is run
UPDATE 1

Казалось бы, все работает? Нет. Изменения значение поля change_time не происходит.

Что здесь сделано неправильно? Как заставить изменяться поле change_time?

 , , ,

Xintrea
()

RSS подписка на новые темы