LINUX.ORG.RU

Сообщения KennyMinigun

 

rpmbuild --eval %{version} package.spec

Сабж не работает:

$ rpmbuild --define "_topdir $PWD" --eval '%{version}' SPECS/package.spec
%{version}

Хочу узнать версию пакета, который будет сгенерирован. Как это сделать?

 ,

KennyMinigun
()

Как проверить версию RPM в спеке?

Доброго дня,

В связи с тем, что теги «Recommends» и «Suggests» появились только в RPM 4.11.2 а мне сейчас нужно разделаться с RPM 4.8 (возможен апгрейд)

Нужно сделать что-то такое:

%if %{rpm_version} >= 4.11.2
Suggests: package-a >= 2.11
Recommends: package-b >= 4.2
%else
Requires: package-a >= 2.11
Requires: package-b >= 4.2
%endif

Беда в том, что пока не могу придумать, как (правильно) проверить версию rpm внутри спеки.

 , ,

KennyMinigun
()

Зачем ubuntu нумерует ядра по-своему?

Собственно сабж. Сейчас, например, в бетке 16.04 ядро 4.4.0-NN-<тип>. Непонятно, что дает им такое версионирование?

И,ЕМНИП, у них всегда последняя цифра версии ядра — 0.

 ,

KennyMinigun
()

Сборка List::MoreUtils под MSYS2

Установил Git for windows, в комплекте идет perl-5.22.0. Хочу доустановить модуль List::MoreUtils. В процессе сборки полічаю вот такое сообщение:

perl Makefile.PL
Checking whether pureperl is required... no
Checking for cc... gcc
Checking for cc... (cached) gcc
Checking whether perlapi is accessible... no
configure: Cannot use Perl API - giving up

Что конкретно оно хочет? Что оно проверяет? Как заставить его работать?

 , ,

KennyMinigun
()

Почему не работает?

Есть такой код:

#!/usr/bin/env perl

use strict;
use warnings;
use Data::Dumper;

my $hash = {
    key1   => 'value1',
    key2   => 'value2',
    key3   => 'value3',
};

my @options = map { "--$_" => $hash->{$_} } # line 13
              grep { defined $hash->{$_} }  # line 14
              qw(key1 key4);                # line 15

print Dumper(\@options);

Perl 5.22 выдает такое:

syntax error at ./test.pl line 14, near "grep"
Global symbol "@options" requires explicit package name (did you forget to declare "my @options"?) at ./test.pl line 17.
Execution of ./test.pl aborted due to compilation errors.

Perl 5.10:

Not enough arguments for map at ./test.pl line 14, near "grep"
syntax error at ./test.pl line 14, near "grep"
Execution of ./test.pl aborted due to compilation errors.

«Исправление» вот такое:

-my @options = map { "--$_" => $hash->{$_} } # line 13
+my @options = map { ("--$_") => $hash->{$_} } # line 13

Внимание вопрос: почему не работает первый вариант кода? Что интерпретатору не нравится в кавычках?

 ,

KennyMinigun
()

Получение «ключей» из массива

Доброго дня.

Как известно, в Perl можно запросто сделать хеш из массива:

my @arr = (key1 => 'value1', key2 => 'value2');
# эквивалентно @arr = ('key1', 'value1', 'key2', 'value2')
my %hash = @arr;
for my $key (keys %hash) {
    print "$key => $hash{$key}\n";
}
# выведет
# key2 => value2
# key1 => value1

Что я хочу сделать, это получить индексы элементов массива, которые станут ключами при такой конвертации. Сейчас накостылял вот такую конструкцию:

my @key_indexes = grep { !($_ &1) } 0 .. $#arr;

А если более глобально, то задача стоит такая: на вход подается массив (с чётным количеством элементов) на выходе необходимо сформировать строку вида key1=value1;key2=value2;... но важно сохнанить порядок элементов как в массиве (по этому вариант «через хеш» не подходит).

Сейчас делаю что-то такое:

my $str = join ';', map { qq/$arr[$_]=$arr[$_ + 1]/ } grep { !($_ & 1) } 0 .. $#arr;

Подскажите пожалуйста, как такое сделать элегантнее.

 ,

KennyMinigun
()

Не включается дополнительный дисплей

Раньше у я с горем пополам еще мог как-то подключить второй дисплей (приходилось обходить баг с логаутом и перекрытием экранов). Однако после недавних обновлений kubuntu какая-то программа/скрипт специально выключает второй дисплей.

Суть вот в чем:

  1. на экране ввода пароля (sddm) оба дисплея работают (правда с глюком — экран ноутбука дублируется в левом верхнем углу внешнего монитора поверх его основной картиники).
  2. после входа в сессию внешний дисплей попросту что-то отключает (что отчетливо видно на экране настроек kcm: http://i.imgur.com/5uJIKOI.png)
  3. если ткнуть галку «Enabled» для внешнего монитора, сессия вылетает на экран ввода пароля (sddm снова)
  4. goto 1

Попутно, в /home/elvenfighter/.local/share/kscreen/ генерируется файл с таким содержанием: http://pastebin.com/0ERTzqwU

Еще помню, недавно (два-три дня назад) в обновлениях kubuntu какой-то конфиг sddm требовал моего подтверждения на перезапись.

Помогите пожалуйста.

 , kscreen, ,

KennyMinigun
()

Разница в shebang

Если с вот таким шебангом все понятно:

#!/usr/bin/perl
... он запускает интерпретатор по абсолютному пути и не ищет альтернатив.

То вот эти два варианта вводят меня в недоумение:

#!perl
#!/usr/bin/env perl

Вроди оба должны запускать из PATH. Но есть ли между ними принципиальная разница? Какой лучше использовать? Какой портабельнее?

 ,

KennyMinigun
()

VLC выводит только часть картинки — подтверите баг

Вобщем есть у меня VLC 2.2.1. Если открыть видео (любое), то выводится только часть картинки, как например: http://i.imgur.com/AZd2pWL.png

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

Данный баг (на моей системе) не зависит от:

  • Типа видеовывода (за исключением тех, что выводят не в окно проигрывателя, напр. ASCII)
  • Видеодрайвера (пробовал Intel и Nvidia blob)
  • Разного рода crop-инга

Однако, если в настройках выключить галочку «Встроить видео в интерфейс» — всё нормально (только приходится терпеть два окна).

 , ,

KennyMinigun
()

«Прикрепить» обьект к другому обьекту

Дано:

  1. Абстрактный класс Connection с потомками, реализуюшими его полностью (например SftpConnection).
  2. У класса Connection есть «клиент» — приложение (которое, собственно, соединения и создает).
  3. У Connection есть пачка методов, каждый из которых возвращает уникальний (в контексте данного соединения) идентификатор операции.
  4. Операции Connection фактически вызываются в пределах одного клиентского класса.

Задача: приложению надо засекать время операций по каждому соединению.

Моя задумка: каким-либо образом сделать композицию двух обьектов: Connection и ConnectionBenchmark. Но таким образом, чтоб имея экземпляр Connection можно было получить соответвтвующий экзампляр ConnectionBenchmark (в обратную сторону — не обязательно). Делать класс-аггрегатор (композицию) — не удобно, слишком много boilerplate-кода доведется писать.

Подскажите пожалуйста, как такое реализовать? Думается мне, система мета-объектов Qt должна такое позволять.

P.S. Пока только придумалось что-то типа QMap<Connection *, ConnectionBenchmark *>

 , ,

KennyMinigun
()

Plasma 5.5.3 в Kubuntu Wily

Итак, Дамы и Господа!

Подключаем kubuntu-backports PPA, czyli:

sudo add-apt-repository ppa:kubuntu-ppa/backports

Затем передёргиваем наши любимые команды:

sudo apt-get update
sudo apt-get dist-upgrade

И после login/logout наслаждаемся нашей свеженькой плазмой 5.5!

>>> Подробности

P.S. Арчеводы и прочие читеры, которые обновились пару недель раньше, гуляют стороной, здесь тред радости.

 , , ,

KennyMinigun
()

Steam Machines — всё? Или ждем развития событий?

На данный момент видно, что у Valve с первым выпуском Steam Machines & Co первый блин получился комом:

  • Заявлено довольно большое количество нативных игр для Steam OS, однако немногие из них понастоящему играбельны
  • Цена на Steam Machines начинается от $500 за что-то несовсем подходящее для AAA:

    CPU: AMD Athlon X4 840
    GPU: AMD Radeon R9 270 2GB
    Memory: 4GB DDR3 1600MHz
    Storage: 500GB 7200 RPM HDD

    До $700 за более-менее адекватный конфиг и до $5000 за Falcon Northwest Tiki для «илитки». В то время, как PS4 или XBox One можно купить за $350.
  • Steam Controller — недо-клавиатура/мышь, пере-геймпад. Как замена тредиционным элементам укправления на PC не сильно подходит. В то же время не имеет простоты традиционного геймада.
  • Steam Link — зачем оно надо если я просто могу подключить свой SmartTV к PC?
  • Первичные шероховатости: где-то с настройками перемудрили, где-то что-то подтормаживает

Вот моя точка зрения на состояние вещей (как человека ниразу не сталкивавшегося со Steam Machines вживую): все сводится к тому, что данный выпуск от Valve имеет только одну ценность — свободу. А последняя, как известно, не ценится до момента, пока ее не отберут.

В итоге появляется вопрос: Steam Machines (и ко.) — всё? Или ждать второго поколения и исправления ошибок? Осилит ли Valve (финансово) поднять еще одно поколение? Останется ли оптимизм у вендоров (Dell, Zotac, ...) на производство Steam Machnies?

 , , ,

KennyMinigun
()

Unit-тестирование и --wrap (ld)

Есть некий файлик mylib/ldap.c, в котором есть функция int search(LDAP *ld, const char *id). Этот файлик входит в разделяемую библиоту libfoobar.

Задача — изолировать и оттестировать функцию foobar. Однако проблема в том, что эта функция использует как другие функции с библиотеки libfoobar так и функции с libldap-2.4.

Библиотека libfoobar собирается отдельно от тестов (отдельным CMake проектом). Затем тест собирается приблизительно так:

add_executable(search_test search_test.c)
set_target_properties(search_test PROPERTIES
    LINK_FLAGS "-Wl,--wrap=internalFunc -Wl,--wrap=ldap_search_s"
)
target_link_libraries(search_test ${FOOBAR_LIBRARIES})
add_test(NAME search_test COMMAND search_test)
И есть приблизительно такой код в search_test.c:
int __wrap_internalFunc(const char *str) {
    fprintf(stderr, "## DEBUG: __wrap_internalFunc: %s\n", str);
    return __real_internalFunc(str);
}

static void test_search(void **state) {
    LDAP *ld = (*(TEST_DATA **) state)->ldap;

    int err = search(ld, "something");
    assert(err == LDAP_SUCCESS);
}

Проблема состоит в том, что --wrap не срабатывает для внутренних функций, т.е. search() не дергает __wrap_internalFunc(), а напрямую лезет к оригинальной internalFunc() (internalFunc не является static и находится в одном исходном файле с search()). Пробовал собирать libfoobar статически — не помогает.

Помогите пожалуйста понять процесс линковки, и где моя ошибка.

P.S. Собственно, заюзана фича --wrap из ld. man ld:

--wrap=symbol
Use a wrapper function for symbol. Any undefined reference to symbol will be resolved to «__wrap_ symbol ». Any undefined reference to «__real_ symbol » will be resolved to symbol.
This can be used to provide a wrapper for a system function. The wrapper function should be called «__wrap_ symbol ». If it wishes to call the system function, it should call «__real_ symbol ».

Here is a trivial example:

void *
__wrap_malloc (size_t c)
{
  printf ("malloc called with %zu\n", c);
  return __real_malloc (c);
}

If you link other code with this file using --wrap malloc, then all calls to «malloc» will call the function «__wrap_malloc» instead. The call to «__real_malloc» in «__wrap_malloc» will call the real «malloc» function.
You may wish to provide a «__real_malloc» function as well, so that links without the --wrap option will succeed. If you do this, you should not put the definition of «__real_malloc» in the same file as «__wrap_malloc»; if you do, the assembler may resolve the call before the linker has a chance to wrap it to «malloc».

 , ,

KennyMinigun
()

Konsole: подтвердите баг

От версии Konsole не зависит(?) Нужен такой сетап:

  1. Settings -> Tab bar visibility: Show Tab Bar When Needed
  2. Settings -> Show 'New Tab' and 'Close Tab' buttons: No (для того, чтоб пункт 1. действительно работал)

Шаги:

  1. Открыть konsole
  2. Создать вторую вкладку (хоткей по уполчанию Ctrl+Shift+T) (важно, чтоб было именно две вкладки)
  3. Передвинуть новую вкладку хоткеем (Ctrl+Shift+LeftArrow или Ctrl+Shift+RightArrow)

После этого панель вкладок пропадает, однако вкладки остаются на месте (между ними можно по прежнем переключатся хоткеями и если добавить третью вкладку, то панел снова появляется).

Проявляется ли у вас этот баг? И если баг да, скажите пожалуйста, что у вас стоит в Settings -> New Tab Behaviour? А также интересна ваша версия Konsole.

 , ,

KennyMinigun
()

KDE Applications 15.12

Собственно сабж: https://www.kde.org/announcements/announce-applications-15.12.0.php

Разработчики мамой клянутся, что фиксили и полировали все, что только можно (включая kdenlive и contact suite). KSnapshot заменили на новый, нескучный Spectacle. По просьбам трудящихся было запилено много разных KDE Games на KF5. В целом, по их же словам, на KF5 уже портированно 126 приложений.

// а крусадера все нет, плак-плак

 ,

KennyMinigun
()

Не собирается QtCreator на Ubuntu 15.10

Добрый день ЛОР,

В следствии того, что бинарники на qt.io собраны с помощью gcc 4(.?) на RHEL 5.5 а в Ubuntu 15.10 по умолчанию gcc 5 самосборные плагины для QtCreator крашатся в совсем непонятных местах (как уверяют разработчики — несовместимость ABI gcc 4 и gcc 5).

В связи с этим решил собрать для себя тестовый полигон QtCreator из git (https://github.com/qtproject/qt-creator.git) используя системное Qt (как я надеюсь собранное gcc5). Однако имею проблему:

$ export QT_SELECT=5
$ qmake -r ../qt-creator/qtcreator.pro 
Reading ../qt-creator/src/src.pro [../qt-creator-build-sys/src]
 Reading ../qt-creator/src/libs/libs.pro [../qt-creator-build-sys/src/libs]
  Reading ../qt-creator/src/libs/aggregation/aggregation.pro [../qt-creator-build-sys/src/libs/aggregation]
...
 Reading ../qt-creator/src/plugins/plugins.pro [../qt-creator-build-sys/src/plugins]
  Reading ../qt-creator/src/plugins/coreplugin/coreplugin.pro [../qt-creator-build-sys/src/plugins/coreplugin]
Project ERROR: Unknown module(s) in QT: help

Даже после установки пакетов libqt5help5 и самого qtcreator проблема не исчезла. Подскажите пожалуйста, как собрать?

 , , ,

KennyMinigun
()

Программа с автоматической аутентификацией на ресурсе

Привет ЛОР,

Есть абстрактное приложение на хосте в вакууме. Оно работает месяцами без людского присмотра (возможно перекачивая данные с одного хранилища в другое). Этому приложению необходимо себя аутентифицировать на неком ресурсе (например откуда оно будет брать или куда будет заливать данные).

Так вот, вопрос в том, как правильно сделать аутентификацию на неком ресурсе для такого приложения? Т.е. чтоб:

  • Злоумышленники не могли себя выдать за это самое приложение
  • Само приложение беспрепятственно, в автоматическом режиме (с минимумом людского присмотра) аутентифицировалось на ресурсе

Я даже не знаю, как информацию о сабже правильно нагуглить. Подскажите пожалуйста в какую сторону копать.

 , ,

KennyMinigun
()

Amarok 2.9 таки бета

Хладагент медленно стекал по моей правой голени когда я наконец смог увидеть новость на сайте: https://amarok.kde.org/en/node/887

Ничего нового интересного мы там не увидим. Ну развечто посыпку из новых багов багфиксов.

Джва года делали! Финальный релиз запланирован на следующий раз. Ждём и надеемся.

 ,

KennyMinigun
()

Зимняя резина

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

В связи с резким приближением зимы меня обеспокоил вопрос: а надо ли менять резину на велосипеде?

Сейчас вместо покрышек имею вот это:
http://i.imgur.com/GNRV2eNh.jpg
http://i.imgur.com/9AS4Gzvh.jpg
http://i.imgur.com/dq72IeUh.jpg

Дано:

  • Температура воздуха +3..-3 (местами до -10)
  • Езда по городу (14 км в день)
  • В силу предыдущего пункта: снег убирают, по этому одно-двухдневный слой снега (но возможен гололед и притоптанный снег)
  • Колеса 28", 19-622
  • Покрышки {28..44}-622 (сейчас стоят 40-622)

Скажите, стоит ли менять резину на зиму? Если да, то на накую? (Сейчас присматриваюсь к SCHWALBE Marathon Mondial Performance 28).

P.S. Бюджет особо не ограничен: собственное здоровье важнее денег

P.P.S. Линукс здесь при том, что я на велосипеде на работу езжу, где и работаю с линуксом.

 ,

KennyMinigun
()

CMake: прочитать версию из файла

Доброго дня,

В корне проекта должен быть файл VERSION, из которого нужно прочитать версию для CMake (переменные PROJECT_VERSION_{MAJOR,MINOR,PATCH}). Внутренний синтаксис файла пока не определнен, по этому его можно «подогнать» под задачу.

Все было бы просто, если бы надо было читать только из CMake то проблема бы решалась простым include(${PROJECT_SOURCE_DIR}/VERSION.cmake). Но вот тут есть проблема: данный файл с версией надо еще парсить из обычного GNU/Makefile (да-да legacy, выкинуть нельзя).

Да и к тому же в этом файле еще должны быть версии для двух библиотек из проекта (итого выходит 3 комплекта по 3 переменных):

PROGRAM_VERSION_MAJOR = 1
PROGRAM_VERSION_MINOR = 0
PROGRAM_VERSION_PATCH = 3

CORELIB_VERSION_MAJOR = 2
CORELIB_VERSION_MINOR = 2
CORELIB_VERSION_PATCH = 0

CLIENTLIB_VERSION_MAJOR = 1
CLIENTLIB_VERSION_MINOR = 0
CLIENTLIB_VERSION_PATCH = 8

Так вот, подскажите какой нибудь формат файла, из которого можно просто прочитать переменные, типа:имя = значение. Не хочется писать велосипеды.

 , ,

KennyMinigun
()

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