LINUX.ORG.RU

Сообщения 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
()

Блокировка частых запросов с одного IP средствами nginx

 , , ,

Делаю блокировку примерно как в пункте 5 вот этой статьи:

https://cloud.vk.com/blog/zaschita-ot-ddos-atak-sredstvami-nginx

Заодно читаю официальную документацию:

https://cloud.vk.com/blog/zaschita-ot-ddos-atak-sredstvami-nginx

И в моем случае конфигурирующие опции прописаны такие:

# Файл /etc/nginx/sites-available/mysite

limit_req_zone $binary_remote_addr zone=ipAddrZone:10m rate=5r/m;
...
server {
    ...
    location /punbb/register.php {
        limit_req zone=ipAddrZone;
    }

Nginx перезагружен.

И ничего эти настройки не блокируют. Я захожу на страницу /punbb/register.php, обновляю ее хоть каждую секунду по 20 раз непрерывно, ответ от сервера всегда нормально приходит.

Вопрос 1: Почему не работает блокировка?

Вопрос 2: Что должно происходить с запросом, когда он по заданным условиям превысил лимит? Он по-умолчанию просто не обрабатывается и выбрасывается? На него выдается ответ с кодом ошибки 503? Он ставится в очередь и будет обработан по истечении периода проверки? Что конкретно?

Xintrea
()

Как установить библиотеку psycopg2 в древней Astra 1.3 (без pip и без интернета) ?

 , , ,

Имеется древний дистриб Astra Linux 1.3 Смоленск

В нем есть Python 3.2 и некоторое количество библиотек.
Но в нем нет pyhon-библиотеки psycopg2.
И нужно эту библиотеку установить, чтобы заработали python3-скрипты, которые работают с PostgreSQL.

Проблема 1 - в том, что в Astra 1.3 нет pip, и я не могу сделать установки из выкачанного заранее whl-файла.

Проблема 2 - попытка сборки psycopg2 из исходников через команду

python3 setup.py build
...приводит к тому, что появляется ошибка на f-строках, так как они появились в Python 3.6, а в системе стоит Python 3.2.

Вопрос: как можно извратиться, и установить psycopg2 в Astra 1.3?

Xintrea
()

Стоит ли покупать гитару у перекупа с МегаМаркета?

 , ,

Linux тут при том, что я с него пишу.

В общем, оказывается, сейчас люди заморачиваются с тем, что покупают вещи на Мегамаркете с большими кешбкеми в виде бонусов Спасибо, которые фиг поймешь где можно потратить и в каком количестве. Но расчет (в моем случае) примерно следующий:

- Покупается вещь за 60000
- На него дается кешбек 34%, то есть 20400
- Вещь выставляется на авито за 60000-20400+2000(навар)=41600
- Нигде, ни на Ozon, ни на Яндекс.Маркет такой цены нет, в лучшем случае 49000-51000

Плюс в том, что в отличие от заказа в онлайн-магазине, вещь можно прийти и посмотреть.

Каковы минусы такой покупки? Какие подводные камни?

Xintrea
()

Подскажите российский аналог GitHub/GitLab без ограничений для открытых проектов

 , , ,

1.

Заглянул сейчас на GitFlic.ru, думал перенести на него проекты с буржуйского GitHub. Смотрю на ограничения, а там размер репо не более 4Gb. А у меня куча реп, и одно из них 4.3Gb.

Так что GitFlic.ru не для меня.


2.

Решил зайти на hub.mos.ru, а там регистрация в департаменте с полным указанием ФИО, сотового телефона и электронной почтой. А если хочешь зайти через Госуслуги, то будут переданы данные:

* Просмотр данных вашего военного билета
* Проведение входа в систему
* Просмотр вашего ИНН
* Просмотр номера вашего мобильного телефона
* Просмотр СНИЛС ребёнка
* Просмотр фамилии, имени, отчества (при наличии) ребёнка
* Просмотр пола ребёнка
* Просмотр вашей фамилии, имени и отчества
* Просмотр ИНН ребенка
* Просмотр вашего места рождения
* Просмотр данных вашего заграничного паспорта
* Просмотр вашего СНИЛС
* Просмотр ваших контактных данных (номер мобильного телефона адрес электронной почты), адресов регистрации и проживания
* Просмотр данных вашего свидетельства о рождении
* Просмотр даты вашего рождения
* Просмотр вашего пола
* Просмотр данных ваших транспортных средств
* Просмотр данных вашего вида на жительство
* Просмотр данных о вашем документе, удостоверяющем личность
* Просмотр списка ваших организаций
* Просмотр даты рождения ребёнка
* Доступ к данным вашего личного кабинета на портале гос. услуг (интерактивные формы)
* Просмотр вашего адреса электронной почты
* Просмотр данных вашего разрешения на временное проживание
* Просмотр данных вашего водительского удостоверения
* Получение сведений о свидетельстве о рождении ребенка

Которые, естественно, будут скопированы и аккуратно сложены туда, где они лежать не должны.

Как-то не адекватно передавать такие данные чтобы сделать удаленный репозитарий.


3.

Подскажите хотя бы один бесплатный российский репозитарий, в котором нет ограничений для Open Source и который не страдает синдромом вахтера.

Xintrea
()

Я стал больше понимать, зачем нужны словари синонимов

 ,

... после того, как увидел информацию о текстовых запросах. Синонимы каких слов и выражений ищут пользователи?

Вот вам свежие данные с synonyms.su:

Последние синонимы пользователей

вот это да, ничосе  [ Дарьядесит ]
теребить стручок    [ Софья ]
вы мне не интересны [ Mary ]
писечка бритая      [ gusorus1 ]
точить шпагу        [ Артём ]
рукотворчество      [ Яна ]
одно дно            [ Жак ]
надрачивать         [ Софья ]
наяривать           [ Софья ]
блаженство          [ Наталья ]
Софья с gusorus1 явно чем-то озабочены. А Жак, как всегда, прав.

Xintrea
()

Да что вы знаете - 2: Разработчик взломал компилятор C++ 28-летней давности, чтобы проект поддерживал исключения

 , , ,

Разработчик Начо Мелладо (Nacho Mellado) рассказал, что он взломал компилятор C++ 28-летней давности (Watcom C++32 версии 11.0 1996 года от Sybase Inc.), чтобы проект поддерживал исключения. Фактически это произошло за два года до того, как исключения стали частью первого стандарта C++.

В 1998 году Мелладо с друзьями выпустили библиотеку The DarkRising Library (TDL) обработки графики и аудио в реальном времени для DOS, в основном для игр и создания проектов типа demoscene. Проект Watcom уже тогда опередил своё время, но поддержки исключений там ещё не было.

Спустя годы Мелладо возобновил работу с библиотекой. Код для обработки в реальном времени в основном писался на ассемблере, но он начал добавлять поддержку C++ для более быстрой интеграции. Однако из-за повсеместной проверки ошибок код стал выглядеть слишком пространным.

Там было множество шаблонов типа «do this or fail gracefully», которые с помощью использования исключений+RAII можно было бы упростить, но при этом дать программе возможность исправить некритическую ошибку. Мелладо написал код с класами для RAII, которые игнорировали ошибки, но его исключения не перехватывались нигде в программе.

Оказалось, что Watcom компилирует try, catch и throw, но сгенерированный код вызывает хуки, которых нет ни в одной библиотеке, поставляемой с компилятором. Поиск по ретрофоруму этого проекта оказался безрезультатным. Судя по всему, команда Sybase готовила поддержку исключений, но тогда разработчики не выпустили её полностью в открытом виде.

Не имея документации, Мелладо фактически работал на ощупь. Итак, он провёл реверс-инжиниринг компилятора, создав множество программ, дизассемблировав сгенерированные двоичные файлы и формулируя гипотезы, пока не объяснил и не понял все двоичные файлы проекта.

Эта доработанная модель компилятора позволила Мелладо кодировать хуки и иметь исключения! С исключениями+RAII приведённый выше код теперь выглядит намного лучше.

Платформа оборачивает всё во внешний try-catch и автоматически обрабатывает ошибки и освобождение ресурсов. Мелладо пояснил, что итоговый код станет более кратким, поскольку класс Image будет включать в себя большую часть базовой простой структуры SLI.

https://habr.com/ru/news/806239/

Xintrea
()

PostgreSQL не хочет слушать порт на второй сети при загрузке. При старте сервиса все OK.

 , , ,

Имеется комп с PostgreSQL.

У него на eth0 несколько подсетей (далее нужна будет подсеть 222):

> ip addr
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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 1c:6f:65:96:54:bc brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.95/24 brd 192.168.1.255 scope global eth0
       valid_lft forever preferred_lft forever
...
    inet 192.168.222.95/24 brd 192.168.222.255 scope global eth0:7
       valid_lft forever preferred_lft forever

Чтобы PostgreSQL слушал порт на 222 подсети, сделана настройка:
Файл: /etc/postgresql/9.6/main/postgresql.conf
listen_addresses = 'localhost,192.168.222.95'

и
Файл: /etc/postgresql/9.6/main/pg_hba.conf
host    all             all              192.168.222.0/24        md5

Если после внесения этих настроек перезапустить сервис postgresql, то все стартует без ошибок, а порт 5432 слушается на IP-шниках 127.0.0.1 и на 192.168.222.95.

Но если перезагрузить компьютер, то порт 5432 на IP 192.168.222.95 не поднимается.

В логах следующие ошибки:
СООБЩЕНИЕ:  не удалось привязаться к сокету IPv6: Невозможно назначить запрошенный адрес
ПОДСКАЗКА:  Возможно порт 5432 занят другим процессом postmaster? Если нет, повторите попытку через несколько секунд.
СООБЩЕНИЕ:  не удалось привязаться к сокету IPv4: Невозможно назначить запрошенный адрес
ПОДСКАЗКА:  Возможно порт 5432 занят другим процессом postmaster? Если нет, повторите попытку через несколько секунд.
ПРЕДУПРЕЖДЕНИЕ:  не удалось создать принимающий сокет для "192.168.222.95"
СООБЩЕНИЕ:  передача вывода в протокол процессу сбора протоколов
ПОДСКАЗКА:  В дальнейшем протоколы будут выводиться в каталог "pg_log".


Вот здесь я нашел возможную причину: говорят что сервис postgresql стартует раньше, чем инитится сеть, поэтому не на локальном IP PostgreSQL не может подняться.

Тогда я проверяю зависимости сервиса postgresql:
# systemctl list-dependencies postgresql
postgresql.service
● ├─postgresql@9.6-main.service
● ├─postgresql@9.6-main.service
● ├─system.slice
● ├─network-online.target
● │ ├─connman-wait-online.service
● │ └─networking.service
● └─sysinit.target
●   ├─dev-hugepages.mount
●   ├─dev-mqueue.mount
●   ├─keyboard-setup.service
...

Видно, что postgresql@9.6-main.service и network-online.target запускаются в параллель, а надо сделать зависимую загрузку.

Поэтому создаю файл /etc/systemd/system/postgresql.service.d/override.conf следующего содержания:
[Unit]
Requires=network-online.target
After=network-online.target

Потом выполняю:
systemctl daemon-reload
systemctl restart postgresql

И смотрю зависимости через list-dependencies, а они не изменились. Перезагружаюсь - то же самое, зависимости все те же, и PostgreSQL не поднимает свой сокет на 192.168.222.95.

Вопрос: где что еще надо крутить?

Xintrea
()

Не могу найти микросхему ST VIPer K41612 и понять есть ли аналог

 , микросхема

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

На стиральной машинке при визуальном осмотре найдена сгоревшая микросхема.

На ней написано:

ST
VIPer
K41612
На микросхеме 8 ног. Рядом с микросхемой есть обозначение IC101. Судя по расположению, микросхема как-то связана с питанием.

Найти даташит не могу, не могу понять что это вообще за микросхема.

Где найти информацию по этой микросхеме? Где купить новую?

Linux тут при том, что я с него пишу.



Перемещено Dimez из linux-hardware

Xintrea
()

Как в Git сделать Tag или Notes в момент коммита, а не после?

 , , ,

Никак не могу понять.

Такое впечатление, что в Git невозможно сделать коммит, который был бы помечен тегом или имел заданную Notes.

Вот например, мне нужно пометить создаваемый в данный момент коммит тегом с номером версии. Или написать Notes с номером версии в момент создания коммита. Чтобы быть уверенным что в этом коммите находится нужная версия ПО.

Получается, что так сделать нельзя? Надо вначале закоммитить изменения, потом выяснить ID этого коммита, а потом отдельной командой создать Tag или Notes? В момент коммита создать Tag или Notes невозможно?

Xintrea
()

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