LINUX.ORG.RU

Сообщения hobbit

 

Debian GNU/Hurd 2025

 ,

Группа Debian

Параллельно с Debian 13 представлен выпуск дистрибутива Debian GNU/Hurd 2025, сочетающего программное окружение Debian c ядром GNU/Hurd. Репозиторий Debian GNU/Hurd включает примерно 72% пакетов от общего размера архива Debian, в том числе портированы Firefox и Xfce. Установочные сборки сформированы (364МБ) для архитектур i386 и x86_64. Для ознакомления с дистрибутивом без установки подготовлены готовые образы для виртуальных машин. Платформа GNU/Hurd не входит в число официально поддерживаемых архитектур Debian, поэтому релизы Debian GNU/Hurd формируются отдельно и имеют статус неофициального выпуска Debian.

( читать дальше... )

ISO-образы для amd64 и i386

>>> Подробности (OpenNet) (opennet.ru)

hobbit
()

Ищу роутер для самостоятельной установки OpenWrt в 2025 году

 , ,

Привет, ЛОР.

Что из доступного в российских магазинах посоветуете? Чтобы гарантированно ставился ванильный OpenWrt (самостоятельно, не ограничиваясь прошивкой от поставщика роутера).

Из прочих требований:

  • LAN - не менее 4 портов;
  • WAN - щобы был (хотя мне кто-то говорил, что с OpenWrt можно любой порт назначить WAN-ом, не знаю, правда ли, матчасть ещё не курил, но обязательно буду);
  • Wi-Fi - специальных требований нет, но наличие требуется.

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

Личный опыт по прошивке рекомендованной вами модели КАТЕГОРИЧЕСКИ ПРИВЕТСТВУЕТСЯ.

hobbit
()

Стиль отображения в Roundcube

 ,

Привет, ЛОР.

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

Ну ладно. Решил посмотреть, можно ли его как-то потюнить. Во всех руководствах написано, что Roundcube поддерживает разные стили оформления, и даже на официальной странице со скриншотами есть примеры, тема Larry сильно напоминает старую и меня бы вполне устроила…

Но почему-то у меня в настройках такого не наблюдается. По идее это должно быть Settings -> Preferences -> User interface. Но я там наблюдаю только выбор языка и несколько галочек («Pretty dates» я, разумеется, тут же злобно отключил, на мой взгляд, все эти «пн» вместо даты и времени совсем не Pretty).

Версии пакетов:

ii  roundcube                        1.6.9-70-deb11                        all          skinnable AJAX based webmail solution for IMAP servers - metapackage
ii  roundcube-core                   1.6.9-70-deb11                        all          skinnable AJAX based webmail solution for IMAP servers
ii  roundcube-mysql                  1.6.9-70-deb11                        all          metapackage providing MySQL dependencies for RoundCube
ii  roundcube-plugins                1.6.9-70-deb11                        all          skinnable AJAX based webmail solution for IMAP servers - plugins
ii  roundcube-plugins-extra          1.4.10+1-3                            all          skinnable AJAX based webmail solution - extra plugins

Все пакеты, кроме последнего, были предустановлены на VDS. Последний я сам поставил с горя (разумеется, из репы, через apt-get), но это не помогло (и номер версии намекает, что с ним не всё так просто).

Куда копать?

P.S. додумался сделать обновление системы из реп, перегрузил сервер. Roundcube минорно обновился до 1.6.9-79, но моей беде это не помогло…

P.P.S. Оказалось, у меня сборка Roundcube от ispmanager. Что с этим делать, пока не решил, второй переезд подряд затевать сразу как-то неохота. Интересно, параллельно с ней «ванильный» поставить получится?..

hobbit
()

Сюрпризы сборки Qt 5.15 на GCC 15 (Qt5 EOL Official Edition посвящается...)

 , ,

Привет, ЛОР.

Пытаюсь собрать Qt 5.15.4 с GCC 15.1.1. Часть граблей знакомые, обошёл. Но выявились новые. Причём ругань не на сам кутешный файл, а на заголовочник из ICU, который у меня в системе стоит. Вызывает его подпроект в qtlocation/src/3rdparty/mapbox-gl-native.

Текст ошибки (даже двух, но вторая, вероятно, наведённая):

/usr/include/unicode/localpointer.h:561:26: ошибка: «auto» параметр недопустим в данном контексте
  561 | template <typename Type, auto closeFunction>
      |                          ^~~~
/usr/include/unicode/localpointer.h:573:76: ошибка: некорректный аргумент шаблона 2 [-Wtemplate-body]
  573 |     explicit LocalOpenPointer(std::unique_ptr<Type, decltype(closeFunction)> &&p)

Кусок самого localpointer.h:

template <typename Type, auto closeFunction>
class LocalOpenPointer : public LocalPointerBase<Type> {
    using LocalPointerBase<Type>::ptr;
public:

Подозреваю, конечно, что компилятор шарашит по либо слишком старому, либо слишком новому стандарту C++. В файле mapbox-gl-native.pro на себя обращают внимание строки

CONFIG += qt c++14 exceptions warn_off staticlib object_parallel_to_source
CONFIG -= c++1z

А рядом лежит свеженький Makefile, который qmake из этого проекта сгенерировала, и там в переменной CXXFLAGS присутствует -std=c++1y.

Как связать концы этого клубка?

hobbit
()

Запуск sberbankPDF2Excel.py в Linux: благодарность micronekodesu и ещё раз о Питоне

 , ,

Привет, ЛОР.

С некоторых пор Сбербанк-онлайн выпилил «физикам» возможность сохранения выписок в структурированных форматах, оставил только PDF. Разработчик, публикующийся на Гитхабе под именем Ev2geny, создал программу на Питоне, конвертирующую этот PDF в форматы xlsx и csv. К сожалению, внятную сборку он сделал только для Windows, а инструкция по запуску под линуксом у меня не заработала.

К счастью, @micronekodesu откликнулся на мою проблему и написал мини-инструкцию по запуску sberbankPDF2Excel.py в виртуальном окружении. Я её протестировал – работает, в CSV сохраняет.

Однако на вопрос по ссылке (заданный в контексте дискуссии о лучшем способе распространения программ на Питоне)

просто из-за того что я питоняша у меня не возникает проблем?

Мой ответ – «видимо, да». Я бы без инструкции долго блуждал в трёх соснах. И мне кажется, что сишную программу, запакованную в AppImage, запустить реально проще, чем вот это вот. Не только для «простого пользователя», но и для продвинутого.

Ещё раз спасибо @micronekodesu! Ну и автору программы, конечно, хотя я не уверен, что он читает ЛОР.

P.S. Та тема уже в архиве и отвечать там нельзя. Иначе я бы просто оставил там комментарий. С другой стороны, я уверен, что я не единственный линуксоид, пользующийся Сбербанком, поэтому дополнительный пиар способу обхода его закидонов :) не помешает.

P.P.S Под firefox Сбербанк-онлайн создаёт битые PDF. Под chromium всё прекрасно работает. Это замечание, конечно, уже не по тематике нашего форума, хотя… как мы радовались когда-то, что монополии IE пришёл конец… Эхъ…

hobbit
()

Потыкайте мой AppImage, пожалуйста

 ,

Привет, ЛОР.

Вооружившись appimagetool и башем, я склепал AppImage для DoubleContact с условным номером версии 0.2.5beta2. Собирал под Ubuntu 18.04, по идее на практически любом x86_64-дистрибутиве моложе 7 лет должно работать. Кому интересен мой проект – просьба потыкать и отписаться, что за дистрибутив и каков результат. В отличие от предыдущей статической сборки, рут не требуется.

Не получилось добавить в программу Appstream. Проблема очень похожа на описанную в крике души по ссылке: сначала она предупреждает, что Id должен быть в формате обратного доменного имени, когда я делаю его таким, склоняет переименовать сам файл, когда я это делаю, не видит файл метаданных вообще. Если кто-то знает, что с этим делать – добро пожаловать в комментарии. Но на работоспособность самой программы это не влияет, только на предупреждение при вызове appimagetool.

Скачать с гитхаба

Основная тема по DoubleContact

hobbit
()

Можно ли определить (хотя бы примерно) искажённый байт в JPEG?

 , ,

Привет, ЛОР.

Возникла нетривиальная задачка уровня «шлакоблокунь». :) Есть кучка JPEG-файлов, вытащенных из MJPEG-потока с довольно большим количеством битых участков. Оригинальный поток тоже имеется и связать позиции файлов с позицией потока я могу. Нужно определить закономерность, с которой возникают сбои.

Со сбоями в растровых изображениях я сталкиваюсь не в первый раз, даже написал простенький алгоритм, который на раскодированном битмапе считает разности цветовых компонентов и определяет строку, с которой начался искажённый фрагмент. Немножко усложнив алгоритм, можно и пиксель определить (хотя там уже есть нюансы). Так вот, а получится ли, зная X и Y, определить, какой байт в JPEG-е виновен в его подтверждении?

На самом деле да, я понимаю, что этих байт может быть несколько, поскольку JPEG собирается из нескольких таблиц. Но если на выходе у меня будут несколько «подозреваемых», это тоже поможет сложить пазл.

Битые байты, разумеется, могут попадать не только на «количественные» поля. Но если в сигнатуре «JFIF» или «AVI1» вместо I будет Q или что-то вообще нечитаемое – тут сразу понятно, кто виноват. Если в таблице смещений попадётся смещение, выкидывающее за пределы файла – тоже. К сожалению, не все искажения такие легко определяемые.

Уже вижу, как мне пишут про проблему XY. Да, методически я занимаюсь не совсем правильными вещами, надо искать сам источник искажений. Но доступ к нему у меня не слишком регулярный, а вот анализ потока помог бы понять, периодические эти искажения или нет? И если да, то с каким периодом? Байты только искажаются или добавляются/пропадают? В зависимости от этого уже можно определиться, кого пинать – канал связи, сервисы, через которые этот поток проходил до меня и др.

hobbit
()

Как правильно включить поддержку ICU в SQLite

 , ,

Привет, ЛОР.

Столкнулся с тем, что в SQLite не работают upper() и прочие регистрозависимые строковые функции для нелатинских символов. Долго искал, думал, я дурак, но оказывается, это поведение по умолчанию, давным-давно и много где описанное.

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

Ссылка из статьи не работает, но в актуальных исходниках SQLite искомый icu.c находится без труда. Качаю. Собираю. Получаю libsqliteicu.so. Гружу его из SQLite CLI – LIKE и upper() начинают прекрасно работать.

Теперь пытаюсь подгрузить это в своей кутешной программе. Сначала вызываю sqlite3_enable_load_extension(), потом sqlite3_load_extension(). Первое проходит успешно, во втором получаю ошибку:

/usr/lib/libsqliteicu.so: undefined symbol: sqlite3_sqliteicu_init

Лезу в исходник: там вместо указанной присутствует функция sqlite3_icu_init(). Ну, хитрожопый я, конечно же, попробовал её переименовать. Добился только того, что текст ошибки поменялся на «error during initialization:».

По совету @utf8nowhere стал указывать другое имя точки входа третьим параметром sqlite3_load_extension() – тот же самый error during. Двоеточие намекает, конечно, что у ошибки должна быть дополнительная расшифровка, но где её искать, не очень понятно.

Подобного рода разночтения, конечно, первым делом наводят на мысль о несовместимости версий. Начинаю потрошить кутешный драйвер БД. Иду в /usr/lib/qt/plugins/sqldrivers (у меня он соответствует Qt5) и делаю ldd libqsqlite.so. Получаю, в числе прочего:

libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0x0000728bea28f000)

В свою очередь, libsqlite3.so.0 является симлинком для libsqlite3.so.3.49.1. То есть «библиотечная» SQLite той же версии, что и sqlite3 CLI. Но во втором загрузка расширения работает, а в первой нет.

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

P.S. Попробовал вариант с пересборкой, теперь кутешный драйвер верещит «Driver not loaded», а это может означать что угодно…

Обновление: как выяснил @utf8nowhere, загрузка расширения не работает, если есть открытые запросы к БД. Необходимо либо вызвать у них метод finish(), либо проследить, чтобы соответствующие объекты завершили работу (вызван деструктор).

hobbit
()

В mcedit сломались неюникодные кодировки

 ,

Привет, ЛОР.

С обновлением системы прилетел mc 4.8.33. И при попытке отредактировать файлы в кодировках, отличных от UTF-8, часть заглавных букв в mcedit начинает отображаться точками. Грешил на шрифт – но mcview тот же самый текст отображает нормально, проблема именно при редактировании, когда я начинаю переключаться между кодировками в mcedit по Alt+E.

К примеру, в koi8-r сбивается отображение заглавных букв с А по П, в cp1251 – с А по О.

Скорее всего, придётся засучить рукава и написать в багтрекер, но прежде чем этим заниматься, я хочу понять, есть ли такая проблема у кого-нибудь на ЛОРе, и вообще, проблема ли это самого mc или какой-нибудь используемой библиотек.

Система Manjaro KDE с актуальными обновлениями, mc запускается из konsole. Шрифт – Terminus 12 (но как я уже сказал, mcview он нормально работать из той же konsole не мешает).

P.S. Я обычно не модерирую темы, которые сам создаю. Но если кто-то очень захочет подкинуть флуда на тему «азаза, какие ещё неюникодные кодировки в 2025 году» – буду сносить не глядя, по 17 пункту. Если вам лично не нужно – проходите мимо. А тут разговор про штатную и для многих очень удобную функцию mcedit.

hobbit
()

Manjaro затыкается на обновлении

 , ,

Привет, ЛОР.

В отличие от истории двухлетней давности, графическая обновлялка, она же pamac-manager, обещает мне 7 ГБ обновлений. Даю добро, получаю:

не удалось удовлетворить зависимости:
- невозможно удовлетворить зависимость «libcap=2.71», необходимую для lib32-libcap
- невозможно удовлетворить зависимость «libffi=3.4.6», необходимую для lib32-libffi
- невозможно удовлетворить зависимость «pcre2=10.44», необходимую для lib32-pcre2
- невозможно удовлетворить зависимость «expat=2.6.4», необходимую для lib32-expat
- удаление qxlsx-qt6 нарушает зависимость «qxlsx-qt6», необходимую для stellarium

Библиотеки серьёзные, от lib32-expat, в частности, судя по выхлопу pactree -r, зависят steam и blender.

Ладно, запускаю sudo pacman -Syu:

 core is up to date
 extra is up to date
 community.db failed to download
ошибка: не удалось получить файл 'community.db' из mirror.truenetwork.ru : The requested URL returned error: 404
ошибка: не удалось получить файл 'community.db' из mirror.kamtv.ru : The requested URL returned error: 404
ошибка: failed to synchronize all databases (не удалось получить некоторые файлы)

После этого я уже начал искать в гугле упоминание проблем с community.db, и наткнувшись на эту тему, понял, что его просто объединили с extra.db.

В теме по ссылке много буков про то, как отредактировать /etc/pacman.conf разными редакторами, удалив оттуда секцию [community], но я просто-напросто обнаружил у себя в /etc файл pacman.conf.pacnew, который специально для нас, козлов, подготовили на замену оригинальному. Вот интересно, он должен был сам заменить оригинальный, но что-то не сработало? Или это принципиально ручная операция? Ладно, переименовываю его, то же самое проделываю с pacman-mirrors.conf. Ругань поменялась, теперь козлом отпущения оказался stellarium. С болью в сердце удаляю его, запускаю pamac-manager… и обновление, наконец, пошло.

Закончится – отпишусь, мало ли, может, не я один такой.

hobbit
()

ReactOS 0.4.15

 

Группа Open Source

После долгого перерыва разработчики Windows-совместимой операционной системы ReactOS, исходные тексты которой доступны по лицензии GPL, выпустили версию 0.4.15.

В этом выпуске:

  • исправления Plug and Play;
  • исправления в аудиостеке;
  • исправления в управлении памятью;
  • улучшение работы реестра;
  • улучшения в работе системных утилит, включая Notepad, Paint, RAPPS и Input Method Editor.

ReactOS разрабатывается группой энтузиастов с 1998 года и по-прежнему находится в альфа-стадии.

>>> Подробности (reactos.org)

hobbit
()

Карта указателей, ссылок и for по диапазону

 , ,

Привет, ЛОР.

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

Попробовал примерно так:

struct AnyS {
    int a, b, c;
};

std::list<AnyS> anyList;
std::map<int, AnyS&> refs0, refs1;

    AnyS any;
    any.a = 0;
    anyList.push_back(any);

    int i=0;
    for (AnyS& yaAny: anyList) {
        if (yaAny.a==0)
            refs0[i] = yaAny;
        // Тут м.б. рациональнее было бы сделать switch, но не суть, это демо
        i++;
    }

На строке с присвоением получаю ошибку

/usr/include/c++/11/tuple:1824: ошибка: value-initialization of reference type ‘AnyS&’

Т.е. оно пытается присваивать по значению, хотя я хотел явно противоположного, и у него это не получается.

А что самое смешное? А то, что если я отказываюсь от ссылок и работаю по старинке с указателями, то всё прекрасно работает! Примерно так:

// ...
std::map<int, AnyS*> refs0, refs1;
//...
    for (AnyS& yaAny: anyList) {
        if (yaAny.a==0)
            refs0[i] = &yaAny;
        i++;
    }

Но нельзя ли всё-таки как-то заставить работать вариант со ссылками? Они, типа, безопаснее, и красивее и вообще сейчас считается, что работа с указателями это фи.

Я, конечно, догадываюсь, что я как-то неправильно использую range-based for… но вот как правильно…

P.S. GCC 11.3.1, если это важно.

hobbit
()

Хочу Live Flash с двумя разделами

 ,

Привет, ЛОР.

Я вот о чём задумался. Часто, загружаясь с лайва, надо иметь возможность что-то записать с компа на сменный носитель. Понятно, можно воткнуть две флешки в разные порты и смонтировать вторую руками.

А ведь, наверное, можно было бы сделать готовый лайв с двумя разделами: с одного грузится система, другой автомонтируется при входе как rw. И телодвижений меньше, и экономится один порт USB (ситуация, когда доступно только одно гнездо, не самая частая, но иногда бывает).

Интересно, такое кто-нибудь уже сделал?

hobbit
()

А как комфортно работать со строками в современном C++?

 , ,

Привет, ЛОР.

Старый добрый std::string, как мы знаем, это по сути char* на стероидах. А во многих случаях надо работать со строками именно как со строками текста.

К примеру, в библиотеке QtCore, входящей во фреймворк Qt, есть класс QString. Её часто ругают за изобретение велосипедов. Но именно благодаря этой «фабрике велосипедов» я могу написать, например, так:

QString s;
QStringList sl;
...
if (sl.contains(s, Qt::CaseInsensitive)) {
    ...
}

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

А как такое сделать без QtCore, на голом STL? В C++20 появился некий std::u8string, он мне поможет, например?

hobbit
()

Линус Торвальдс пояснил свою позицию в отношении приёма изменений на Rust

 ,

Группа Ядро Linux

К обсуждению сопротивления мэйнтейнеров внедрению Rust в ядро подключился Линус Торвальдс, который пояснил, что никто не заставляет мэйнтейнеров изучать язык Rust, использовать код на Rust, или принимать во внимание наличие в ядре кода на Rust. Мэйнтейнеры могут спокойно продолжать работать только с кодом на Си и никак не пересекаться с Rust. Но подобные сопровождающие не могут и влиять на то, как развивается Rust в ядре, например, не могут вмешиваться в организацию внешнего взаимодействия Rust-кода с кодом их подистемы.

Линус раскритиковал действия Кристофа Хелвига, мэйнтейнера подсистем DMA, KVM, Slab Allocator и архитектуры PowerPC. По мнению Линуса, Кристоф превысил свои полномочия и попытался повлиять на код, который не затрагивал код подсистемы DMA, был реализован в отдельном подкаталоге и не влиял на код, за который отвечает Кристоф. Кристоф попытался контролировать то, для чего используется подсистема DMA, и его действия можно сравнить с попыткой запрета использования DMA в каком-то драйвере, лишь потому, что ему не понравился этот драйвер. Итог: несмотря на то, что сопровождающие отвечают за свой код, они не отвечают за то, кто и как использует результат работы этого кода.

>>> Письмо Линуса

>>> Подробности (OpenNet) (opennet.ru)

hobbit
()

Как распарсить версию ffmpeg из программы

 ,

Привет, ЛОР.

Не секрет, что в библиотеках ffmpeg неоднократно ломали API. Поэтому важно проверять их версию на этапе компиляции.

В libavutil есть ffversion.h. Однако вместо понятных XXX_VER_MAJOR и XXX_VER_MINOR там определяется строка. Например, для старенького ffmpeg 3.2 написано:

#define FFMPEG_VERSION "3.2

А для более новых, так и вообще с буковками:

#define FFMPEG_VERSION "n4.4.5"

или

#define FFMPEG_VERSION "n7.1"

Как вы думаете, как в таких условиях написать #if для препроцессора, что код ниже действителен, например, для ffmpeg 4 и выше? Например, в совсем древних ffmpeg-ах была функция avcodec_register_all(), потом её выкинули, а потом выкинули и av_register_all(). И это только одна из «мутаций».

Обновление: всем спасибо за ответы, видимо, самый надёжный метод – проверять версию не FFMPEG в целом, а библиотек из его состава. Для этого соответствующие определения есть, см. комментарий ниже.

FFMPEG API changes log

hobbit
()

Фиксированное число знаков после запятой

 ,

Проблема решена, дело было в моей невнимательности (см. ниже)

Привет, ЛОР.

Встала казалось бы, банальная задача – выводить по результатам SQL-запроса числа, где число знаков после запятой всегда фиксировано, даже если это нули.

В официальной доке SQLite написано:

The format(FORMAT,…) SQL function works like the sqlite3_mprintf() C-language function and the printf() function from the standard C library.

Но при этом в сишечке я могу написать:

    printf("%0.2f\n", 33.35);
    printf("%0.2f\n", 44.);

И первое число выведется как 33.35, а второе как 44.00. Такой результат меня устраивает, и что-то подобное я хотел получить в SQLite.

Авотфиг.

select format(magicnumber/100.00, '%0.2f') from magictable;

(где magicnumber имеет тип integer) возвращает результат с ОДНИМ нулём. Т.е. если magicnumber равен 3845, то всё в порядке, в выводе будет 38.45. А вот если он равен 4200, то вывод даст 42.0 (один нуль вместо двух).

Ради справедливости надо отметить, что эксперимент у меня не совсем чистый, я SQLite дёргаю через QtSql. Но поскольку результатом format() уже является строка, я полагаю, что на результат это влиять не должно. Совсем чистым экспериментом было бы написать тестовую программу на голом libsqlite3-dev, но боюсь, чем колхозить такой тест, я скорее плюну и сделаю форматирование не в SQL а уже на стороне плюсов, в своём наследнике QSqlQueryModel – там понятно, как это делать, и там всё работает.

Но хочется всё-таки попробовать на стороне SQL… Куда копать?

lib32-sqlite 3.47.2-1
sqlite 3.47.2-1

Обновление Спасибо, оказалось, я тупо перепутал местами аргументы функции.

hobbit
()

Можно ли задать компилятор при сборке через qmake?

 , ,

Привет, ЛОР.

Есть проект на основе qmake, который должен уметь собираться как в clang, так и в g++.

По умолчанию qmake генерирует Makefile для g++, в дебиане, на котором идёт сборка, оба компилятора присутствуют. При сборке в Qt Creator я могу выбрать «комплект» из версии Qt и компилятора. Это работает.

Но хотелось бы получить такую же гибкость и при сборке из командной строки. Версия Qt определяется самим запускаемым qmake, тут понятно. А вот как задать компилятор? Может, ключом qmake (я такого не нашёл, но возможно, плохо искал)? Или конфиг какой надо править?..

hobbit
()

Драма со шрифтами из 2020 года: было ли продолжение?

 

Наткнулся тут на тему из 2020 года «Библиотека Pango отказалась от мягкого сглаживания шрифтов (hintfull)». На опеннете тоже обсуждали.

Кто-нибудь следил за дальнейшем развитием темы? Чем кончилось? Мониторы с 1920x1080 надо закапывать или?..

hobbit
()

Как собрать сторонний Kotlin-проект для Андроида

 , ,

Привет, ЛОР.

На гитхабе есть программа Simple-Contacts. Написана на Котлине. Инструкция по сборке отсутствует. Ну или слепой я её не нашёл.

Насколько я понимаю, для сборки нужны как минимум gradle и компилятор самого Kotlin. Что ещё, какие-то библиотеки? Какие телодвижения надо предпринять, чтобы получить из этого APK-файл? Как узнать диапазон поддерживаемых версий Андроида?

hobbit
()

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