LINUX.ORG.RU

Сообщения hippi90

 

Бага или фича? Flex-контейнеры и печать

Столкнулся с неожиданным поведением flex при печати html и пытаюсь понять, это бага или фича. Дело в том, что поведение одинаковое и для Chrome и для Firefox.

Дано: html с такой структурой

<body>
    <div style="display: flex; flex-direction: column;">
        <...>
        <div style="display: flex;">Lorem ipsum <...> </div>
        <...>
    </div>
</body>
Т.е. в body находится div c display: flex, внутри него много-много div так же с display: flex, достаточно чтобы не влезло на одну страницу A4 (лучше 3-4).

Отправляем html на печать и видим, что при переходе на другую страницу строка разрезается по середине. Выглядит вот так https://i.imgur.com/zZuwZwc.png

Если внешний div не flex или его вообще нет, или внутренние div не flex, то всё нормально.

Может кто сталкивался с похожим или знает от чего так?

 

hippi90 ()

Настройка bridge с NetworkManager

Опять в этой убунте перетрясли управление сетями, то у них netplan, то systemd-network, теперь по умолчанию предлагают использовать NetworkManager. Ок, попробуем.

Дано: Хост-машина с одним сетевым интерфейсом, в который воткнут кабель до роутера, контейнеры на хосте, которые надо объединить в одну сеть с хостом.

Ок, создаем bridge:

nmcli con add ifname lxcbr0 type bridge con-name lxcbr0
nmcli con add type bridge-slave ifname enp0s31f6 master lxcbr0
nmcli con modify lxcbr0 bridge.stp no

Перезапускаем NetworkManager:

sudo systemctl restart NetworkManager
Всё вроде работает, контейнеры видны в сети, внешняя сеть доступна. Перезагружаем машину, внешняя сеть не работает, опять перезапускаем NetworkManager, всё работает.

После перезагрузки, но до рестарта NM состояние подключения такое:

$ nmcli d show lxcbr0    
GENERAL.DEVICE:                         lxcbr0
GENERAL.TYPE:                           bridge
GENERAL.HWADDR:                         00:16:3E:00:00:00
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (подключено)
GENERAL.CONNECTION:                     lxcbr0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]:                         10.0.3.1/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 10.0.3.0/24, nh = 0.0.0.0, mt = 0
IP4.DNS[1]:                             192.168.1.1
После перезапуска NM:
$ nmcli d show lxcbr0 
GENERAL.DEVICE:                         lxcbr0
GENERAL.TYPE:                           bridge
GENERAL.HWADDR:                         00:16:3E:00:00:00
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (подключено)
GENERAL.CONNECTION:                     lxcbr0
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]:                         192.168.1.156/24
IP4.ADDRESS[2]:                         10.0.3.1/24
IP4.GATEWAY:                            192.168.1.1
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 192.168.1.1, mt = 425
IP4.ROUTE[2]:                           dst = 10.0.3.0/24, nh = 0.0.0.0, mt = 0
IP4.ROUTE[3]:                           dst = 192.168.1.0/24, nh = 0.0.0.0, mt = 425
IP4.ROUTE[4]:                           dst = 10.0.3.0/24, nh = 0.0.0.0, mt = 425
IP4.DNS[1]:                             192.168.1.1

Т.е., после рестарта NM lxcbr0 подхватывает второй IP из нужной сети, контейнеры получают тоже ip вида 192.168.х.х.

Собственно, вопрос, какого лешего NM не хватает при старте системы, чтобы нормально поднять соединение?

 , , ,

hippi90 ()

Хранение состояния приложения

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

Будет хорошо, если ткнете в пример кода, где можно посмотреть.

 

hippi90 ()

Pulseaudio падает с сегфолтом при добавлении наушников

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

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

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

Запускаем ручками пульсу, запускается. Вставляем наушники - сегфолт, в логе следующее

pulseaudio -v
I: [pulseaudio] (alsa-lib)utils.c: could not open configuration file /usr/share/alsa/ucm/Philips Philips SHG7980 at usb-0000:00:1a.0-1.3, full speed/Philips Philips SHG7980 at usb-0000:00:1a.0-1.3, full speed.conf
I: [pulseaudio] (alsa-lib)parser.c: error: could not parse configuration for card Philips Philips SHG7980 at usb-0000:00:1a.0-1.3, full speed
I: [pulseaudio] (alsa-lib)utils.c: could not open configuration file /usr/share/alsa/ucm/Philips SHG7980/Philips SHG7980.conf
I: [pulseaudio] (alsa-lib)parser.c: error: could not parse configuration for card Philips SHG7980
I: [pulseaudio] (alsa-lib)main.c: error: failed to import Philips SHG7980 use case configuration -2
I: [pulseaudio] alsa-ucm.c: UCM not available for card Philips SHG7980
I: [pulseaudio] alsa-util.c: Failed to set hardware parameters on plug:hw:1: Недопустимый аргумент
I: [pulseaudio] (alsa-lib)control.c: Invalid CTL front:1
I: [pulseaudio] alsa-util.c: Unable to attach to mixer front:1: Нет такого файла или каталога
I: [pulseaudio] alsa-util.c: Successfully attached to mixer 'hw:1'
I: [pulseaudio] (alsa-lib)control.c: Invalid CTL iec958:1
I: [pulseaudio] alsa-util.c: Unable to attach to mixer iec958:1: Нет такого файла или каталога
I: [pulseaudio] alsa-util.c: Successfully attached to mixer 'hw:1'
I: [pulseaudio] alsa-util.c: Failed to set hardware parameters on plug:hw:1: Недопустимый аргумент
I: [pulseaudio] (alsa-lib)control.c: Invalid CTL front:1
I: [pulseaudio] alsa-util.c: Unable to attach to mixer front:1: Нет такого файла или каталога
I: [pulseaudio] alsa-util.c: Successfully attached to mixer 'hw:1'
I: [pulseaudio] (alsa-lib)pcm_hw.c: Invalid PCM state for chmap_get: OPEN
I: [pulseaudio] (alsa-lib)pcm_hw.c: Invalid PCM state for chmap_get: OPEN
I: [pulseaudio] (alsa-lib)pcm_hw.c: Invalid PCM state for chmap_get: OPEN
I: [pulseaudio] (alsa-lib)pcm_params.c: Slave PCM not usable
I: [pulseaudio] (alsa-lib)pcm_hw.c: Invalid PCM state for chmap_get: OPEN
I: [pulseaudio] (alsa-lib)pcm_params.c: Slave PCM not usable
I: [pulseaudio] alsa-util.c: Failed to set hardware parameters on plug:surround21:1: Недопустимый аргумент
I: [pulseaudio] alsa-util.c: Failed to set hardware parameters on plug:surround40:1: Недопустимый аргумент
I: [pulseaudio] (alsa-lib)pcm_hw.c: Invalid PCM state for chmap_get: OPEN
I: [pulseaudio] (alsa-lib)pcm_hw.c: Invalid PCM state for chmap_get: OPEN
I: [pulseaudio] (alsa-lib)pcm_hw.c: Invalid PCM state for chmap_get: OPEN
I: [pulseaudio] (alsa-lib)pcm_params.c: Slave PCM not usable
I: [pulseaudio] (alsa-lib)pcm_hw.c: Invalid PCM state for chmap_get: OPEN
I: [pulseaudio] (alsa-lib)pcm_params.c: Slave PCM not usable
I: [pulseaudio] alsa-util.c: Failed to set hardware parameters on plug:surround41:1: Недопустимый аргумент
I: [pulseaudio] (alsa-lib)pcm_hw.c: Invalid PCM state for chmap_get: OPEN
I: [pulseaudio] (alsa-lib)pcm_hw.c: Invalid PCM state for chmap_get: OPEN
I: [pulseaudio] (alsa-lib)pcm_hw.c: Invalid PCM state for chmap_get: OPEN
I: [pulseaudio] (alsa-lib)pcm_params.c: Slave PCM not usable
I: [pulseaudio] (alsa-lib)pcm_hw.c: Invalid PCM state for chmap_get: OPEN
I: [pulseaudio] (alsa-lib)pcm_params.c: Slave PCM not usable
I: [pulseaudio] alsa-util.c: Failed to set hardware parameters on plug:surround50:1: Недопустимый аргумент
I: [pulseaudio] (alsa-lib)pcm_params.c: Slave PCM not usable
I: [pulseaudio] (alsa-lib)pcm_params.c: Slave PCM not usable
I: [pulseaudio] alsa-util.c: Failed to set hardware parameters on plug:surround51:1: Недопустимый аргумент
I: [pulseaudio] (alsa-lib)pcm_params.c: Slave PCM not usable
I: [pulseaudio] (alsa-lib)pcm_params.c: Slave PCM not usable
I: [pulseaudio] alsa-util.c: Failed to set hardware parameters on plug:surround71:1: Недопустимый аргумент
I: [pulseaudio] (alsa-lib)control.c: Invalid CTL iec958:1
I: [pulseaudio] alsa-util.c: Unable to attach to mixer iec958:1: Нет такого файла или каталога
I: [pulseaudio] alsa-util.c: Successfully attached to mixer 'hw:1'
I: [pulseaudio] (alsa-lib)pcm_a52.c: Cannot set slave rate 48000
Ошибка сегментирования (стек памяти сброшен на диск)
sudo dmesg | tail
[ 8745.336134] usb 2-1.2: new full-speed USB device number 7 using ehci-pci
[ 8745.649370] usb 2-1.2: New USB device found, idVendor=0471, idProduct=2118, bcdDevice= 3.11
[ 8745.649374] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 8745.649377] usb 2-1.2: Product: Philips SHG7980
[ 8745.649379] usb 2-1.2: Manufacturer: Philips
[ 8745.762934] hid-generic 0003:0471:2118.0009: No inputs registered, leaving
[ 8745.763091] hid-generic 0003:0471:2118.0009: hiddev0,hidraw2: USB HID v1.00 Device [Philips Philips SHG7980] on usb-0000:00:1d.0-1.2/input3

 

hippi90 ()

Не подхватывается второй монитор на intel

Дано: комп на интеловской интеграшке; основной монитор, подключенный через DVI, телевизор, подключенный по HDMI; Debian buster.

Собственно, проблема в том, что комп видит только один главный монитор, но не видит телевизор. xrandr говорит, что HDMI-2 disconnected.

С телевизором проблем нет, если кабель воткнуть в ноутбук, то он сразу подхватывает телевизор. Если отключить основной монитор и оставить только телевизор, то комп его прекрасно видит и всё работает. Но и телевизор и монитор сразу не хочет определять.

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

lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04)

xserver-xorg-video-intel/testing,now 2:2.99.917+git20171229-1 amd64

 ,

hippi90 ()

Oracle DB крайне медленная передача данных по сети

Столкнулся с очень странной проблемой, раньше такого не встречал.

Дано:

Java-приложение запущенное локально, Oracle DB на удаленном сервере. Скорость соединения между ними - 2.5MB/s.

В приложении выполняем очень простой запрос вида «select id, name from table_name», запрос возвращает ~60K строк, общий размер данных - 1,5 Мб, время выполнения - 80 сек. Профайлер говорит, что всё это время приложение висит в методе oracle.net.Packet.receive.

Ок, открываем SQL Developer, выполняем тот же самый запрос - 0,6 сек/5000 строк, т.е. примерно 7-8 секунд на всю выборку. Повторяем то же самое в DBeaver - 7 сек/5000 строк или 80 сек, если убрать ограничение на размер выборки.

Какая-то нездоровая фигня получается. Берем в руки tcpdump и смотрим, как передаются данные от базы к нам. В случае Java-приложения и DBeaver данные передаются в пакетах размером ~200 байт, SQLDeveloper получает данные в пакетах ~2000 байт.

Ладно, лезем в официальную доку https://docs.oracle.com/cd/E18283_01/network.112/e10836/performance.htm#i1006332, находим что нам надо поднять размер SDU/TDU. На стороне базы я не могу ничего менять, таково требование заказчика. Пробуем добавить эти параметры на стороне клиента, получается вот такой URL:

jdbc:oracle:thin:@(DESCRIPTION=(SDU=11280)(TDU=11280)(ADDRESS=(PROTOCOL=tcp)(HOST=<host>)(PORT=1521)(SEND_BUF_SIZE=11784)(RECV_BUF_SIZE=11784))(CONNECT_DATA=(SERVICE_NAME=<db>)))
И ничего не происходит, время то же, размер пакетов такой же. WTF? База игнорит передаваемые ей параметры или драйвер ей просто их не передает? Или может я вообще не то пытаюсь поправить и истина где-то в другой бочке вина?

 , ,

hippi90 ()

Не соображу, как SQL запрос составить

Доброго времени суток, ЛОР. Нужна помощь коллективного разума в составлении sql-запроса, так как сам в этом не силён.

Дано две таблицы (в упрощенном виде):

Users:
--------------------------------------------------
| Login |      Email      | A half-dozen columns |
--------------------------------------------------
| vasya | vasya@vasya.com | Some other data      |
--------------------------------------------------

TestResults:
----------------------------------------------------------
|    TestName    | Login | Points | A half-dozen columns |
----------------------------------------------------------
| Some cool test | vasya |   146  | Some other data      |
----------------------------------------------------------

Результатом выполнения запроса должна быть таблица следующего вида:

-------------------------------------------------------------------------
| Login | TestName1 Points | TestName2 Points | TestName3 Points | etc. |
-------------------------------------------------------------------------
| vasya |        92        |        87        |         56       | etc. |
-------------------------------------------------------------------------

Т.е., для каждого пользователя должна быть одна и только одна строка в которой первый столбец его логин, во втором столбце баллы за первый тест, во третьем - баллы за второй тест и т.д. Количество тестов в таблице TestResults может быть десятки и сотни, запрос делается обычно по двум-трем из них. Структуру таблиц менять нельзя, данные в таком виде приходят от другой системы.

 

hippi90 ()

BetterProgrammer.com Сколько баллов нормально для Junior?

Доброго времени суток всем. Пытаюсь устроиться на вакансию Junior Java Developer, предложили сначала пройти тест на BetterProgrammer.com. И мне вот стало интересно, а сколько баллов нормально для Junior'а? Есть у кого истории успеха/неуспеха?

P.S. Погуглил на эту тему, встречаются иногда вообще странные комменты, когда чуть ли не рандомом рещали задачи и получали 95% за тест.

Перемещено mono из development

 , ,

hippi90 ()

Помогите разобраться со схемой

Есть замечательный прибор - БПРТ-1, надо его подключить к печке. Есть схема подключения - http://i.imgur.com/PXaG0OP.png

В принципе с ней всё понятно, затык вызывают два элемента, обозначенные на схеме Д1 и Д2, насколько я понимаю (а понимаю я хреново, ибо электроника не моя специальность даже не близко), это должны быть тиристоры. В качестве источника использоваться будет ЛАТР с максимальным напряжением 200В и максимальным током 5А.

Вопрос собственно в том, тиристоры ли это, и если да, то какие брать? Номинал, марка, что там еще важно учитывать при этом?

 ,

hippi90 ()

Опознать метод стат. обработки

Доброго времени суток! Нужна помощь в опознании метода стат обработки, чтобы потом можно было найти его литературное описание.

Исходные данные - массив результатов измерений Х. Это массив сортируется и разбивается на интервалы ΔХ. Размер интервала H = ΔХmax - ΔХmin подбирается вручную. Затем для каждого интервала ΔХ находится частота вхождения конкретного значения Хj в этот интервал: ω = sum((Xj)⁰) и строится график зависимости частоты от значения Х на середине интервала: ω(Xj) - 0,5ΔХ.

 , , ,

hippi90 ()

Установка OpenJDK без зависимостей X11

Собственно, сабж. Есть ли вариант установить OpenJDK так, чтобы он не тянул зависимости типа X11 и пр.? Ставлю на VPS из реп, так он тянет за собой X11, GTK, куски гнома и прочую фигню, которая на серваке вообще не уперлась никуда. Беглый гуглеж показал, что это общая проблема и для Debian-based и для RH-based дистрибутивов. В качестве решения предлагают ставить Oracle JDK, но меня этот вариант не очень устраивает.

 ,

hippi90 ()

Как выполнить требования CC-BY-SA 3.0?

Заюзал на сайте несколько изображений, распространяемых под CC-BY-SA 3.0. Так как такая лицензия требует указывать авторство, возникает вопрос, как это сделать, так чтобы не мешало и чтобы условия лицензии выполнялись?

 ,

hippi90 ()

Подскажите хороший готический шрифт с поддержкой кириллицы

Собственно сабж. Обязательное требование — возможность свободного некоммерческого использования.

 

hippi90 ()

Разрезать контур по линиям

Доброго времени суток, ЛОР. Что-то я сижу и туплю с утра, не могу понять как добиться, чего я хочу. Вот то, что есть сейчас:

http://storage1.static.itmages.ru/i/15/0113/h_1421138049_2394163_9971faebe7.png

Надо нижний контур разбить на отдельные линии в точках пересечения вертикальными линиями, чтобы потом получившиеся «прямоугольники» можно было растащить как отдельные объекты. В Inkscape не силен совсем, с вектором общаюсь только при необходимости.

 ,

hippi90 ()

QScrollArea обрезает надписи

Здравствуй, лор. Помоги побороть QScrollArea. Выглядит сей ужас как-то так: http://storage9.static.itmages.ru/i/14/1221/h_1419206232_7463140_047159d91e.png Т.е. надписи, находящиеся в QScrollArea обрезаются по горизонтали. Надо, чтобы все элементы показывались полностью, при этом, при изменении размеров окна эта область не увеличивалась в размерах, а оставалась постоянной.

 

hippi90 ()

Выбор телефона с gps

Здравствуй, коллективный разум! Нужна помощь в выборе телефона. Требования: 1) нужно что-то простое, никаких флагманов, лопат и прочего, хочется недорогого в районе $100; 2)важен работающий GPS, независимо от погоды, положения Юпитера в Сатурне и прочего; 3) В качестве ОС Android, желательно версии 4+. Думал взять какого-нибудь китайца. За такую цену можно найти аппараты с адекватными характеристиками, но почитал отзывы в интернете, практически везде пишут, что у китайских товарищей GPS либо вообще не работает в телефонах, либо заводится с помощью бубна и известной матери, а GPS один из основных критериев выбора. Что можно подобрать по таким требованиям, может есть всё-таки китайцы с работающим GPS, или придется брать «фирму»?

 , , ,

hippi90 ()

Сглаживание графика функции

Доброго времени суток! Имеются в довольно большом количестве данные рентгенофазового анализа, приходят они в виде массивов чисел (2theta - I). Их надо красиво построить в виде графика, чтобы потом было удобно работать. В этих целях предыдущими сотрудниками была установлена программа WinScaler (да, она под Windows). У неё есть полезная функция, которая позволяет сгладить экспериментальную кривую, сделать пики более выделенными, убрать фон (выглядит это так http://storage9.static.itmages.ru/i/14/0609/h_1402313655_4124490_87780f253f.png).

Функция хорошая, но остальная программа выглядит и работается так, словно её писал психопат, обиженный на весь мир, который таким образом решил всем отомстить. Кроме того, обрабатывать вручную весь тот объем данных, который у меня накопился, довольно утомительно.

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

 , ,

hippi90 ()

[любознательности-тред] Чем так плохи callback-функции?

Доброго времени суток! В процессе поглощения умных (и не очень) книг возникло недопонимание, связанное вот с чем: многие авторы неприязненно относятся к обработке событий через вызовы callback-функций. Надо обязательно ткнуть пальцем в какой-нибудь другой тулкит, сказав, что там для обработки событий используются callback'и, поругать разработчиков этого тулкита, а разработчиков сабжа похвалить, потому что они не стали использовать callback'и, а написали свой велосипед, который самый лучший и впереди планеты всей. Встречал подобное в книгах по Qt и Swing.

Погуглив, нашел по теме не так уж и много, единственное, что нашел - это лишний оверхед на вызовы функций (имхо, притянуто за уши, разве такой уж он большой?), и ухудшение читаемости кода, поскольку приходится лазить по всему дереву вызовов, чтобы разобраться в коде. Кто что может рассказать по теме? И какие есть альтернативы callback-функциям, чем они лучше или хуже?

hippi90 ()

[EmbeddingPython] Не импортируется модуль

Доброго всем времени суток! Хочу попробовать встроить в свое приложение возможность выполнения скриптов на Python. Возникла проблема с импортом собственных модулей. Например, есть два файла main.cpp и script.py в одном каталоге.

script.py:

def func:
	print "Hello World"

main.cpp:

#include <Python.h>

int main()
{	
	PyObject *pname, *pmodule, *pfunc;	
	Py_Initialize();
	
	PyRun_SimpleString("import sys"); 
	PyRun_SimpleString("sys.path.append('.')");
	
	pname = PyString_FromString("script");	
	pmodule = PyImport_Import(pname);
	
	if (pmodule) {
		pfunc = PyObject_GetAttrString(pmodule, "func");
		PyObject_CallObject(pfunc, NULL);
	}
	
	Py_Finalize();
	return 0;
}

При выполнении программы функция PyImport_Import() возвращает 0, т.е. модуль не импортируется. Модули самого Python, например sys или os, импортируются нормально. Способ с включением текущего каталога в sys.path подсказал гугл, но он также не помогает.

hippi90 ()

[boost]directory_iterator

Доброго времени суток! Помогите разобраться с boost::filesystem::directory_iterator. Как пробежать в цикле по всем значениям итератора? Пробовал сделать так:

directory_iterator it(p);
directory_iterator end_it();
while (it != end_it) {
	do_something(*it);
	it++;
}
Компилятор указывает на отсутствие у directory_iterator оператора !=, хотя, поискав с помощью CodeSearch примеры использования directory_iterator, я нашел такой код:
    if (boost::filesystem::exists(path)) {
      boost::filesystem::directory_iterator dir_iter(path), end_iter;

      for ( ; dir_iter != end_iter; ++dir_iter) {
        _return.push_back(dir_iter->filename());
      }
    }
Почему у них это работает, а у меня нет?

hippi90 ()

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