LINUX.ORG.RU

Сообщения KennyMinigun

 

Ubuntu Cleaner

Как говорится «Ubuntu — не линукс». Вот собственно накостылизировали для нее Cleaner: https://github.com/gerardpuig/ubuntu-cleaner

И, соответственно, PPA:

sudo add-apt-repository ppa:gerardpuig/ppa
sudo apt-get update && sudo apt-get install ubuntu-cleaner

Ислочник: http://www.omgubuntu.co.uk/2016/12/free-space-ubuntu-cleaner-janitor-app

 , ,

KennyMinigun
()

Кнопочки на Android 7.1

Прилетело обновление системы на Nexus. И они поменяли расположение кнопочек в горизонтальном положении: теперь они всегда снизу (около порта зарядки), а не справа, как раньше. Напрягает то, что порядок кнопок тоже меняется в зависимости от ориентации экрана: при наклоне налево кнопка «назад» вверху, а при наклоне направо — внизу.

Иллюстрации:

Оно как-нибудь настраивается?

 , ,

KennyMinigun
()

GDB Python, проинспектировать std::vector

Привет,

Я снова с GDB. Теперь пытаюсь написать GDB command корорая мне напечатает вектор как нужно. Но почему-то не могу из gdb.Value (std::vector<Foo>) добраться ни до размера вектора ни до его данных.

Т.е. есть приблизительно такой код:

struct Foo { 
    int a; 
    explicit Foo(in a) : a(a) {}
};

int main() {
    std::vector<Foo*> v = { new Foo(1), new Foo(2), new Foo(3) };
    return 0;
}

Сейчас я печатаю вектор в такой способ:

def FooVect (gdb.Command):
  def __init__(self):
    super(FooVect, self).__init__('foovect', gdb.COMMAND_OBSCURE, gdb.COMPLETE_SYMBOL)

  def invoke(self, arg, from_tty):
    size = gdb.parse_and_eval('({0}).size()'.format(arg))
    for i in range(0, size):
      print '[{0}] {1}'.format(i, gdb.parse_and_eval('({0})[{1}].a'.format(i, arg)))

Потом в gdb:

(gdb) foovect v
[0] 1
[1] 2
[2] 3

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

Но если код invoke (например) сделать таким:

  v = gdb.parse_and_eval(arg)
  print v[0]

То ничего не получается:

Traceback (most recent call last):
  File "<string>", line 2, in <module>
gdb.error: Cannot subscript requested type.
Error while executing Python code.

Более того: в через v вообще не видно как достаться до данных вектора:

(gdb) python
>v = gdb.parse_and_eval('v')
>print dir(v)
>end
['__abs__', '__add__', '__and__', '__call__', '__class__', '__delattr__', '__delitem__', '__div__', '__doc__', '__eq__', '__float__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__int__', '__invert__', '__le__', '__len__', '__long__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__nonzero__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rxor__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'address', 'cast', 'const_value', 'dereference', 'dynamic_cast', 'dynamic_type', 'fetch_lazy', 'is_lazy', 'is_optimized_out', 'lazy_string', 'reference_value', 'referenced_value', 'reinterpret_cast', 'string', 'type']

Есть идеи? Может системные pretty-printers для std::vector мешают?

(gdb) python
>v = gdb.parse_and_eval('combinedPUPaths')
>print v
>end
std::vector of length 3, capacity 4 = {
  0x7f3edd4d66f0,
  0x7f3edd4d6710,
  0x7f3edd4d6720
}

P.S.

$ cat ~/.gdbinit
set print array on
set print pretty on
set print object on
set print static-members off

 , ,

KennyMinigun
()

GDB напечатать вектор обьектов (только некоторые поля)

Допустим есть что-то такое в коде:

struct Foo {
   int a;
   std::string b;
};

std::vector<Foo*> foos;

Я хочу в gdb напечатать все обьекты из вектора, но только поле «b». Пытаюсь сделать через GDB Command:

(gdb) define pfoo
  set $v = $arg0
  set $i = 0
  while ($i < $v.size())
    print $v[$i]->b;  
  end
end

(gdb) pfoo foos 
Однако получаю ошибку:

Attempt to take address of value not located in memory.

Или еще проще:

(gdb) set $v = foos
# работает
(gdb) print $v
# не работает
(gdb) print $v.size()
Attempt to take address of value not located in memory.

Помогите пожалуйста сделать задуманное.

 , ,

KennyMinigun
()

Майкрософтовский Linux — FS metadata fail

Суть такова: не можно создавать/редактировать «линуксовые» файлы (те, что под %localappdata%\lxss) программами windows, так как это чревато порчей метаданных, и как следствие недоступностью файлов из Linux.

Для !Ъ: https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-not-change-linux-f...

 , ,

KennyMinigun
()

Зачем писать statement в последней пустой секции switch?

Итак, есть какой-то такой говнокод:

enum Whatever { ONE = 1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT };

void foo(Whatever v) {
    switch (v) {
    case ONE:
    case TWO:
    case SIX:
        std::cout << v << std::endl;
    case THREE: // fallthrough
    default:
       break; // без хотябы ";" не компилируется: 
              // error: expected primary-expression before '}' token
    }
}

Вопрос: как ничего не делать и жить счастливо зачем в конце обязателен какой-нибудь statement? Почему что мешает сделать как в случае fallthrough?

 , ,

KennyMinigun
()

Уже два процента

Последние три месяца подряд рыночная доля десктопного Линукса держится чуть выше двух процентов (по данным аналитической компании New Market Share).

Конечно же статистика — одна из форм лжи и статистика Wikimedia по прежнему показывает привычные 1.2%. Но в любом случае, наблюдается тенденция по увеличению (а не уменьшению) доли Линукса на десктопах.

Оригинал новости: http://www.omgubuntu.co.uk/2016/10/linux-marketshare-2-percent-3rd-month-row

 , два процента,

KennyMinigun
()

Почему в стандарте нет std::all_of (и компании) для контейнеров?

Вопрос такой: что (концептуально) мешает добавить в стандартную библиотеку что-то такое:

namespace std {

template <typename Container, typename UnaryPredicate>
bool all_of(const Container& c, UnaryPrecidate p) {
    return all_of(c.begin(), c.end(), p);
}

}

Да, я понимаю, что данная версия не такая гибкая как с итераторами, однако на моей практике 90% случаев используется для всего контейнера. А добавление таких функций позволило бы писать более аккуратный код:

std::all_of(container.begin(), container.end(), [] (const T &t) { return isOk(t); }
// vs
std::all_of(container, [] (const T &t) { return isOk(t); });

 

KennyMinigun
()

C++ constexpr + static member того же класса

Хочется реализовать что-то типа:

class Foo {
public:
    constexpr Foo(const int value) : value(value) {}    

    constexpr static Foo UNKNOWN = std::numeric_limits<int>::max();
    constexpr static Foo ANY     = UNKNOWN - 1;
    
private:
    int value;
};

Естественно, такой код не собирается, поскольку на момент обьявления constexpr UNKNOWN/ANY тип Foo eще недоконца определен: http://ideone.com/gwCkln

prog.cpp:7:66: error: 'constexpr const Foo Foo::UNKNOWN' has incomplete type
     constexpr static Foo UNKNOWN = std::numeric_limits<int>::max();
                                                                  ^
prog.cpp:8:46: error: 'constexpr const Foo Foo::ANY' has incomplete type
     constexpr static Foo ANY     = UNKNOWN - 1;
                                              ^

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

Подскажите, можно ли в данной ситуации как-то использовать constexpr а не const.

P.S. Использую g++ 5.3 с -std=c++14

 ,

KennyMinigun
()

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

Заметил за собой, что большую часть времени у меня открыты два приложения (окна):

  1. Браузер
  2. Консоль

Интересно, какая ситуация с этим у остальных ЛОРовцев? Перечисляйте клас приложений, в скобках можно указывать производителя и марку.

P.S. Оболочка (shell) и WM не в cчёт.

 , ,

KennyMinigun
()

Kubuntu, обновление до 16.10 beta 2 не работает

Мне взгруснулось и захотелось проблем, решил накатить beta 2 предстоящего релиза убунты 16.10 (Yakkety Yak). Однако не получилось:

~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.1 LTS
Release:        16.04
Codename:       xenial

~ $ sudo do-release-upgrade -h
Usage: do-release-upgrade [options]

Options:
  -h, --help            show this help message and exit
  -V, --version         Показати версію та вийти
  -d, --devel-release   Перевірити можливість оновлення до останнього випуску,
                        що перебуває в стані розробки
  --data-dir=DATA_DIR   Каталог, який вміщує файли даних.
  -p, --proposed        Спробуйте оновитись до останньої версії за допомогою
                        $distro-proposed
  -m MODE, --mode=MODE  Запустити в особливому режимі оновлення. Наразі
                        підтримуються режим "стільниця" для регулярного
                        оновлення персональних робочих станцій та "сервер" для
                        серверних систем.
  -f FRONTEND, --frontend=FRONTEND
                        Запустити вказаний інтерфейс оболонки
  -s, --sandbox         Протестувати оновлення в безпечному режимі
  -c, --check-dist-upgrade-only
                        Перевіряти доступність нової версії дистрибутива і
                        повертати результат за допомогою кода виходу.
  -q, --quiet       
    
~ $ sudo do-release-upgrade -d
Перевіряється наявність нового випуску Ubuntu
Нової версії не знайдено

Подскажите, что ему не дает накатить бету?

Перемещено JB из admin

 , ,

KennyMinigun
()

Kubuntu vs KDE Neon

Я тут на днях случайно установил в коробку второе, и оказалось, что у него кишки от первого а KDE новее. Я так понял, это дистр от предыдущего начальника Kubuntu? Или что там за драма?

Собственно, достало, то, что Plasma уже 5.7.5, а в кубунте только какая-то 5.6. В связи с этим вопрос: стоит ли сменить основной дистр на KDE Neon? Убунтушную часть они обновляют своевременно или как в минте?

 , , ,

KennyMinigun
()

Perl, перенаправить STDOUT дочернего процесса

Привет,

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

use IPC::Open3;
use Symbol qw(gensym);

sub redirect {
    my ($command, $handle) = @_;

    my ($stderr, $stdin) = (gensym, undef);
    # вот тут STDOUT дочернего процесса должен открыться в $handle
    my $pid = open3($stdin, $handle, $stderr, @{$command});
    waitpid($pid, 0);
   
    die 'Child error' if ($?);
}

Никаких требований к внутренней имплементации нет (IPC::Open3, IPC::Run, Whatever). Подскажите пожалуйста как сделать

 , ,

KennyMinigun
()

Canonical (снова?) спонсирует/патронит KDE

 , ,

KennyMinigun
()

SSH ProxyCommand для оффтопика

Пытаюсь склонировать код с github.com. Суть в том, что $hostname использует прокси. Через HTTPS всё работает (с выставленой $https_proxy, разумеется).

Однако, мне захотелось большего: не вводить юзернейм и пароль для push (а точнее — использовать ключи). То есть дружить с github.com посредством ssh. Сам github предоставляет статью Using SSH over HTTPS port. Так что, в принципе, проблем с закрытым портом 22 на прокси быть не должно.

Покопавшись в интернетах, нашёл совет по использованию OpenSSH за прокси, выглядит что-то вроди:

ProxyCommand   nc -X connect %h %p

Проблема в том, что под оффтопик netcat найти можно (даже в исходниках). Однако там толи версия древняя, птоли по просту нет флага -X. Может у кого-нибудь есть решение проблемы?

 , , , ,

KennyMinigun
()

Ubuntu в VirtualBox: не работает добавление в /etc/resolv.conf

Собственно, проблема. Хочу, чтоб в /etc/resolv.conf показались следуюшие строки (на самом деле — хватит лишь строк 1 и 2):

nameserver 10.136.85.27
nameserver 10.136.85.32
nameserver 10.0.2.3
nameserver 10.0.2.2
Для чего, я записал их в /etc/resolvconf/resolv.conf.d/base. Но, после запуска sudo resolvconf -u получаю лишь
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1

В интернетах предлагают посмотреть настройки NetworkManager, что я и сделал:

$ nmcli connection modify "$CONNECTION" ipv4.dns "10.136.85.27 10.136.85.32 10.0.2.3 10.0.2.2"

$ nmcli connection show "$CONNECTION" | grep -Pi ipv?4.dns
ipv4.dns:                               10.136.85.27,10.136.85.32,10.0.2.3,10.0.2.2
ipv4.dns-search:                        
ipv4.dns-options:                       (default)
IP4.DNS[1]:                             10.0.2.3

Толку — ноль. Как воркераунд записал те строки в /etc/resolvconf/resolv.conf.d/head. Помогите понять, что не работает.

 , , ,

KennyMinigun
()

Google Dublin, как оно?

Собственно, хотелось бы поинтересоваться у форумчан, как там условия труда? Не сильно ли ужимают в правах? Хавтает ли з/п на хлеб?

Есть ли кто-то с опытом? Как вообще жизнь там протекает?

Сраху же кастую vertexua

 ,

KennyMinigun
()

В Opera 37 завезли ad-blocker

Суть в том, что завезли его нативно (т.е. не как в хромиуме — костылями). Обещают загрузку сайтов быстрее, красивее, мягкие и шелковистые волосы и исцеление от рака в некоторых случаях.

Пруфлинк: https://www.opera.com/blogs/desktop/2016/05/ad-blocker-opera-for-windows-mac-...

P.S. Для особо одарённых: обычные адблокеры для оперы были и раньше посредством расширений.

 ,

KennyMinigun
()

Предупреждение о слабом алгоритме хеширования в репозитории Google Chrome

Привет,

Уже которую неделю apt update выдает вот такое:

W: http://dl.google.com/linux/chrome/deb/dists/stable/Release.gpg: Signature by key 4CCA1EAF950CEE4AB83976DCA040830F7FAC5991 uses weak digest algorithm (SHA1)
W: There is no public key available for the following key IDs:
1397BC53640DB55

Дебиановцы уже (естественно) натыкали флажков: https://wiki.debian.org/Teams/Apt/Sha1Removal
На askubuntu предлагают забить: http://askubuntu.com/questions/760796/how-to-fix-apt-signature-by-key-uses-we...

Что забавно, в опере (deb https://deb.opera.com/opera-stable/ stable non-free) тоже было такое (когда xenial/16.04 была еще в бете), но быстро починили.

Один вопрос: доколе?!

 , , , ,

KennyMinigun
()

Помогите опознать песню

Сабж, мой Shazam/Soundhoud/Google Play Music Sound Search не опознает: http://rghost.ru/6rVLbtbfl (ccылка через 5 дней сдохнет)

Найдено на просторах вк-шечки, изначально было подписано «Static-X - The Only» (что очевидно неправда).

 ,

KennyMinigun
()

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