LINUX.ORG.RU

Сообщения Xintrea

 

Банк ВТБ заставил меня начать параноить

https://webhamster.ru/site/page/index/main/news/792

Оказывается, с некоторых пор процедура входа через десктопный браузер изменилась. Пользователю предлагается задать 4-6 значный код для удобного доступа к системе. Отказаться от этого нельзя.

Теперь мои параноидальные пароли over 25 символов не нужны. Все гораздо проще. Зашибись.

Пока что вместо задания этого кода я отказался от услуг ВТБ: код не задал, соответственно пользоваться сервисом не могу. Правильно ли я сделал?

 банк,

Xintrea
()

Качество книжек по Rust

Решил посмотреть что есть на русском языке по Rust для старта, и каково качество оригинала и перевода. Нашел книжку https://doc.rust-lang.ru/book/, решил посмотреть, хватит ли моих утомленных мозгов чтобы осилить введение в язык. Споткнулся в самом начале на элементарном примере:

io::stdin().read_line(&mut guess)
Вот что там написано:

Главная задача read_line — принять все, что пользователь вводит в стандартный ввод, и сложить это в строку (не переписывая её содержимое), поэтому мы передаём эту строку в качестве аргумента. Строковый аргумент должен быть изменяемым, чтобы метод мог изменить содержимое строки.

У меня когнитивный диссонанс. В одном предложении автор пишет что ввод надо сложить в строку, не переписывая ее содержимое. Окей. В следующем предложении написано, что аргумент должен быть изменяемым, чтобы метод мог изменить содержимое строки. Так будет переписываться строка или не будет?

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

Далее:

одним из главных преимуществ Rust является безопасность и простота использования ссылок. Чтобы дописать эту программу, вам не понадобится знать много таких подробностей. Пока вам достаточно знать, что ссылки, как и переменные, по умолчанию неизменяемы. Соответственно, чтобы сделать её изменяемой, нужно написать &mut guess, а не &guess. (В главе 4 ссылки будут описаны более подробно)

Что значит, что по умолчанию ссылки неизменяемы? Ведь мне только это достаточно знать. Неизменяем «адрес», хранимый в ссылке, или неизменяемы данные, на которые указывает ссылка? Что делает синтаксис «&mut guess» ? Он дает меняться «адресу», чтобы ссылка могла указываеть на другую область памяти, или дает меняться данным, на которые указывает ссылка? Почему, блин, с самого начала людей оставляют в неизвестности, не объясняя что конкретно происходит? Концепция владения в гл. 4 тут вообще не при чем.

Почему я пишу слово «адрес» в кавычках? Потому что я не смог понять, что такое ссылка. Поэтому я не понимаю механизм работы ссылки:

  • Ссылка Rust хранит адрес в памяти, где хранятся данные?
  • Ссылка Rust хранит адрес в памяти, где находится внутреннее описание переменной, на которую указывает ссылка? Через которое уже будет доступ к памяти, где хранятся данные?
  • Ссылка Rust вообще не хранит адрес в памяти, а хранит некий номер/дескриптор из какой-то таблицы доступных переменных, по которой получается адрес в памяти? Но тогда это адрес чего - самих данных или внутреннего описания переменной, по которой доступен адрес самих данных?
  • Может быть, конструкция вообще другая?

 

Xintrea
()

Как указать DPI при удаленном запуске графических приложений по ssh -X?

Поменяли мне на работе монитор на разрешение 2К. Все бы ничего, но когда я пытаюсь удаленно запустить GUI-приложения на удаленом сервере, они показываются с малюсенькими шрифтами.

Например, мне часто нужно удаленно запускать gitk и git gui, которые используют библиотеку Tk для интерфейса. И я не могу разобраться как изменить шрифт или рендеринг всего окна удаленной программы.

Я пытался сделать так:

export XFT_DPI=250
gitk

export XFT_DPI=96
gitk

Никакого эффекта.

Пытался запускать так:
export XRESOURCES="Xft.dpi: 250"
xrdb -merge <<< "$XRESOURCES"
gitk

export XRESOURCES="Xft.dpi: 96"
xrdb -merge <<< "$XRESOURCES"
gitk

Тоже никакого эффекта.

Вопрос: как для удаленной сессии по ssh -X изменить DPI или размер шрифта?

 , , , ,

Xintrea
()

Почему в Git один и тот же комммит показывает разные изменения?

Что-то я затупил. Имею репозитарий:

git clone https://invent.kde.org/utilities/konsole.git

Нахожу в нем следующий коммит, который содержит изменение для файла /src/Profile.cpp:
commit 9ea9d62785193ec06a8f37090dd6e7940626e1b8
Author: Jekyll Wu <adaptee@gmail.com>
Date:   Mon Oct 10 16:23:22 2011 +0800

    Reimplement the feature of "show/hide the size widget after resising"
    
    This is a follow up of commit b40a006d which closees BUG 169054.
    It turns out the old code already has most parts of similar logic.
    So remove duplicated logic in the code.

diff --git a/src/Profile.cpp b/src/Profile.cpp
index 06ef51960..d9706d17b 100644
--- a/src/Profile.cpp
+++ b/src/Profile.cpp
@@ -76,7 +76,7 @@ const Profile::PropertyInfo Profile::DefaultPropertyNames[] =
...skipping...
+    , { BoldIntense, "BoldIntense", APPEARANCE_GROUP, QVariant::Bool }

     // Keyboard
     , { KeyBindings , "KeyBindings" , KEYBOARD_GROUP , QVariant::String }
@@ -179,6 +180,7 @@ FallbackProfile::FallbackProfile()

     setProperty(DefaultEncoding,QString(QTextCodec::codecForLocale()->name()));
     setProperty(AntiAliasFonts,true);
+    setProperty(BoldIntense,true);

     // default taken from KDE 3
     setProperty(WordCharacters,":@-./_~?&=%+#");

Я переключаюсь на него:
git checkout 9ea9d62785193ec06a8f37090dd6e7940626e1b8

И снова смотрю изменения файла /src/Profile.cpp для этого же коммита:
commit 9ea9d62785193ec06a8f37090dd6e7940626e1b8 (HEAD)
Author: Jekyll Wu <adaptee@gmail.com>
Date:   Mon Oct 10 16:23:22 2011 +0800

    Reimplement the feature of "show/hide the size widget after resising"

    This is a follow up of commit b40a006d which closees BUG 169054.
    It turns out the old code already has most parts of similar logic.
    So remove duplicated logic in the code.

diff --git a/src/Profile.cpp b/src/Profile.cpp
index 06ef51960..d9706d17b 100644
--- a/src/Profile.cpp
+++ b/src/Profile.cpp
@@ -76,7 +76,7 @@ const Profile::PropertyInfo Profile::DefaultPropertyNames[] =
     , { LocalTabTitleFormat , "tabtitle" , 0 , QVariant::String }
     , { RemoteTabTitleFormat , "RemoteTabTitleFormat" , GENERAL_GROUP , QVariant::String }
     , { ShowMenuBar , "ShowMenuBar" , GENERAL_GROUP , QVariant::Bool }
-    , { ShowSizeWidget , "ShowSizeWidget" , GENERAL_GROUP , QVariant::Bool }
+    , { ShowTerminalSizeHint , "ShowTerminalSizeHint" , GENERAL_GROUP , QVariant::Bool }
     , { SaveGeometryOnExit , "SaveGeometryOnExit" , GENERAL_GROUP , QVariant::Bool }
     , { TabBarMode , "TabBarMode" , GENERAL_GROUP , QVariant::Int }
     , { TabBarPosition , "TabBarPosition" , GENERAL_GROUP , QVariant::Int }
@@ -161,7 +161,7 @@ FallbackProfile::FallbackProfile()
     setProperty(TabBarPosition,TabBarBottom);
     setProperty(NewTabBehavior,PutNewTabAtTheEnd);
     setProperty(ShowMenuBar,true);
-    setProperty(ShowSizeWidget,true);
+    setProperty(ShowTerminalSizeHint,true);
     setProperty(SaveGeometryOnExit,true);
     setProperty(StartInCurrentSessionDir,true);
     setProperty(ShowNewAndCloseTabButtons,false);

И эти изменения совершенно другие. Хотя хеш и описание коммита - те же самые. Как так то? Какие изменения на самом деле были то?

 ,

Xintrea
()

Почему в константном методе невозможно вернуть указатель?

Имеется следующий старенький код, в котором необходимо метод getTableData() сделать константным:

class TreeItem
{
 public:

    // Взятие ссылки на данные конечных записей
    RecordTableData *getTableData(void) const;
 
 private:
     RecordTableData recordsTable;
}

...

RecordTableData *TreeItem::getTableData(void) const
{
  return &recordsTable;
}

Насколько я понимаю, модификатор метода const должен следить за тем, чтобы в методе не происходило изменения объекта класса. И никакого изменения не происходит: берется адрес мембера и возвращается как указатель. Все. Что там будет происходить с переданными данными - будут они меняться по указателю, не будут - это не забота метода getTableData(). Он данные не изменил, а значит метод константный.

Но компилятор почему-то показывает ошибку:
TreeItem.cpp:632:10: error: binding reference of type 'RecordTableData' to value of type 'const RecordTableData' drops 'const' qualifier

Вопрос: как заставить компилироваться этот код, в котором метод должен быть помечен как константный? Если модификатор const убрать, то эта ошибка исчезает. Но мне нужно, чтобы данный метод был константный, потому что он используется в другом константном методе.

 , ,

Xintrea
()

Не пойму, заблокирован ли мой сайт Роскомнадзором

На днях, 6 дек. 2024  г. Роскомнадзор прислал требование на блокировку информации, размещенную на странице сайта:

https://webhamster.ru/mytetrashare/index/mtb0/1705912840ptzochzjmi

После получения абузы, провайдер мне в течении суток потушил виртуалку с сайтом. Сегодня сайт снова был включен, информация удалена с сайта.

Проблема в том, что браузеры и Firefox и Chromium теперь не могут показать сайт напрямую без VPN. Показывают ошибку: PR_CONNECT_RESET_ERROR или ERR_CONNECTION_RESET соответственно. Куки удалял, даже Firefox обновил, толку никакого.

Сертификат на сайте действителен до January 30, 2025.

Пинги до сайта проходят.

Полез искать свой сайт на https://eais.rkn.gov.ru . По строкам поиска webhamster.ru и https://webhamster.ru ничего не находится. Зато по полному вышеприведенному URL-у показывается такая информация:

Номер и дата основания для внесения в реестр: 2024-02-27-3849-СОБ от 04.03.2024
Орган, принявший решение о внесении в реестр: Роскомнадзор
Статус сайта: доступ ограничивается к странице


Как-то это странно: дата внесения в реестр 04.03.2024, а требование мне приходит 06.12.2024.  Сайт волшебным образом работал все эти месяцы, причем за это время приходило еще несколько штук абуз от Роскомнадзора, их я удалял, никаких проблем не возникало кроме временного простоя сайта.

В общем, я не пойму кто меня заблокировал на каком уровне. У меня нет доступа к сайту с рабочего компа и с мобильника (МТС).

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

 , , ,

Xintrea
()

Ogg-файл с музыкой из SuperTuxKart управляет системной громкостью?

Я сейчас наткнулся на такую дичь в Debian GNU/Linux 11 (LXDE, pulseaudio 14.2-2).

Качаю архив с игрой: https://sourceforge.net/projects/supertuxkart/files/SuperTuxKart/0.4/supertux...

Вытаскиваю из него файл: oggs/kart_grand_prix.ogg

Системная громкость стоит на ~50%. Запускаю файл на проигрывание в mpv. После 33-й секунды системная громкость вырубается в 0. То же самое происходит и где-то на 43-й секунде, если ее снова поднять. Что за дичь? Проверил несколько раз - реально, громкость в системе вырубается.

Думал, может какая-то проблема с mpv. Запустил в audacious. И наблюдаю то же самое!

Единственное что еще заметил - если исходная системная громкость небольшая - 10-20%, то она изменяться не будет. А если 50-80%, то вырубится в ноль.

Да как такое может быть? Как звук может управлять системной громкостью?



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

 , , , ,

Xintrea
()

Предсказатель переходов на Эльбрусе (v7)

Появились материалы доклада на форуме Встраиваемые системы реального времени 2024. (Было видео докладчика из МЦСТ, но утонуло в грубинах Telegram, найти не могу).

https://files.kpda.ru/upload/iblock/310/f2tgak1k9clukvwr0peykst9oh01vcyj.pdf

Так вот, смотрим 13-ю страницу. В 7-й версии архитектуры появился предсказатель переходов. Но как-то он вяленько добавляет производительности (около ~5%). Вопрос - почему?

Мои варианты:

1. На нативном коде предсказатель переходов много не прибавит, потому что и без него все оптимизировано, и FDO/PGO (Profile Guided Optimizations) дает свои плоды.

2. Этот предсказатель впихнули чтобы разогнать интерпретируемые/jit языки, а на нативном коде от него будет толку немного.

3. Это первая итерация предсказателя, странно было бы ожидать хороших результатов. Главное, что эффект от присутствия предсказателя на лицо, в следующих итерациях его надо развивать.

Ваши варианты.

 ,

Xintrea
()

Странная ошибка при создании функции в PostgreSQL

Имеется следующий короткий код на Python. В основе кода используется библиотека psycopg2. Весь код работает в одной транзакции.

Что делает код? Он должен просто создать функцию с именем update_change_time_column(). После создания, функция, естественно, существует одна на всю схему.

# Рекомендательная блокировка на момент создания функции
self.exec( "SELECT pg_advisory_lock(12345);" )

# Проверка что функция уже есть в БД
resultCursor = self.exec( """SELECT EXISTS (
                          SELECT 1
                          FROM information_schema.routines
                          WHERE routine_name = 'update_change_time_column'
                            AND routine_schema = current_schema()
                          );""" )
isFunctionExists = resultCursor.fetchone()[0]

# Если функции нет, она создается
if not isFunctionExists:
    self.exec( """
               CREATE OR REPLACE FUNCTION update_change_time_column()
               RETURNS TRIGGER AS $$
               BEGIN
                 IF current_setting('custom.disable_change_time_trigger', true) IS NOT NULL THEN
                   RETURN NEW;
                 END IF;

                 NEW.change_time = now();
                 RETURN NEW;
               END;
               $$ language 'plpgsql';
               """ )

# Рекомендательная блокировка снимается
self.exec( "SELECT pg_advisory_unlock(12345);" )

Важно: внешняя система может запустить данный код в параллель. Примерно 10 одинаковых копий этого кода работает одновременно. Не спрашивайте почему, это не моя разработка.

И при работе иногда возникает ошибка:
Ошибка при выполнении SQL-запроса
CREATE OR REPLACE FUNCTION update_change_time_column()
RETURNS TRIGGER AS $$
BEGIN
  IF current_setting('custom.disable_change_time_trigger', true) IS NOT NULL THEN
    RETURN NEW;
  END IF;

  NEW.change_time = now();
  RETURN NEW;
END;

ОШИБКА:  повторяющееся значение ключа нарушает ограничение уникальности "pg_proc_proname_args_nsp_index"

DETAIL:  Ключ "(proname, proargtypes, pronamespace)=(update_change_time_column, , 2200)" уже существует.

Вопрос: почему возникает такая ошибка?

Вроде как предприняты меры по блокировке на время создания функции. Функция создается только в случае, если ее нет. Все обернуто в транзакцию. Что еще надо учитывать чтобы ошибки не возникало?

 , , , транзакция,

Xintrea
()

Как сделать INSERT в таблицу, у которой есть RULE?

Имеется таблица calc, для которой написано правило:

CREATE RULE rule_insert_calc AS
ON INSERT TO calc 
DO  SELECT pg_notify('notify_insert_calc'::text, (new.id)::text) AS pg_notify;
В таблице, как видно из этого кода, есть поле id.

Теперь надо сделать команду INSERT так, чтобы если значение id уже есть в таблице, то запись не добавлялась.

Интернет советует писать так:
INSERT INTO calc (...) VALUES (...) ON CONFLICT (id) DO NOTHING;
Однако такой SQL-запрос вызывает ошибку:
INSERT c предложением ON CONFLICT нельзя использовать с таблицей, для которой заданы правила INSERT или UPDATE


Вопрос: как добавить данные в таблицу с RULE так, чтобы не добавлялись записи с уже существующими id?

 , ,

Xintrea
()

Создание пакета moc через checkinstall -D завершается ошибкой

Собрал я себе moc (mocp) из исходников:

http://moc.daper.net/download

И хочу его контролируемо установить в системе. Но при запуске команды checkinstall -D появляется ошибка:

2.6-alpha3" is not a
*** Warning: debian policy compliant one. Please specify an alternate one

Я пробовал задать в качестве версии «2.6.0~alpha3», но все равно появляется та же самая ошибка.

Вопрос: как побороть эту ошибку?

 , ,

Xintrea
()

Как заставить VSCode собирать Си-проект через Makefile?

Имеется готовый проект на языке Си. Для сборки в нем используется Makefile, который лежит в корне проекта.

Находясь в корне проекта я запускаю VSCode:

code .

Далее создаю каталог .vscode, в нем создаю файл tasks.json следующего содержания:
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build",
            "type": "shell",
            "command": "make",
            "group": "build",
            "problemMatcher": []
        }
    ]
}

По идее, теперь при нажатии Ctrl+Shift+B должна происходить компиляция проекта.

Но ничего не происходит. Где в меню находится пункт Build или нечто подобное - я тоже не нашел.

Вопрос: как в VSCode запустить компиляцию проекта, который собирается командой make?

 , , , ,

Xintrea
()

Не могу прочитать JSON из командной строки в Python

Написал вот такой примитивный скрипт, который берет строку со стандартного входа и пытается сделать из нее JSON-объект:

#!/usr/bin/python3

import sys
import json

jsonData = sys.argv[1]

print("Получена JSON строка: ", jsonData)

try:

    config = json.load( jsonData )

except (Exception) as error:
    print("Некорректный формат JSON")
    sys.exit(1)

Запускаю его так:
./ourScript.py '{ "varName": "varValue" }'

И мне в ответ:
Получена JSON строка:  { "varName": "varValue" }
Некорректный формат JSON

Что тут такого неправильного?

 , ,

Xintrea
()

Подскажите адекватный минимальный GUI браузер с поддержкой JavaScript и CSS

Нужен GUI браузер для запуска на очень древнем 32-х битном железе. Установлен Debian 12 (32bit).

* Firefox - слишком медленен и тяжел.

* Min Браузер (https://minbrowser.org) - оказалось что есть только 64bit сборки.

* Links2 -g - работает хорошо, но в нем нет JavaScript.

Кто что еще реально пользовал на максимально слабом железе?

 , , ,

Xintrea
()

Не могу запустить WiFi на USB-свистке ZyXEL NWD2105 в чистой консоли

Пытаюсь получить WiFi-сеть, использую ZyXEL NWD2105. Сеть надо получить в консоли на очень слабом железе без этих ваших NetworkManager и WiCd, чтобы в памяти ничего лишнего не болталось и процессорное время не выжиралось (Intel Celeron M processor 630MHz, RAM 512Mb).

Вот какие действия я совершаю:

> # Что увидело ядро
> dmesg | grep -i phy
[   34.915284] ieee80211 phy0: rt2x00_set_rt: Info - RT chipset 3070, rev 0201 detected
[   34.945194] ieee80211 phy0: rt2x00_set_rf: Info - RF chipset 0005 detected
[   34.945612] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'


> # Что на шине USB
> lsusb | grep -i wireless
Bus 001 Device 002: ID 0586:341e ZyXEL Communications Corp. NWD2105 802.11bgn Wireless Adapter [Ralink RT3070]


> # Заблокировано ли устройство
> rfkill list
0: eeepc-wlan: Wireless LAN
        Soft blocked: yes
        Hard blocked: no
1: phy0: Wireless LAN
        Soft blocked: yes
        Hard blocked: no

        
> # Разблокировка устройства
> rfkill unblock 1
> rfkill list
0: eeepc-wlan: Wireless LAN
        Soft blocked: yes
        Hard blocked: no
1: phy0: Wireless LAN
        Soft blocked: no
        Hard blocked: no

        
> # Состояние линка wlan0
> ip link show wlan0
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,DYNAMIC,UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
    link/ether fc:f5:28:fb:f8:a6 brd ff:ff:ff:ff:ff:ff

    
> # Поднятие интерфейса wlan0 (ошибок нет, интерфейс не поднимается)
> ip link set wlan0 up
> ip link show wlan0
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,DYNAMIC,UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
    link/ether fc:f5:28:fb:f8:a6 brd ff:ff:ff:ff:ff:ff

    
> # Вывод информации о WiFi устройствах
> iw dev
phy#0
        Interface wlan0
                ifindex 3
                wdev 0x1
                addr fc:f5:28:fb:f8:a6
                type managed
                txpower 20.00 dBm


> # Просмотр списка WiFi сетей
> iw wlan0 scan | grep SSID
        SSID: RT-GPON-07B9
        SSID: RT-GPON-6E8F
        SSID: Pipetka
        SSID: TP-Link_14B3
        SSID: Borsh
        SSID: RT-GPON-2180
        SSID: TP-Link_B140
        SSID: MikroTik-Xi
        SSID: Cher
        SSID: KV91
        SSID: 
        SSID: tanushenok
        SSID: 249

        
> # Установка параметров поключения к WiFi сети (выполняется без ошибок)
> iwconfig wlan0 essid MikroTik-Xi key s:ТутМойПароль


> # Снова попытка поднять интерфейс (выполняется без ошибок, интерфейс не поднимается)
> ip link set wlan0 down
> ip link set wlan0 up


> # Состояние линка
> ip link show wlan0
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,DYNAMIC,UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
    link/ether fc:f5:28:fb:f8:a6 brd ff:ff:ff:ff:ff:ff

    
> # Состояние TCP/IP
> ip addr show wlan0
3: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,DYNAMIC,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether fc:f5:28:fb:f8:a6 brd ff:ff:ff:ff:ff:ff

То есть, устройство работает с радиоканалом, видит WiFi сети, но подключиться не может. Почему-то не поднимается сетевой интерфейс.

Если что, то соединение предполагается по DHCP. Содержимое /etc/network/interfaces следующее:
auto lo
iface lo inet loopback

allow-hotplug ens3
iface ens3 inet dhcp

allow-hotplug wlan0
iface wlan inet dhcp

Попытка подключиться через dhclient выглядит так:
> dhclient -v wlan0
Internet Systems Consortium DHCP Client 4.4.3-P1
Copyright 2004-2022 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/wlan0/fc:f5:28:fb:f8:a6
Sending on   LPF/wlan0/fc:f5:28:fb:f8:a6
Sending on   Socket/fallback
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 11
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 11
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 17
DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 15
No DHCPOFFERS received.
No working leases in persistent database - sleeping.

Видимо, соединяться по DHCP не имеет смысла, пока status DOWN. Но как сделать status UP я не пойму.

Еще момент: в компьютере есть набортное WiFi устройство ath5k, которое раньше хотя бы определялось ядром, но видимо когда был всунут USB-донгл, ядро его по какой-то причине видеть перестало. Я с этим устройством повозился, но бросил, потому что в Интернетах под Linux ему никто ума дать не смог (в Windows, естественно, работает). Виделось оно вот так:
[  262.434122] ath5k 0000:01:00.0: enabling device (0000 -> 0002)
[  262.434540] ath5k 0000:01:00.0: registered as 'phy0'
[  262.956818] ath: EEPROM regdomain: 0x60
[  262.956837] ath: EEPROM indicates we should expect a direct regpair map
[  262.956847] ath: Country alpha2 being used: 00
[  262.956853] ath: Regpair used: 0x60
[  262.956948] ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
[  263.026299] ath5k: phy0: Atheros AR2425 chip found (MAC: 0xe2, PHY: 0x70)

А теперь этих строк в загрузке ядра не видно, хотя никаких специальных действий для его отключения не делал. Я про этот AR2425 говорю для полноты картины.

ЗЫ: Кастую mky.

 , , ,

Xintrea
()

Где найти документацию на формат вывода команды ip addr?

Читаю man ip, читаю man ip-address, читаю ip addr help.

Нигде не написано, какие конкретно данные показывает утилита IP и в каком формате. Вот например:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff

Вначале идет номер интерфейса, нумерация с единицы. Это можно понять.

Затем имя интерфейса.

Затем нечто в угловых скобках «<...>». То ли то ли это текущее состояние интерфейса, то ли это возможные состояния интерфейса, то ли там намешаны и возможные «флаги», и текущие. В общем что это? Где найти описание всех возможных значений, применяемых в угловых скобках?

Далее идет поток каких-то ключевых слов. Есть подозрение, что они организованы в пары (имя значение), но подтверждения этой теории в документации не нашел. И даже если это ключ-значение, то что они значат? Возможное (настроенное) состояние? Текущее состояние? Все вперемешку? Где официально найти что значат сами параметры, их описание и возможные значения (mtu, qdisc, state, group, qlen, может еще что)?

Вот, например, имеются строки:
"<LOOPBACK,UP,LOWER_UP> ... state UNKNOWN"
или
"<BROADCAST,MULTICAST,UP,LOWER_UP> ... state DOWN

Что сие значит? Интерфейс поднят или нет? В угловых скобках есть и UP и какой-то LOWER_UP, но в state написано UNKNOWN или DOWN. Как это понимать?

 , , ,

Xintrea
()

Что вы думаете об этой фантазии?

Концепции и размышления о новой современной операционной системе:

https://habr.com/ru/articles/840072/

Там автор даже про идейно верный, с его точки зрения, шелл рассказывает. Как по мне, так чувствуется передоз упорином.

 

Xintrea
()

Исчезновение текущего каталога в пути к файлу в Bash-скрипте

Пытаюсь перевести библиотеку звуковых файлов в WAV-формат. Для этого написал простой скрипт:

#!/bin/bash
     
find \( -name \*.mp3 \
     -or -name \*.MP3 \
     -or -name \*.Mp3 \
     -or -name \*.ogg \
     \) -print0 \
     | while IFS= read -r -d '' file; 
do
    fileWithoutExt="${file%.*}"
    command="ffmpeg -loglevel quiet -i \"${file}\" -y -ar 44100 \"${fileWithoutExt}.wav\""
    echo "Команда: ${command}"
done

Этот скрипт выдает следующую последовательность команд, и эти команды правильные:
Команда: ffmpeg -loglevel quiet -i "./Last love jam.mp3" -y -ar 44100 "./Last love jam.wav"
Команда: ffmpeg -loglevel quiet -i "./WindJam/Minus 4.mp3" -y -ar 44100 "./WindJam/Minus 4.wav"
Команда: ffmpeg -loglevel quiet -i "./WindJam/Minus 3.mp3" -y -ar 44100 "./WindJam/Minus 3.wav"
Команда: ffmpeg -loglevel quiet -i "./WindJam/Minus 2.mp3" -y -ar 44100 "./WindJam/Minus 2.wav"
Команда: ffmpeg -loglevel quiet -i "./WindJam/Minus 1.mp3" -y -ar 44100 "./WindJam/Minus 1.wav"
Команда: ffmpeg -loglevel quiet -i "./Thrash-electronics JAM.mp3" -y -ar 44100 "./Thrash-electronics JAM.wav"
Команда: ffmpeg -loglevel quiet -i "./Jingle Bells - Backing Track.mp3" -y -ar 44100 "./Jingle Bells - Backing Track.wav"
Команда: ffmpeg -loglevel quiet -i "./Road  Jam minus2.mp3" -y -ar 44100 "./Road  Jam minus2.wav"
Команда: ffmpeg -loglevel quiet -i "./Chamba Jam/1.ogg" -y -ar 44100 "./Chamba Jam/1.wav"
Команда: ffmpeg -loglevel quiet -i "./Chamba Jam/5.ogg" -y -ar 44100 "./Chamba Jam/5.wav"
...

Осталось дело за малым: выполнить эти команды. Добавляю в конец цикла строку:
eval "${command}"

И наблюдаю такую дичь:
Команда: ffmpeg -loglevel quiet -i "./Last love jam.mp3" -y -ar 44100 "./Last love jam.wav"
Команда: ffmpeg -loglevel quiet -i "WindJam/Minus 4.mp3" -y -ar 44100 "WindJam/Minus 4.wav"
Команда: ffmpeg -loglevel quiet -i "/WindJam/Minus 3.mp3" -y -ar 44100 "/WindJam/Minus 3.wav"
Команда: ffmpeg -loglevel quiet -i "./WindJam/Minus 2.mp3" -y -ar 44100 "./WindJam/Minus 2.wav"
Команда: ffmpeg -loglevel quiet -i "/WindJam/Minus 1.mp3" -y -ar 44100 "/WindJam/Minus 1.wav"
Команда: ffmpeg -loglevel quiet -i "./Thrash-electronics JAM.mp3" -y -ar 44100 "./Thrash-electronics JAM.wav"
Команда: ffmpeg -loglevel quiet -i "/Jingle Bells - Backing Track.mp3" -y -ar 44100 "/Jingle Bells - Backing Track.wav"
Команда: ffmpeg -loglevel quiet -i "./Road  Jam minus2.mp3" -y -ar 44100 "./Road  Jam minus2.wav"
Команда: ffmpeg -loglevel quiet -i "/Chamba Jam/1.ogg" -y -ar 44100 "/Chamba Jam/1.wav"
Команда: ffmpeg -loglevel quiet -i "./Chamba Jam/5.ogg" -y -ar 44100 "./Chamba Jam/5.wav"
...

Тут видно, что по неизвестным причинам в командных строках перед именем файла, вместо ожидаемых символов "./", могут быть следующие варианты:

- "./"
- «/»
- «»

Соответственно, обрабатываются не только лишь все файлы.

Я пробовал вместо eval и такие варианты для выполнения сконструированной команды:
"${command}"
и
${command}

Но тогда вообще другая дичь происходит: в первом варианте лезут ошибки (запускал с set -x):
Команда: ffmpeg -loglevel quiet -i "./Last love jam.mp3" -y -ar 44100 "./Last love jam.wav"
+ 'ffmpeg -loglevel quiet -i "./Last love jam.mp3" -y -ar 44100 "./Last love jam.wav"'
./soundConvert05.sh: строка 22: ffmpeg -loglevel quiet -i "./Last love jam.mp3" -y -ar 44100 "./Last love jam.wav": Нет такого файла или каталога

А во втором варианте команда вроде как выполняется, никакой ошибки не показывается, но WAV-файла не появляется:
Команда: ffmpeg -loglevel quiet -i "./Last love jam.mp3" -y -ar 44100 "./Last love jam.wav"
+ ffmpeg -loglevel quiet -i '"./Last' love 'jam.mp3"' -y -ar 44100 '"./Last' love 'jam.wav"'

Хотя опять же, если ручками выделить команду и выполнить ее в консоли, она выполнится правильно и WAV-файл будет сгенерирован.

Вопрос: как в этих ваших линуксах просто выполнить сконструированную команду, которая лежит в переменной?

 , , ,

Xintrea
()

Почему не доступен файл /sys/bus/usb/drivers/usb/bind (unbind) ?

Мне нужно временно включить/выключить USB-устройство.
Я пытаюсь воспользоваться вот этим решением:

https://superuser.com/questions/1707773/how-to-turn-usb-connected-device-on-a...

Однако файлы /sys/bus/usb/drivers/usb/bind и unbind невозможно использовать, хотя они есть и запись в них разрешена. Вот пример:

root@comp:~# ls -la /sys/bus/usb/drivers/usb/bind
--w------- 1 root root 4096 авг 22 10:17 /sys/bus/usb/drivers/usb/bind

root@comp:~# echo '3-13' |tee /sys/bus/usb/drivers/usb/bind
3-13
tee: /sys/bus/usb/drivers/usb/bind: Нет такого устройства

Вопрос: почему так? Что блокирует возможность записи в эти файлы?


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

 , ,

Xintrea
()

Чем перевести документ в направлении EN-RU на 150 000 символов?

Имеется автосгенерированный текст на 150 000 символов (~25 000 строк).

Его нужно перевести в направлении EN-RU. Google Translate ограничен 5 000 символов. Yandex Translate вроде дает 10 000 символов, но это тоже мало.

Вопрос: каким методом можно бесплатно без СМС автоматически перевести текст такого объема?

 , ,

Xintrea
()

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