LINUX.ORG.RU

Сообщения zamazan4ik

 

Прошу оценить будущую книгу по программированию

Доброго времени суток!

Недавно узнал, что один крайне именитый С++/Haskell разработчик собирается выпустить книгу о программировании в функциональном стиле.

Книга пока что находится на стадии драфта и доступна к бесплатному ознакомлению по этой ссылке: https://graninas.com/functional-design-and-architecture-book/

Как открыть книгу: на странице есть набор ссылок на Google Docs - там и можно\нужно почитать.

Чего мне бы хотелось услышать от нашего уважаемого коммунити - критики, конечно же! Это сильно поможет улучшить книгу!

К рецензированию приглашаются все разработчики, которые хоть что-то понимают в разработке.

Также хотелось бы услышать мнение Царя, если его не затруднит.

Спасибо!

 

zamazan4ik
()

Не работает suspend-to-disk на шифрованном swap

Добрый день.

Пытаюсь настроить suspend-to-disk с использованием шифрованного swap раздела.

На данный момент данная схема не работает: swap работает нормально, systemctl hibernate отрабатывает нормально, но resume не происходит и система загружается по-новой. Сейчас такое сообщение ошибки в journalctl:

Timed out waiting for device dev-disk-by\x2duuid-ec422827\x2d8d03\x2d4547\x2da107\x2dd6b9797c1d58.device.

Если swap не шифрован, то suspend-to-disk работает нормально.

Конфигурация системы: Fedora 28.

Информация, которая может быть полезна:

swapon -s

Имя файла                               Тип             Размер  Исп-но  Приоритет
/dev/dm-2                               partition       25708540        0       -2

free -m
              total        used        free      shared  buff/cache   available
Mem:          24053        7374       13517         283        3161       16062
Swap:         25105           0       25105
cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1 rd.luks.uuid=luks-384de2b6-3fdf-4fa7-9f62-a34d6d82f680 rhgb quiet resume=UUID=ec422827-8d03-4547-a107-d6b9797c1d58"
GRUB_DISABLE_RECOVERY="true"
fdisk -l
Диск /dev/nvme0n1: 465,8 GiB, 500107862016 байт, 976773168 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: D155F5DD-C780-4729-B274-A4D64830F158

Устр-во            начало     Конец   Секторы Размер Тип
/dev/nvme0n1p1       2048   1023999   1021952   499M Среда для восстановления Microsoft
/dev/nvme0n1p2    1024000   1226751    202752    99M EFI
/dev/nvme0n1p3    1226752   1259519     32768    16M Зарезервированный раздел Microsoft
/dev/nvme0n1p4    1259520 204799999 203540480  97,1G Microsoft basic data
/dev/nvme0n1p5  204800000 562978815 358178816 170,8G Microsoft basic data
/dev/nvme0n1p6  614400000 614924287    524288   256M EFI
/dev/nvme0n1p7  614924288 616972287   2048000  1000M Файловая система Linux
/dev/nvme0n1p8  616972288 723472383 106500096  50,8G Файловая система Linux
/dev/nvme0n1p9  723472384 976773119 253300736 120,8G Файловая система Linux
/dev/nvme0n1p10 562978816 614399999  51421184  24,5G Linux своп

Элементы таблицы разделов упорядочены не так, как на диске.


Диск /dev/mapper/luks-384de2b6-3fdf-4fa7-9f62-a34d6d82f680: 50,8 GiB, 54525952000 байт, 106496000 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт


Диск /dev/mapper/luks-a631bb86-8605-4145-931d-e95bfe6d5e72: 120,8 GiB, 129687879680 байт, 253296640 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт


Диск /dev/mapper/swap: 24,5 GiB, 26325549056 байт, 51417088 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
cat /etc/crypttab
luks-384de2b6-3fdf-4fa7-9f62-a34d6d82f680 UUID=384de2b6-3fdf-4fa7-9f62-a34d6d82f680 none discard
luks-a631bb86-8605-4145-931d-e95bfe6d5e72 UUID=a631bb86-8605-4145-931d-e95bfe6d5e72 none discard
swap /dev/nvme0n1p10 none luks
cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Tue Jul  3 01:18:50 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/luks-384de2b6-3fdf-4fa7-9f62-a34d6d82f680 /                       ext4    defaults,x-systemd.device-timeout=0 1 1
UUID=ae87099a-7a6b-42bd-93f2-fb5a0a685cd9 /boot                   ext4    defaults        1 2
UUID=4508-3B24          /boot/efi               vfat    umask=0077,shortname=winnt 0 2
/dev/mapper/luks-a631bb86-8605-4145-931d-e95bfe6d5e72 /home                   ext4    defaults,x-systemd.device-timeout=0 1 2
/dev/mapper/swap swap swap defaults 0 0

 , , ,

zamazan4ik
()

Автоматическая конфигурация прокси

Здравствуйте.

Имеется проблема с автоматической конфигурацией прокси сервера. В сети (сеть не моя) имеется прокси сервер.

По адресу wpad.belstu.by:8888 находится следующий файл:

function FindProxyForURL(url, host)
{
	if (isInNet(host, "172.16.0.0", "255.255.240.0"))
		return "DIRECT";
	if (isInNet(host, "127.0.0.1", "255.255.255.255"))
      return "DIRECT";
	return "PROXY 172.16.0.101:3128";
   
}

Проблема: автоматически прокси не подхватывается, приходится прописывать вручную (причём прописываемая прокси - 172.16.192.254:3128). На Windows машинах настройка проходит полностью автоматически: вставил кабель - получил доступ в Internet. На Linux (Fedora 27, Kubuntu 17.04) приходится прописывать руками.

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

 , ,

zamazan4ik
()

Проблемы с подключением\отключением экрана в plasmashell

Здравствуйте.

Столкнулся уже давно с проблемой: если подключить\отключить экран к Kubuntu 17.04, то при смене главного монитора (того, где будет снизу панель находится), эта самая панель будет не с самого низа монитора, а на расстоянии 4-5 пикселей от низа. К тому же, панель может криво отрисоваться, и часть панели будет просто чёрная.

Kubuntu 17.04, KDE 5.10.5.

Кто-нибудь сталкивался с таким?

 , ,

zamazan4ik
()

Вопрос по дизайну

Здравствуйте. Есть вопрос, как правильно задизайнить.

Есть простенький DSV-writer. Хочется путём лёгкой кастомизации превращаться его в CSV, TSV, etc. writer.

И тут у меня появились две соперничающие идеи, как эту кастомизацию сделать.

1.


template <typename Delimiter,
          typename LineTerminator,
          typename Quote,
          typename Comment>
struct Dialect
{
    using DelimiterType = Delimiter;
    using LineTerminatorType = LineTerminator;
    using QuoteType = Quote;
    using CommentType = Comment;

    Dialect() = default;

    Dialect(Delimiter delimiter1, LineTerminator lineTerminator1, Quote quote1, Comment comment1) :
            delimiter(delimiter1), lineTerminator(lineTerminator1), quote(quote1), comment(comment1)
    {}


    Delimiter delimiter;
    LineTerminator lineTerminator;
    Quote quote;
    Comment comment;
};

class Writer
{
    Dialect d;
public:
    Writer(const Dialect& dialect) : d(dialect) {}
    //...
};

const Dialect<char,char,char,char> CSV_Dialect = Dialect<char,char,char,char>(',', '\n', '"', '#');
const Dialect<char,char,char,char> TSV_Dialect = Dialect<char,char,char,char>('\t', '\n', '"', '#');

//.....

int main()
{
    Writer writer(CSV_Dialect);
}

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

2.


template <typename Delimiter,
          typename LineTerminator,
          typename Quote,
          typename Comment>
struct Dialect
{
    using DelimiterType = Delimiter;
    using LineTerminatorType = LineTerminator;
    using QuoteType = Quote;
    using CommentType = Comment;

    Dialect() = default;

    Dialect(Delimiter delimiter1, LineTerminator lineTerminator1, Quote quote1, Comment comment1) :
            delimiter(delimiter1), lineTerminator(lineTerminator1), quote(quote1), comment(comment1)
    {}


    Delimiter delimiter;
    LineTerminator lineTerminator;
    Quote quote;
    Comment comment;
};

template <typename Delimiter,
          typename LineTerminator,
          typename Quote,
          typename Comment>
struct CSV_Dialect : public Dialect<Delimiter,LineTerminator,Quote,Comment>
{
    CSV_Dialect() : Dialect<Delimiter,LineTerminator,Quote,Comment>(',', '\n', '"', '#') {}
};

template <typename Delimiter,
          typename LineTerminator,
          typename Quote,
          typename Comment>
struct TSV_Dialect : public Dialect<Delimiter,LineTerminator,Quote,Comment>
{
    TSV_Dialect() : Dialect<Delimiter,LineTerminator,Quote,Comment>('\t', '\n', '"', '#') {}
};

template <typename Dialect>
class Writer
{
    Dialect d;
    //...
};


//.....

int main()
{
    Writer<CSV_Dialect> writer;
}

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

Если у кого-то есть ещё идеи, как сделать лучше - милости прошу к обсуждению.

eao197

 , ,

zamazan4ik
()

Микроволновки тред

Привет

Имеется микроволновка Samsung me83krw1.

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

Стоит нормально, температура в комнате что-то около 23-25 по Цельсию, вентилятор крутится в микроволновке.

Вопрос: норма ли это?

Линукс при том, что пишу с него (ждём микроволновок с линуксом на борту).

UPD: забыл указать, что в инструкции написано, что корпус во время работы может сильно нагреваться. Но меня это всё равно напрягает.

 ,

zamazan4ik
()

Программы, которым нет аналогов на Linux

Привет.

Скажите, есть ли такие программы на Windows/MacOS/smth else, вот которым вообще аналогов нет под Linux и вот прям нечем заменить?

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

 , ,

zamazan4ik
()

Лучший pdf reader

Здравствуйте. А каким вы пользуетесь PDF ридером на онтопике? Я пользуюсь Okular, но встретился с проблемой, что он не поддерживает редактирование form fields. Кто что может посоветовать?

 ,

zamazan4ik
()

Библиотека с алгоритмами для изображений

Здравствуйте. Вопрос из Talks.

Вопрос в тему обработки изображений. Есть imagemagick/graphicsmagick, которые являются чуть ли не консольными фотошопами. А как всякие гимпы и криты реализуют различные фильтры? Например, устранение размытия, грейскейл и так далее? Неужели всё сами пишут? Сколько я смотрел исходники - вроде самописное.

Чего спрашиваю - есть желание упростить жизнь разработчикам редакторов и запилить либу, в который были бы всякие полезные фильтры, грейскейлы, бинаризации разные(а не только Оцу), автокропы и так далее. Но не знаю, нужно оно или нет. Если такое есть, то ткните плиз.

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

 , ,

zamazan4ik
()

Вышел Rust 1.17

 

zamazan4ik
()

QListWidgetItem сделать контекстное меню

Здравствуйте.

Есть QListWidget, в нём динамически добавляются различные QListWidgetItem. Так вот, как добавить поддержку контекстного меню для каждого QListWidgetItem? Меню для всех QListWidgetItem одинаковые. Спасибо.

 , ,

zamazan4ik
()

segfault после new

Здравствуйте.

Имеется приложение, которое после вызова new падает с segfault. Проблема в том, что падает не в одном и том же месте, а в разных местах, но всегда при аллокации памяти.

Как я понимаю, проблема в том, что где-то бьётся куча, и при очередном выделнии памяти становится всё плохо.

Пробовал гонять valgrind - результаты нулевые: всего лишь показывает stacktrace.

Как узнать, в чём причина падений?

Выдача valgrind:

valgrind --tool=memcheck --leak-check=full  ./yagf
==3388== Memcheck, a memory error detector
==3388== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==3388== Using Valgrind-3.12.0.SVN and LibVEX; rerun with -h for copyright info
==3388== Command: ./yagf
==3388== 
QMetaObject::connectSlotsByName: No matching signal for on_actionSelect_HTML_format_activated()
QMetaObject::connectSlotsByName: No matching signal for on_actionCheck_spelling_activated()
QMetaObject::connectSlotsByName: No matching signal for on_actionSave_block_activated()
QMetaObject::connectSlotsByName: No matching signal for on_actionSave_current_image_activated()
QMetaObject::connectSlotsByName: No matching signal for on_actionRecognize_block_activated()
QMetaObject::connectSlotsByName: No matching signal for on_ActionDeleteBlock_activated()
QMetaObject::connectSlotsByName: No matching signal for on_ActionClearAllBlocks_activated()
We got some errors while running testparm "Load smb config files from /etc/samba/smb.conf\nLoaded services file OK.\nWARNING: The 'netbios name' is too long (max. 15 chars).\n\n"
==3388== Syscall param writev(vector[...]) points to uninitialised byte(s)
==3388==    at 0x6D9296D: ??? (syscall-template.S:84)
==3388==    by 0x9557F28: write_vec (xcb_conn.c:257)
==3388==    by 0x9557F28: _xcb_conn_wait (xcb_conn.c:502)
==3388==    by 0x955831C: _xcb_out_send (xcb_out.c:399)
==3388==    by 0x9558A76: _xcb_out_flush_to (xcb_out.c:423)
==3388==    by 0x9558C43: xcb_flush (xcb_out.c:358)
==3388==    by 0x412AB92: QXcbWindow::setCursor(unsigned int) (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.6.1)
==3388==    by 0x4135EE1: ??? (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.6.1)
==3388==    by 0x55CCDC9: QWindowPrivate::setCursor(QCursor const*) (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.6.1)
==3388==    by 0x4FC6AEE: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x4FD0F78: QWidget::setCursor(QCursor const&) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x1416BC05: ??? (in /usr/lib/x86_64-linux-gnu/libKF5WidgetsAddons.so.5.28.0)
==3388==    by 0x5CFFBEB: QMetaObject::activate(QObject*, int, int, void**) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388==  Address 0xd7ea1c6 is 4,582 bytes inside a block of size 21,152 alloc'd
==3388==    at 0x4C2EB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==3388==    by 0x95578DB: xcb_connect_to_fd (xcb_conn.c:325)
==3388==    by 0x955B610: xcb_connect_to_display_with_auth_info (xcb_util.c:523)
==3388==    by 0x75FF7E9: _XConnectXCB (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
==3388==    by 0x75F0361: XOpenDisplay (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
==3388==    by 0x41172F3: QXcbConnection::QXcbConnection(QXcbNativeInterface*, bool, unsigned int, char const*) (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.6.1)
==3388==    by 0x411A9BD: QXcbIntegration::QXcbIntegration(QStringList const&, int&, char**) (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.6.1)
==3388==    by 0x40294AC: ??? (in /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so)
==3388==    by 0x55ABC3C: QPlatformIntegrationFactory::create(QString const&, QStringList const&, int&, char**, QString const&) (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.6.1)
==3388==    by 0x55BA2E4: QGuiApplicationPrivate::createPlatformIntegration() (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.6.1)
==3388==    by 0x55BB0FC: QGuiApplicationPrivate::createEventDispatcher() (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.6.1)
==3388==    by 0x5CD86FE: QCoreApplicationPrivate::init() (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388== 
("/media/zamazan4ik/For_Linux/Photo/6.png")
QImage(QSize(580, 330),format=5,depth=32,devicePixelRatio=1,bytesPerLine=2320,byteCount=765600)
191400
==3388== Invalid write of size 1
==3388==    at 0x1E7EBA: QIPGrayscaleImage::toGrayscaleMinOrMaxInternal(QImage const&, IntRect const&, bool) (qipgrayscaleimage.cpp:1587)
==3388==    by 0x1E7D90: QIPGrayscaleImage::toGrayscaleMinOrMax(QImage const&, bool) (qipgrayscaleimage.cpp:1564)
==3388==    by 0x1E1743: QIPGrayscaleImage::QIPGrayscaleImage(QImage const&, QIPGrayscaleImage::GrayscaleConversion) (qipgrayscaleimage.cpp:66)
==3388==    by 0x1D2221: ImageProcessor::loadImage(QImage const&) (imageprocessor.cpp:68)
==3388==    by 0x1C677E: Page::loadFile(QString, int, bool) (page.cpp:105)
==3388==    by 0x1CDA66: PageCollection::appendPage(QString const&) (tpagecollection.cpp:57)
==3388==    by 0x17583D: MainForm::loadFile(QString const&, bool) (mainform.cpp:720)
==3388==    by 0x172A3B: MainForm::loadFiles(QStringList const&) (mainform.cpp:294)
==3388==    by 0x17456C: MainForm::loadImage() (mainform.cpp:547)
==3388==    by 0x1FAC8B: MainForm::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (moc_mainform.cpp:357)
==3388==    by 0x5CFFB48: QMetaObject::activate(QObject*, int, int, void**) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388==    by 0x4F8C301: QAction::triggered(bool) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==  Address 0x1f43a868 is 0 bytes after a block of size 24 alloc'd
==3388==    at 0x4C2D1AF: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==3388==    by 0x1E11DA: __gnu_cxx::new_allocator<std::_Sp_counted_ptr_inplace<unsigned char, std::allocator<unsigned char>, (__gnu_cxx::_Lock_policy)2> >::allocate(unsigned long, void const*) (new_allocator.h:104)
==3388==    by 0x1E1002: std::allocator_traits<std::allocator<std::_Sp_counted_ptr_inplace<unsigned char, std::allocator<unsigned char>, (__gnu_cxx::_Lock_policy)2> > >::allocate(std::allocator<std::_Sp_counted_ptr_inplace<unsigned char, std::allocator<unsigned char>, (__gnu_cxx::_Lock_policy)2> >&, unsigned long) (alloc_traits.h:416)
==3388==    by 0x1E0DD9: std::__allocated_ptr<std::allocator<std::_Sp_counted_ptr_inplace<unsigned char, std::allocator<unsigned char>, (__gnu_cxx::_Lock_policy)2> > > std::__allocate_guarded<std::allocator<std::_Sp_counted_ptr_inplace<unsigned char, std::allocator<unsigned char>, (__gnu_cxx::_Lock_policy)2> > >(std::allocator<std::_Sp_counted_ptr_inplace<unsigned char, std::allocator<unsigned char>, (__gnu_cxx::_Lock_policy)2> >&) (allocated_ptr.h:103)
==3388==    by 0x1E9DC6: std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<unsigned char, std::allocator<unsigned char>, int>(std::_Sp_make_shared_tag, unsigned char*, std::allocator<unsigned char> const&, int&&) (shared_ptr_base.h:613)
==3388==    by 0x1E9D0D: std::__shared_ptr<unsigned char, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<unsigned char>, int>(std::_Sp_make_shared_tag, std::allocator<unsigned char> const&, int&&) (shared_ptr_base.h:1100)
==3388==    by 0x1E9BED: std::shared_ptr<unsigned char>::shared_ptr<std::allocator<unsigned char>, int>(std::_Sp_make_shared_tag, std::allocator<unsigned char> const&, int&&) (shared_ptr.h:319)
==3388==    by 0x1E9439: std::shared_ptr<unsigned char> std::allocate_shared<unsigned char, std::allocator<unsigned char>, int>(std::allocator<unsigned char> const&, int&&) (shared_ptr.h:620)
==3388==    by 0x1E8E44: std::shared_ptr<unsigned char> std::make_shared<unsigned char, int>(int&&) (shared_ptr.h:636)
==3388==    by 0x1E1680: QIPGrayscaleImage::QIPGrayscaleImage(QImage const&, QIPGrayscaleImage::GrayscaleConversion) (qipgrayscaleimage.cpp:53)
==3388==    by 0x1D2221: ImageProcessor::loadImage(QImage const&) (imageprocessor.cpp:68)
==3388==    by 0x1C677E: Page::loadFile(QString, int, bool) (page.cpp:105)
==3388== 
--3388-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV) - exiting
--3388-- si_code=1;  Faulting address: 0xFFFFFFFFFFFFFFFF;  sp: 0x802daddf0

valgrind: the 'impossible' happened:
   Killed by fatal signal

host stacktrace:
==3388==    at 0x38095231: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==3388==    by 0x3809724A: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==3388==    by 0x38051EF4: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==3388==    by 0x3805214D: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==3388==    by 0x380E05A3: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)
==3388==    by 0x380EF820: ??? (in /usr/lib/valgrind/memcheck-amd64-linux)

sched status:
  running_tid=1

Thread 1: status = VgTs_Runnable (lwpid 3388)
==3388==    at 0x4C2D1AF: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==3388==    by 0x1E11DA: __gnu_cxx::new_allocator<std::_Sp_counted_ptr_inplace<unsigned char, std::allocator<unsigned char>, (__gnu_cxx::_Lock_policy)2> >::allocate(unsigned long, void const*) (new_allocator.h:104)
==3388==    by 0x1E1002: std::allocator_traits<std::allocator<std::_Sp_counted_ptr_inplace<unsigned char, std::allocator<unsigned char>, (__gnu_cxx::_Lock_policy)2> > >::allocate(std::allocator<std::_Sp_counted_ptr_inplace<unsigned char, std::allocator<unsigned char>, (__gnu_cxx::_Lock_policy)2> >&, unsigned long) (alloc_traits.h:416)
==3388==    by 0x1E0DD9: std::__allocated_ptr<std::allocator<std::_Sp_counted_ptr_inplace<unsigned char, std::allocator<unsigned char>, (__gnu_cxx::_Lock_policy)2> > > std::__allocate_guarded<std::allocator<std::_Sp_counted_ptr_inplace<unsigned char, std::allocator<unsigned char>, (__gnu_cxx::_Lock_policy)2> > >(std::allocator<std::_Sp_counted_ptr_inplace<unsigned char, std::allocator<unsigned char>, (__gnu_cxx::_Lock_policy)2> >&) (allocated_ptr.h:103)
==3388==    by 0x1E0BC4: std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<unsigned char, std::allocator<unsigned char>, unsigned int>(std::_Sp_make_shared_tag, unsigned char*, std::allocator<unsigned char> const&, unsigned int&&) (shared_ptr_base.h:613)
==3388==    by 0x1E0A47: std::__shared_ptr<unsigned char, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<unsigned char>, unsigned int>(std::_Sp_make_shared_tag, std::allocator<unsigned char> const&, unsigned int&&) (shared_ptr_base.h:1100)
==3388==    by 0x1E0907: std::shared_ptr<unsigned char>::shared_ptr<std::allocator<unsigned char>, unsigned int>(std::_Sp_make_shared_tag, std::allocator<unsigned char> const&, unsigned int&&) (shared_ptr.h:319)
==3388==    by 0x1E07BB: std::shared_ptr<unsigned char> std::allocate_shared<unsigned char, std::allocator<unsigned char>, unsigned int>(std::allocator<unsigned char> const&, unsigned int&&) (shared_ptr.h:620)
==3388==    by 0x1E05BA: std::shared_ptr<unsigned char> std::make_shared<unsigned char, unsigned int>(unsigned int&&) (shared_ptr.h:636)
==3388==    by 0x1DEDBC: QIPBlackAndWhiteImage::QIPBlackAndWhiteImage(unsigned int, unsigned int) (qipblackandwhiteimage.cpp:37)
==3388==    by 0x1E67AA: QIPGrayscaleImage::otsuBinarizeMA() const (qipgrayscaleimage.cpp:1219)
==3388==    by 0x1E3115: QIPGrayscaleImage::binarize(QIPGrayscaleImage::BinarizationMethod) const (qipgrayscaleimage.cpp:455)
==3388==    by 0x1D203D: ImageProcessor::crop() (imageprocessor.cpp:50)
==3388==    by 0x1C67CC: Page::loadFile(QString, int, bool) (page.cpp:111)
==3388==    by 0x1CDA66: PageCollection::appendPage(QString const&) (tpagecollection.cpp:57)
==3388==    by 0x17583D: MainForm::loadFile(QString const&, bool) (mainform.cpp:720)
==3388==    by 0x172A3B: MainForm::loadFiles(QStringList const&) (mainform.cpp:294)
==3388==    by 0x17456C: MainForm::loadImage() (mainform.cpp:547)
==3388==    by 0x1FAC8B: MainForm::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (moc_mainform.cpp:357)
==3388==    by 0x5CFFB48: QMetaObject::activate(QObject*, int, int, void**) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388==    by 0x4F8C301: QAction::triggered(bool) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x4F8EEFF: QAction::activate(QAction::ActionEvent) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x5095BBC: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x5095DF3: QAbstractButton::mouseReleaseEvent(QMouseEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x5163709: QToolButton::mouseReleaseEvent(QMouseEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x4FDB497: QWidget::event(QEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x51637E8: QToolButton::event(QEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x4F958AB: QApplicationPrivate::notify_helper(QObject*, QEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x4F9BC06: QApplication::notify(QObject*, QEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x5CD23AF: QCoreApplication::notifyInternal2(QObject*, QEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388==    by 0x4F9A2D4: QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x4FF5AD5: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x4FF86D2: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x4F958AB: QApplicationPrivate::notify_helper(QObject*, QEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x4F9AD4E: QApplication::notify(QObject*, QEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.6.1)
==3388==    by 0x5CD23AF: QCoreApplication::notifyInternal2(QObject*, QEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388==    by 0x55C15F2: QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.6.1)
==3388==    by 0x55C2E04: QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.6.1)
==3388==    by 0x55A0B2A: QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.6.1)
==3388==    by 0x414965F: ??? (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.6.1)
==3388==    by 0x72F97D6: g_main_context_dispatch (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
==3388==    by 0x72F9A3F: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
==3388==    by 0x72F9AEB: g_main_context_iteration (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
==3388==    by 0x5D2848E: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388==    by 0x5CD00F9: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388==    by 0x5CD890B: QCoreApplication::exec() (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388==    by 0x16F9E2: main (main.cpp:88)

Thread 2: status = VgTs_WaitSys (lwpid 3392)
==3388==    at 0x6D910BD: ??? (syscall-template.S:84)
==3388==    by 0x9557C61: poll (poll2.h:46)
==3388==    by 0x9557C61: _xcb_conn_wait (xcb_conn.c:459)
==3388==    by 0x95598D6: xcb_wait_for_event (xcb_in.c:693)
==3388==    by 0x4113298: ??? (in /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5.6.1)
==3388==    by 0x5AFAC67: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388==    by 0x61D66C9: start_thread (pthread_create.c:333)
==3388==    by 0x6D9D0AE: clone (clone.S:105)

Thread 3: status = VgTs_WaitSys (lwpid 3397)
==3388==    at 0x6D910BD: ??? (syscall-template.S:84)
==3388==    by 0x72F99D5: ??? (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
==3388==    by 0x72F9AEB: g_main_context_iteration (in /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2)
==3388==    by 0x5D2848E: QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388==    by 0x5CD00F9: QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388==    by 0x5AF5D42: QThread::exec() (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388==    by 0x102B4574: ??? (in /usr/lib/x86_64-linux-gnu/libQt5DBus.so.5.6.1)
==3388==    by 0x5AFAC67: ??? (in /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.6.1)
==3388==    by 0x61D66C9: start_thread (pthread_create.c:333)
==3388==    by 0x6D9D0AE: clone (clone.S:105)


Note: see also the FAQ in the source distribution.
It contains workarounds to several common problems.
In particular, if Valgrind aborted or crashed after
identifying problems in your program, there's a good chance
that fixing those problems will prevent Valgrind aborting or
crashing, especially if it happened in m_mallocfree.c.

If that doesn't help, please report this bug to: www.valgrind.org

In the bug report, send all the above text, the valgrind
version, and what OS and version you are using.  Thanks.

Исходный код: https://github.com/ZaMaZaN4iK/ufocr

Если кому захочется поковыряться, то засылайте пулл-реквест.

UPD: теперь падает и на gcc и на clang

 , ,

zamazan4ik
()

Как прилинковать статические библиотеки к статической библиотеке в cmake?

Здравствуйте.

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

add_library(lib STATIC ${SOURCE_FILES})
target_link_libraries(lib
     some_prebuilt_lib1.a
     some_prebuilt_lib2.a
        )

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

Но так не происходит и либы не прилинковываются. Вижу я это по тому, что когда я пытаюсь статически прилинковать мою либу к другому проекту, то вижу кучу отсутсвующих символов. Что я делаю не так? Пути указываю правильные.

 , ,

zamazan4ik
()

Статическая линковка с ImageMagick(GraphicsMagick)

Здравствуйте.

Имеется проект с cmake. Надо сбилдить его с ImageMagick, скомпиленным из сорцов, статически.

Собирал ImageMagick так:

./configure --enable-static --disable-shared

После этого получаю либы и пытаюсь линковаться с ними с помощью такого CmakeLists.txt :

cmake_minimum_required(VERSION 3.6)
project(zamlib)

include_directories(include/ include/GraphicsMagick)
link_directories(lib/libjpeg lib/libpng lib/libtiff lib/zlib lib/libjasper
                 lib/libwebp lib/libippcv lib/GraphicsMagick)

set(CMAKE_CXX_STANDARD 14)

set(SOURCE_FILES src/main.cpp)
add_executable(zamlib ${SOURCE_FILES})

#Dependencies

set(GraphicsMagick_LIBS libGraphicsMagick.a libGraphicsMagick++.a)

target_link_libraries(zamlib
        ${GraphicsMagick_LIBS}
        pthread

        libippicv.a
        liblibwebp.a
        liblibjasper.a
        liblibjpeg.a
        liblibpng.a
        liblibtiff.a
        libzlib.a
        )

Но при линковке имею много ошибок с Magick++ (часть из них):

undefined reference to 'GetExceptionInfo'
undefined reference to 'ThrowLoggedException'
undefined reference to 'SetClientName'

Как такое побороть? Находил в Интернете какие-то решения с Magick-config, но как это встроить в cmake?

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

 , , , ,

zamazan4ik
()

Хорошая имплементация структуры данных Rope

Здравствуйте.

Может есть у кого-нибудь ссылочка на наиболее полную имплементацию структуры данных Rope на C++?

SGI STL'ная реализация ужасна и является ну очень древней.

Вот реализации, которые я нашёл на данный момент:

1) SGI STL само собой.

2) На GitHub по ключевому слову rope и тегу C++ всё выкачал - всё очень примитивное.

3) В libstdc++ такая же страшная, как и в SGI.

hlamotron

 , , ,

zamazan4ik
()

Как убедить тимлида притянуть в проект Boost

Здравствуйте.

Есть проект. Почти весь написан на C++, GUI + очень малая часть функционала написана на C#. Целевая платформа: оффтопик.

Конечно же есть библиотека с утилитами всякими. И вот там тимлид сидит и пишет свои костыли для работы с файловой системой: итерация по директории, удаление файла и т.д.

Я никак не могу, зачем он это делает (NIH?), и стараюсь убедить его, что мол есть же Boost.Filesystem, юзай его. Ответ таков: Boost тяжёлый, тянуть не хочется да и вообще лень. А вот мои костыли это просто лучшее решение. И это после того, как я регулярно в его костылях правлю баги какие-нибудь.

И это касается не только Filesystem. Он ещё своё жалкое подобие lexical_cast впихнул и много чего ещё...

Откуда такая может быть ненависть к Boost? И как с этим можно бороться? Кто что может посоветовать? Может у кого есть свои истории успеха.

Сменить тимлида\компанию не предлагать.

 , , ,

zamazan4ik
()

openjpeg 1.5.1 to 2.1.2

Всем привет.

Кто-нибудь работал с новым openjpeg?

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

stream = opj_cio_open(codec, source, file_length)
, после чего мы уже можем просто его декодировать. И всё работало.

Сейчас же это убрали, и нужно вручную инициализировать поток:

stream = opj_stream_create(file_length, true);
opj_stream_set_user_data(stream, source, free);

Но такой подход почему-то не работает, так как после вызова jpeg файла пишет SOC не найден.

Может кто сталкивался с подобным?

 

zamazan4ik
()

Альтернатива для Android

Сейчас у меня аппарат Sony Xperia Z1 Compact (Android 5.1.1). Так вот, проблема в том, что система то лагает довольно сильно: приложения открываются по секунд 5, даже просто вызвать абонента бывает занимает секунд 3-7. Хорошей отзывчивостью и не пахнет.

Так вот, есть ли какие-нибудь на рынке разумные альтернативы Андроиду? iOS не предлагайте - окунаться в экосистему аппле нет никакого желания. блэкберри вроде как уныла, Ubuntu Touch не знаю, но наверное приложений крайне мало (тут утверждать ничего не могу, так как не имею опыта с системой).

Куда ещё можно податься? И есть ли в этом смысл?

Свой аппарат совсем слабым не считаю.

 , , ,

zamazan4ik
()

Интерфейс для алгоритма поиска

Здравствуйте. Имеется дилема по поводу интерфейса для алгоритма поиска.

Итак, есть std::search. Он ищет подстроку в строке. И возвращает итератор на первое совпадение. Если мы хотим следующее вхождение, то просто передаём другой диапазон.

Что имеется в Boost.Algorithm - есть реализация алгоритма Бойера-Мура. Раньше он тоже возвращал итератор на первый найденный элемент. Теперь он возвращает пару итераторов (начало надйенного паттерна, конец найденного паттерна).

Но проблема в том, что Бойер-Мур возвращает итераторы только на первый найденный элемент. Чтобы найти все вхождения подстроки в строку, мы можем должны вызвать N раз. Накладных расходов на предпросчёт при каждом вызове нет - мы можем создать обьект Boyer-Moore, и только при создании будут рассчитаны две таблицы.

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

Но тогда придётся плодить какой-то новый интерфейс: один для нахождения первого вхождения, второй для нахождения всех вхождений.

Как будет лучше поступить здесь?

 ,

zamazan4ik
()

Tex и получение bounding boxes

Здравствуйте.

Скажите пожалуйста, возможно ли провернуть такую вещь: имеется какой-то произвольный валидный Tex/Latex-исходник, из которого гененрируется PDF. нужно получить bounding box(ограничивающий прямоугольник) всех изображений и блоков текста.

Допустим, у нас есть какой-то Tex, который выводит просто какой-то текст. Из него сгенерируется PDF. Внутри PDF у этого текста будет какой-то ограничивающий его прямоугольник. И мне нужно найти координаты этого прямоугольника относительно страницы PDF.

Возможно ли это как-то выдернуть из Tex компилятора? Или придётся уже как-то шаманить с готовым PDF документом? Если с готовым PDF, то может у кого есть на примете готовые либы?

Спасибо.

 , ,

zamazan4ik
()

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