LINUX.ORG.RU

Сообщения Sahas

 

Калькулятор, который «понимает» экспоненциальную форму записи числа

Всем хорош Gnome Calculator, кроме одного: не понимает он, зараза, запись чисел в экспоненциальной форме 2.3E-3 (вместо этого использует «ущербную» запись 2.3×10⁻³).

Кто-нибудь знает калькулятор (можно и консольный), который умеет работать с таким форматом? Не LO Calc же использовать, в конце концов...

 

Sahas ()

Приму в дар сломанный ноут Samsung

Для целей «списания» приму в дар любой неработающий/сломанный ноутбук Samsung, можно без комплектующих. Питер.

 , ,

Sahas ()

Концепция передачи параметров в виде строки

Есть проект (не важно, на каком языке, но пусть будет C++), в котором есть две так скажем мало связанные между собой части (функции/класса). И одна функция (класс) вызывает другую с передачей туда параметров. И сейчас в качестве интерфейса передачи параметров используется обычная строка, т.е. вызывающая функция генерирует строку вида «Имя_параметра1=значение_параметра1\nИмя_параметра2=значение_параметра2...», передаёт её вызываемой, где происходит парсинг параметров.

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

В общем, хочу обсудить: насколько это хорошо/плохо/универсально/неуниверсально? Можно ли так рекомендовать делать, если сам процесс вызова в программе происходит один раз (т.е. парсинг вообще не влияет на скорость выполнения)? Какие другие способы можете предложить (вызов разных функций через один интерфейс)?

Дискасс.

Update:

В качестве примера можно привести программу, обрабатывающую скрипт вида:

Вызвать Функцию1, параметры: п1=з1, п2=з2
Вызвать Функцию2, параметры: п3=з3, п4=з4

Программа, выполняющая данный скрипт, делает это через универсальный вызов

call_function(Функция1, "строка с параметрами")

 , , , ,

Sahas ()

Отвалились Qt прогаммы после обновления

После недавнего (большого) обновления, при котором также обновились Qt-шные библиотеки (Qt4 и Qt5), перестали работать некоторые GUI-шные программы на Qt, например, Lyx. Ошибка, по-видимому, связана как-то с QPixmap:

SIGSEGV signal caught!
Sorry, you have found a bug in LyX, hope you have not lost any data.
Please read the bug-reporting instructions in 'Help->Introduction' and send us a bug report, if necessary. Thanks!
Bye.
(  1) lyx: lyx(+0x5ac14f) [0x5592f272314f]
(  2) lyx: lyx(+0x61387e) [0x5592f278a87e]
(  3) lyx: lyx(+0x5aad80) [0x5592f2721d80]
(  4) lyx: lyx(+0x26f1a8) [0x5592f23e61a8]
(  5) /lib64/libc.so.6: /lib64/libc.so.6(+0x35010) [0x7f8809835010]
(  6) /usr/lib64/libQt5Gui.so.5: QPixmap::QPixmap(QPixmap const&)
(  7) /usr/lib64/libQt5Gui.so.5: /usr/lib64/libQt5Gui.so.5(+0x15b31f) [0x7f880acc731f]
(  8) /usr/lib64/libQt5XdgIconLoader.so.2: /usr/lib64/libQt5XdgIconLoader.so.2(+0x9dae) [0x7f87fcedbdae]
(  9) /usr/lib64/libQt5XdgIconLoader.so.2: XdgIconLoaderEngine::pixmap(QSize const&, QIcon::Mode, QIcon::State)
( 10) /usr/lib64/libQt5Gui.so.5: QIcon::pixmap(QWindow*, QSize const&, QIcon::Mode, QIcon::State) const
( 11) /usr/lib64/libQt5Gui.so.5: QIcon::pixmap(QSize const&, QIcon::Mode, QIcon::State) const
( 12) /usr/lib64/libQt5XcbQpa.so.5: QXcbWindow::setWindowIcon(QIcon const&)
( 13) /usr/lib64/libQt5Gui.so.5: QWindow::setIcon(QIcon const&)
( 14) /usr/lib64/libQt5Widgets.so.5: QWidgetPrivate::setWindowIcon_sys()
( 15) /usr/lib64/libQt5Widgets.so.5: QWidget::create(unsigned long long, bool, bool)
( 16) /usr/lib64/libQt5Widgets.so.5: QWidget::setVisible(bool)
( 17) lyx: lyx(+0x5b1136) [0x5592f2728136]
( 18) lyx: lyx(+0x5bb8e4) [0x5592f27328e4]
( 19) lyx: lyx(+0x5b282a) [0x5592f272982a]
( 20) lyx: lyx(+0x26f87e) [0x5592f23e687e]
( 21) lyx: lyx(+0x5bd4a1) [0x5592f27344a1]
( 22) /usr/lib64/libQt5Core.so.5: QObject::event(QEvent*)
( 23) /usr/lib64/libQt5Widgets.so.5: QApplication::event(QEvent*)
( 24) lyx: lyx(+0x5bdcc5) [0x5592f2734cc5]
( 25) /usr/lib64/libQt5Widgets.so.5: QApplicationPrivate::notify_helper(QObject*, QEvent*)
( 26) /usr/lib64/libQt5Widgets.so.5: QApplication::notify(QObject*, QEvent*)
( 27) lyx: lyx(+0x5bddac) [0x5592f2734dac]
( 28) /usr/lib64/libQt5Core.so.5: QCoreApplication::notifyInternal2(QObject*, QEvent*)
( 29) /usr/lib64/libQt5Core.so.5: QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*)
( 30) /usr/lib64/libQt5Core.so.5: /usr/lib64/libQt5Core.so.5(+0x296823) [0x7f880a768823]
( 31) /usr/lib64/libglib-2.0.so.0: /usr/lib64/libglib-2.0.so.0(g_main_context_dispatch+0x2a7) [0x7f8807858517]
( 32) /usr/lib64/libglib-2.0.so.0: /usr/lib64/libglib-2.0.so.0(+0x4a780) [0x7f8807858780]
( 33) /usr/lib64/libglib-2.0.so.0: /usr/lib64/libglib-2.0.so.0(g_main_context_iteration+0x2c) [0x7f880785882c]
( 34) /usr/lib64/libQt5Core.so.5: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
( 35) /usr/lib64/libQt5Core.so.5: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>)
( 36) /usr/lib64/libQt5Core.so.5: QCoreApplication::exec()
( 37) lyx: lyx(+0x2777ed) [0x5592f23ee7ed]
( 38) lyx: lyx(+0x11c046) [0x5592f2293046]
( 39) /lib64/libc.so.6: /lib64/libc.so.6(__libc_start_main+0xf1) [0x7f8809820521]
( 40) lyx: lyx(+0x124e6a) [0x5592f229be6a]
Ошибка сегментирования (стек памяти сброшен на диск)

Переустановка Qt, Lyx, glibc, pixman и ещё чего-то не помогает. Прошу помощи.

emerge --info dev-qt/qtgui

dev-qt/qtgui-4.8.7::gentoo was built with the following:
USE="accessibility cups exceptions glib qt3support tiff xv (-aqua) -debug -egl -gtkstyle -mng -nas -nis -pch -trace -xinerama" ABI_X86="(64) -32 (-x32)"
CXXFLAGS="-O2 -pipe -march=native -std=gnu++98"

dev-qt/qtgui-5.9.4-r3::gentoo was built with the following:
USE="dbus egl gif jpeg libinput png udev xcb -accessibility -debug -eglfs -evdev -gles2 -ibus -test -tslib -tuio -vnc" ABI_X86="(64)"

cat /etc/portage/make.conf

CFLAGS="-O2 -pipe -march=native"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
USE="qt qt5 systemd mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 fbcondecor X udisks alsa pulseaudio dbus synaptics cups nls unicode truetype opengl hunspell png jpg jpeg tiff bmp gif python3.6 python_targets_python2_7 python_targets_python3_4 python_targets_python3_6 -sysv-utils"
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"
MAKEOPTS="-j2"
PORTAGE_NICENESS=3
EMERGE_DEFAULT_OPTS="--jobs 2"
CPU_FLAGS_X86="aes avx avx2 fma3 mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3"
L10N="en ru"
LINGUAS="en ru"
ABI_X86="64" 
GRUB_PLATORMS="pc i386-pc"
VIDEO_CARDS="intel i965"
INPUT_DEVICES="synaptics evdev"
source /var/lib/layman/make.conf
QEMU_USER_TARGETS="i386 x86_64"

 , ,

Sahas ()

Материалы для экспресс-курса по C++

Товарищи, братья, друзья, господа!

Нужны какие-нибудь материалы для экспресс-подготовки студентов по программированию на C++ (специальность студентов имеет довольно малое отношение к тому, что обычно называют IT). Кнута и прочих «корифеев» не предлагать, нужен курс по современному стандарту (C++14 и позже), минимум «глубины», максимум полезных практических знаний и best practices. Если это важно, то направленность — численное моделирование физических задач.

 , , ,

Sahas ()

Цветной лазерный принтер для дома

Подскажите сабж, 100% совместимый с Линуксом, из бюджетной категории (желательно до 10 к₽)

P.S. До этого пользовался ч/б Brother. Всё устраивает, кроме цены...

Update 6.05.2018

Распишу для «потомков», чем закончилась история.

Купил Ricoh SP C252DN. С ним сразу возникла проблема (Цветной лазерный принтер для дома (комментарий)), отправил обратно в магазин (ONNO.ru — не рекомендую, не понравились мне они, если честно...), там переправили в сервис. В сервисе сделали Transfer Belt Adjustment и Color Registration (вот нигде в инструкции про это не сказано...), всё встало на места, принтер вернулся ко мне.

Но после этого опять возникла проблема — буквально спустя пару недель после возвращения из сервиса принтер просто перестал включаться. Сгорела плата питания. Я так думаю, после скачка напряжения. Отправил в сервис по гарантии, спустя примерно месяц плату заменили, принтер снова у меня. Пока работает, но я уже боюсь... В общем, не рекомендую Ricoh, надо было не скупиться, и Brother покупать... Хотя, может, просто не повезло...

В принципе, нареканий к работе пока больше нет, по WiFi печатает, довольно быстро, качество печати хорошее. PPD-файл для работы скачал из интернета (он как бы для MacOS, но под Linux тоже замечательно работает, ибо CUPS)

 

Sahas ()

Не работает скрипт по CRON'у

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

Вот скрипт /home/backup/rm_old_backups.sh:

#!/bin/bash
export PATH=/bin:/usr/bin
/usr/bin/find /home/backup/user-*.gz -type f -mtime +3 -delete

Вот содержимое /etc/cron.d/rm_old_backups:

2 5 * * * user /bin/bash /home/backup/rm_old_backups.sh

Вот запись в логе:

июл 17 05:02:01 machine-vcs CRON[31081]: pam_unix(cron:session): session opened for user user by (uid=0)
июл 17 05:02:01 machine-vcs CRON[31082]: (user) CMD (/bin/bash /home/backup/rm_old_backups.sh)
июл 17 05:02:02 machine-vcs CRON[31081]: pam_unix(cron:session): session closed for user user

Можно как-нибудь это дело отладить, либо лог записать куда?..

Система Ubuntu 16.04.2

Update: см. Не работает скрипт по CRON'у (комментарий)

 , ,

Sahas ()

Юбилей

50₇

 , , ,

Sahas ()

Проблема с x86_64-w64-mingw32: ld используется не тот, что надо, и ругается

Для кросс-компиляции поставил x86_64-w64-mingw32 при помощи crossdev, действовал по инструкции https://wiki.gentoo.org/wiki/Mingw, с заменой i686 на x86_64. Пытаюсь собрать пример SDL tutorial example:

x86_64-w64-mingw32-emerge media-libs/libsdl

Пишет:

Emerging (1 of 2) media-libs/audiofile-0.3.6-r3::gentoo for /usr/x86_64-w64-mingw32/

Компилируется и вылетает с ошибкой при попытке линковки:

/usr/lib/gcc/x86_64-pc-linux-gnu/5.4.0/../../../../x86_64-pc-linux-gnu/bin/ld: unrecognized option '--enable-auto-image-base'

Похоже, что используется неправильный линковщик, должен ведь быть x86_64-w64-mingw32-ld? В упор не понимаю, где я накосячил...

/usr/x86_64-w64-mingw32/etc/portage/make.profile указывает на /usr/portage/profiles/prefix/windows/winnt

 , , ,

Sahas ()

Старая песня о главном: вызов Python из C++

Есть проект на C++. Надо вызывать некоторые функции (или лучше сказать, методы класса) из библиотеки, написанной на Python.

Я прочесал гуглинтернет и нашёл следующие наиболее распространённые подходы: использование Python C-API и Boost.Python. Дальше я впал в ступор, так как не могу выбрать лучший вариант. С одной стороны, Boost хорош всем, за исключением его «жирности». С другой стороны, C-API — это наиболее «прямой» путь, но есть подозрения, что делать обёртку Python-функций на нём — то ещё приключение...

Поэтому прошу помощи у гуру, кто уже делал что-либо подобное.

Упрощённый пример кода смогу подогнать, если потребуется...

Update: всем спасибо, остановился на pybind11 — просто и со вкусом :)

 ,

Sahas ()

«Кириллические домены — это круто!» — говорили они...

Китайский исследователь Чжэн Сюдун (Xudong Zheng) опубликовал новый метод для проведения фишинг-атак, позволяющих организовать работу подставных сайтов, притворяющихся известными доменами. Метод работает в актуальных версиях Chrome, Firefox и Opera. Проблеме не подвержены Edge, IE, Safari, Vivaldi и Brave.

Атака основана на возможности указания unicode-символов в домене, но отличается от давно известных атак, которые манипулируют интернационализированными доменами. Классическая подмена через внешне сходный IDN-домен успешно блокируется в браузерах путём запрета смешивания символов из разных алфавитов. Например, подставной домен аpple.com («xn--pple-43d.com») не получится создать путём замены латинской «a» (U+0061 на кириллическую «а» (U+0430) , так как смешивание в домене букв из разных алфавитов не допускается.

Для обхода подобной защиты оказалось достаточно зарегистрировать домен, который состоит только из unicode-символов. Для демонстрации метода зарегистрирован домен аррӏе.com, который не имеет отношения к компании Apple и отличается от домена apple.com использованием символа «ӏ», похожего по начертанию на «l», что делает его неотличимым в адресной строке.

При этом в имя домена задаётся только через Unicode-символы (xn--80ak6aa92e.com), используя наборы Unicode-символов для языков, включающих символы, похожие на латиницу. Так как все символы в таком домене относятся к набору для одного языка, защита от смешивания не срабатывает. Далее для такого домена удалось получить SSL-сертификат, что позволило создать иллюзию использования защищённого соединения к аррӏе.com.

Исправление с устранением уязвимости уже включено в кодовую базу Chromium и войдёт в состав выпуска Chrome 58. Для Firefox исправление пока находится в процессе разработки, для блокирования уязвимости предлагается отключить поддержку Punycode (в about:config network.IDN_show_punycode = true)

https://www.opennet.ru/opennews/art.shtml?num=46394

 , ,

Sahas ()

Добавить выполнение команды после каждого ввода в qtconsole

Работал кто-нибудь с qtconsole?

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

Вот код для втроенной в GUI консоли, который я нашёл на просторах интернета:

class ConsoleWidget(JupyterWidget):
    def __init__(self, customBanner = None, *args, **kwargs):
        super(ConsoleWidget, self).__init__(*args, **kwargs)

        if customBanner is not None:
            self.banner = customBanner

        self.font_size = 6
        self.kernel_manager = kernel_manager = QtInProcessKernelManager()
        kernel_manager.start_kernel(show_banner = False)
        self.kernel_client = kernel_client = self._kernel_manager.client()
        kernel_client.start_channels()

        def stop():
            kernel_client.stop_channels()
            kernel_manager.shutdown_kernel()
            guisupport.get_app_qt().exit()

        self.exit_requested.connect(stop)

    def push_vars(self, variableDict):
        """
        Given a dictionary containing name / value pairs, push those variables
        to the Jupyter console widget
        """
        self.kernel_manager.kernel.shell.push(variableDict)

    def clear(self):
        """
        Clears the terminal
        """
        self._control.clear()

    def print_text(self, text):
        """
        Prints some plain text to the console
        """
        self._append_plain_text(text)

    def execute_command(self, command):
        """
        Execute a command in the frame of the console widget
        """
        self._execute(command, False)

 , ,

Sahas ()

Работа с графами

Ищу питоновскую библиотеку для работы с графами. Требуется: направленный граф, работа с большим количеством вершин, поддержка произвольного количества атрибутов для вершин, быстрый поиск всех «конечных» листьев, восстановление пути от листа к корню (путь может быть не единственным) и от вершины ко всем её «потомкам».

Нашёл три штуки: networkx, igraph и graph-tool. Кто что про них может сказать и какую лучше для моих целей использовать?

 , ,

Sahas ()

Перестала работать звуковая карта

Точнее, даже не определяется. Ноут Acer SWIFT SF314-51-324Q

dmesg | grep snd

[    3.686109] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[    3.707963] snd_hda_intel 0000:00:1f.3: no codecs initialized

aplay -l

aplay: device_list:268: no soundcards found...

lspci -v:

00:1f.3 Audio device: Intel Corporation Device 9d70 (rev 21)
	Subsystem: Acer Incorporated [ALI] Device 1140
	Flags: bus master, fast devsel, latency 32, IRQ 127
	Memory at b1220000 (64-bit, non-prefetchable) [size=16K]
	Memory at b1210000 (64-bit, non-prefetchable) [size=64K]
	Capabilities: [50] Power Management version 3
	Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+
	Kernel driver in use: snd_hda_intel
	Kernel modules: snd_hda_intel

Момент, в который звуковуха перестала работать, я не отследил. Но некоторое время назад всё работало. Сейчас не работает как в gentoo, так и в LiveCD Lubuntu 16.04.

У меня две версии, что могла произойти:

1) Карта «сгорела»

2) Виноват hibernate (до этого я его не использовал): карта перешла в «спящий» режим и «не вышла» из него (или что-то подобное). В пользу этого варианта — сообщение на одном из форумов:

The onboard sound card is not damaged or anything and the whole thing apparently had nothing to do with the alsa configuration. The problem was indeed this «wakeup disabled by ACPI» thing. There must have been a sudden «PCI address conflict». I moved my pci wireless card to another slot and sound is back.

Действительно, в dmesg есть такое:

[    0.360146] pci 0000:00:1f.3: System wakeup disabled by ACPI

pci 0000:00:1f.3 — это как раз адрес звуковухи

Куда копать? Как можно проверить карту? Не разбирая ноут... Думал, что с дровами проблема, перерыл весь гугл — решения не нашёл (да и не похоже, что с драйверами проблема — на двух разных системах не работает, хотя раньше работало)

 , , ,

Sahas ()

Ядро сообщает об утечке

Древний комп Athlon64 с Убунтой 16.04, картой NVIDIA GeForce 6200 и nouveau в качестве драйвера к ней. В некоторый (довольно произвольный) момент времени ядро выдаёт:

kernel: [157059.271864] [TTM] Erroneous page count. Leaking pages.

После чего (по-видимому) система намертво виснет (без каких-либо доп. сообщений), «магические» кнопочки не работают, только жёсткий reset. Очень похоже на то, что виснет из-за Nouveau, поскольку с блобом не замечал такого поведения (но зато с блобом не работает как следует OpenGL, а оно нужно). Что можно сделать?

P.S. Ответ «выкинь это старьё» я знаю, и он меня не устраивает.

 , , , ,

Sahas ()

Использование VTK

Использовал ли кто-нибудь VTK? Какие есть подводные камни и глюки? Интересует, в частности, возможность использования в режиме 3D моделирования (создания различных 3D-поверхностей и объектов).

И ещё вопрос: python binding для VTK эквивалентен вызовам из C++-библиотек? Т.е. если написать прототип на питоне, он легко переносится на C++?

Ну и вдогонку: кто-нибудь что-нибудь слышал не понаслышке про OpenCASCADE?

 , ,

Sahas ()

Веб-программисты совсем обленились...

Я просто оставлю это здесь:

«По техническим причинам в Личном кабинете при использовании браузера Mozilla Firefox ниже версии 50 может отсутствовать поле для выбора карты, с которой будет производится оплата, из-за чего кнопка «Перевести» неактивна. Для совершения оплаты / перевода необходимо обновить Ваш браузер до последней версии. Приношу извинения за доставленные неудобства.»

Версия используемого мной браузера: Firefox 45.6.0 ESR

Да, речь об онлайн-банке одного известного в узких кругах банка, а именно, Тинькова. С некоторых пор у них обновился интерфейс. Этот «новый, прогрессивный, модный и молодёжный» интерфейс просто тихий ужас...

 , , ,

Sahas ()

Двойной hibernate

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

«Не удалось выполнить действие „Спящий режим“. Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.»

После повторного включения всё нормально.

Похоже на то, что где-то просто задана слишком маленькая задержка (the reply timeout expired), но мои попытки найти конфиг этого дела ни к чему не привели. Стоит sys-power/pm-utils 1.4.1-r6. DE xfce4

 ,

Sahas ()

В OpenSSH обнаружены множественные уязвимости

 , ,

Sahas ()

Хочу mutex'ы при помощи MPI

Есть программа с межпроцессным взаимодействием на основе MPI. Хочу релизовать простейший mutex: каждый процесс должен выполнять некоторый участок кода «единолично». Как это лучше сделать (при помощи MPI)?

 ,

Sahas ()

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