LINUX.ORG.RU

Сообщения kvpfs

 

Плата на aliexpress из рф

Всем привет. Подскажите пожалуйста, как на данный момент - можно ли платить на алике создав виртуальную карту QIWI? «Обычную» (не через карту) оплату недавно прикрыли, а работает ли так? Мне нужно зарегиться, верифицироваться, влупить бабла и только потом узнать, что всё зря, слишком сложно.

 

kvpfs
()

Плавный переход между двумя кадрами (анимациями)

Привет. Суть такая - есть две анимации одного объекта. Поза в конце первой условно похожа на позу в начале второй. Если их склеить топорно (показывая на одном фоне), то переход слишком явный, как бы сделать его сглаженным? Я бы хотел что-то, что действует по следующему алгоритму - 1 На вход принимает два кадра, и количество кадров, которое нужно сгенерить для перехода; 2 - рассчитывается цвет в каждом пикселе первого и второго кадра; 3 - генерятся промежуточные кадры, где каждый пиксель переходит между двух состояний.

Речь идёт о небольших переходах, которые возникли при удалении кадров. Т.е. я не собраюсь переводить человека из «сидя в стоя».

Можно ли это чем-то сделать?

PS: это может быть даже не blender.

 

kvpfs
()

Функция от current frame number

Всех приветствую. Ребята, допустим хочу - есть картинка и видос на руках, хочу плавно перемещать картинку по экрану по мере воспроизведения фонового ролика. Т.е. есть ли какая-то нода в композиторе вроде Transform, где можно указать x=FramePtr*val?

 

kvpfs
()

Сделать прозрачной область в видеокадрах

Приветствую. Решил «поиграться» с хромакеем. Отснял на «зелёнке» фрагмент, где я руками в цветных перчатках двигаю объект. Теперь на ролике присутствуют куски моего тела от которых нужно совсем избавиться. Т.е. нужна какая-то нода в разделе «Compositing», которой можно сказать - начиная с Х по У кадр отреж (сделай прозрачным) область с координатами 0:0-100:100. Ну а потом уже фильтровать по цвету. Как называется нода для обрезки по координатам? Ну или там надо какую-то маску сделать чем-то, чем? Должно быть совсем элементарщина, но я не знаю как загуглить это, разве что просмотреть какой-нибудь многочасовой туториал.

 

kvpfs
()

Unix like софт в виндовом репозитории vcpkg

Всех приветствую. Для пример - нахожу в vcpkg libiconv, читаю «Compatibility:✓ x64-windows», делаю vcpkg install, оно пытается скомпилить и падает с ошибкой. В общем я не очень понял - там все сборки «нативные» (раз указано в Compatibility), или же нужно обмазываться mingw? Если нужно тащить какое-то окружение, то дальше рабираться и читать доки не стану (ибо в проекте много всякого std20, сильно сомневаюсь, что скомпилится).

 ,

kvpfs
()

Код не отрабатывает как ожидается

Я не понимаю почему в консоль печатается лишь «f::tick_2»? Ождилаось «f::tick_1 f::tick_2». Так ведут себя Шланг, ГЦЦ, и Мелкомягий.

#include <iostream>
using namespace std;

template <typename T, int I>
struct Ev {
    struct DD {
    };

    template <typename ...Fn>
        struct Ovl : Fn... {
        using Fn::operator()...;
    };
    template<typename ...Fn> Ovl(Fn...) -> Ovl<Fn...>;
};

template <typename T, int I, typename V>
struct Tb {
    V v;
};

template <typename T, int I, typename V>
void f(Tb<T, I, V> &tb) {
    if (requires {tb.v(declval<Ev<T, I>::DD>());})  // #1
        cout << "f::tick_1\n";

    if (requires (typename Ev<T, I>::DD d){tb.v(d);})  // #2
        cout << "f::tick_2\n";
}


int main() {
    Ev<char, 3>::Ovl ovl{
        [](Ev<char, 3>::DD) {return 1;}
    };
    Tb<char, 3, decltype(ovl)> tb{ovl};
    f(tb);
}

$ g++ -std=c++20 1.cpp
$ ./a.out
f::tick_2

Разница лишь в способе «создания» DD в f::if. Тут немного запутанно, повторил примерно рабочую структуру с существующего кода, с менее хитрыми типами «ошбка» может не проявиться. В коде можно не разбираться сильно, интересна лишь строка #1 и #2. Единодушие компиляторов вызывает сомнение, что мои ожидания имеют основания.

 

kvpfs
()

Поднять частоту у ЦПУ

Приетствую. Имеется плата от ноута с intel i3

$ lscpu
Architecture:            x86_64
  CPU op-mode(s):        32-bit, 64-bit
  Address sizes:         36 bits physical, 48 bits virtual
  Byte Order:            Little Endian
CPU(s):                  4
  On-line CPU(s) list:   0-3
Vendor ID:               GenuineIntel
  Model name:            Intel(R) Core(TM) i3 CPU       M 350  @ 2.27GHz


$ cpupower frequency-info
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 10.0 us
  hardware limits: 933 MHz - 2.27 GHz
  available frequency steps:  2.27 GHz, 2.13 GHz, 2.00 GHz, 1.87 GHz, 1.73 GHz, 1.60 GHz, 1.47 GHz, 1.33 GHz, 1.20 GHz, 1.07 GHz, 933 MHz
  available cpufreq governors: ondemand userspace performance schedutil
  current policy: frequency should be within 933 MHz and 1.73 GHz.
                  The governor "userspace" may decide which speed to use
                  within this range.
  current CPU frequency: Unable to call hardware
  current CPU frequency: 931 MHz (asserted by call to kernel)
  boost state support:
    Supported: no
    Active: no
    33999 MHz max turbo 4 active cores
    33999 MHz max turbo 3 active cores
    33999 MHz max turbo 2 active cores
    33999 MHz max turbo 1 active cores


$ lscpu -e
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE    MAXMHZ   MINMHZ      MHZ
  0    0      0    0 0:0:0:0          yes 2266.0000 933.0000 930.9420
  1    0      0    1 2:2:2:0          yes 2266.0000 933.0000 930.9410
  2    0      0    0 0:0:0:0          yes 2266.0000 933.0000 930.9350
  3    0      0    1 2:2:2:0          yes 2266.0000 933.0000 930.9390

Можно заметить, что используется драйвер acpi-cpufreq, я безуспешно пытался поднять частоту через cpupower и через прямую запись в /sys/… , назначал различные governor, частота всегда остаётся равной около 900Мгц. BIOS, минимальный, там ничего нельзя.

Есть особенность - ноут не имеет аккумулятора (утерян), может ли влиять? Или же это такой «бонус» за ноутбук и проц всегда работает на минималках? Нагрузка на систему также не влияет на частоту.

 ,

kvpfs
()

Вывести типы аргументов функтора

Приветствую.

#include <functional>
using namespace std;

template <typename T>
struct FTraits;

template <typename R, typename A>
struct FTraits<function<R(A)>> {
	using Ret = R;
	using Arg = A;
};

struct S {
	//S(S&&) = delete;
	//S() = default;
	// ^^^^ needs to be uncommented ^^^^
};

template <typename T>
void fn(T t) {
	using U = typename FTraits<decltype(function(declval<T>()))>::Arg;
	//static_assert(U ...);
}
int main() {
	fn([](S){});
}

Словами - в fn передаём некий функтор, узнаём тип его аргумента и проверяем соответсвие этого типа каким-то критериям валидности. Всё работает до тех пор, пока тип умеет стандартно копироваться/создаваться (этого хочет std::function).

В данном случае хочу проверить в статик_ассерте, что сигнатура функтора принимает аргумент по ссылке, а не по значению. В принципе, компиляция упадёт и так где-нибудь в недрах в последнем случае, но со своей проверкой вывод будет значительно менее портянообразным, юзеру будет приятней.

Какие-нибудь варианты? Как-то обойтись без std::function и применить какую-нибудь «магию» напрямую к функтору?

 ,

kvpfs
()

Указание диалекта под виндой

Привет. Проект собирается на онтопике без проблем, используются фичи вплоть до цпп20, диалект задаётся в цмэйке следующим образом:

add_library(compile_flags INTERFACE)
target_compile_features(compile_flags INTERFACE cxx_std_20)

потом с этой целью линкуются все таргеты. Но на винде сборка падает на такой конструкции:

#if !defined(__cplusplus) || __cplusplus < 201703L
#error "Requires complete C++17 support"
#endif

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

 , ,

kvpfs
()

Установка подпроекта в поддиректорию проекта

Приветствую. Хочу прояснить - можно ли вообще и примерно как. Допустим, имет два проекта - main и sub

main
├── CMakeLists.txt
└── sub
    └── CMakeLists.txt

main - мой, sub - чужой проект добавленный через git submodule add, например. sub потенциально может содержать любые артефакты - ho library, shared library, … . Могу ли я получить make install цель со следующими свойствами:

  • Мне не нужно править ни одной строки в подпроекте, просто клонирую и делаю что-то в main для подключения в родительский проект.
  • Подпроект sub устанавливается в поддиректорию главного проекта.

Для пример - выхлоп от main - исполняемый exe_bin, от sub - libsub.so. После make install полчается:

usr/
└── local
    ├── bin
    │   └── exe_bin
    └── libexec
        └── main
            └── sub
                └── usr
                    └── local
                        └── lib
                            └── libsub.so

Т.е. идея в том, что брать на стороне какой-то проект и подключать его и устанавливать полностью локально для конкретного проекта, а не общесистемно.

Пока что крутил ExternalProject_Add(), но пока без успеха (может он вообще не умеет, а я парюсь). Можно ли это сделать? Как (желательно миниальный пример хотя бы с псевдокодом)?

 

kvpfs
()

Применить патч

Привет.

Имеется гит проект, в нём используется субмодуль (не мой), автор там наЮБнул маленько, я ему отправли патч, но какой-то он нерасторопный, проще самому пропатчить локально субмодуль у себя. Сценарий условно такой - я клонирую с субмодулями свой проект, запускаю cmake .., который патчит субмодуль в директории с исходниками.

По идее ExternalProject умеет патчить, но как его заставить исполнить git apply … из директории субмодуля? (ибо выполнить patch некросплатформенно? Всякая винда, чем они там патчат? Какие опции? Хз вообще)

В общем я теоретик, как пропатчить субмодуль правильно?

 , ,

kvpfs
()

Unicode library

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

  1. {char|utf-8|utf-16|utf-32} <-> wchar_t конверсий
  2. Итерация по wchar_t строке
  3. Желательно кросплотформенно

По всем пунктам подходит boost::locale, но у меня впечатление, что его icu бэкэнд жутко тормозит. У меня на руках что-то вроде текстового редактора, вставка текста из буфера обмена заметно лагает. На самом деле я там могу написать оптимальней - сейчас логика «размечает» буфер текста после вставки каждого символа, надо делать разметку после вставки всех символов. Тем не менее - icu слишком жирна, я бы хотел от неё избавиться (ну а кому нужен 30ти метровый довесок?).

char<->wchar_t я могу конвертить стандартными средствами. По-моему я ищу некую либу, которая внутренне работает на wchar_t, и умеет конверсии между разными utf-N, и не дергает ничего на стороне.

Черт с ним - пусть это даже будет не wchar_t внутренне, но обязана уметь utf конверсии, вряд ли может быть что-то медленнее icu.

 , ,

kvpfs
()

swap функция, ranges lib, ambiguous call

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

#include <ranges>
#include <utility>

class Ustring {
    unsigned char m_markup_state;
    friend void swap(Ustring &l, Ustring &r);
};

void swap(Ustring &l, Ustring &r)
{
    //using std::ranges::swap;     // ok
    //using namespace std;         // ok
    using namespace std::ranges;
    swap(l.m_markup_state, r.m_markup_state); // ambiguous call here
}

int main() {
}

$ g++ 1.cpp -std=c++20
1.cpp:14:9: error: reference to ‘swap’ is ambiguous
...concepts:229:43: note: candidates are: ‘constexpr const std::ranges::__cust_swap::_Swap std::ranges::__cust::swap’
1.cpp:9:6: note: ‘void swap(Ustring&, Ustring&)’

Если использовать по старинке std’шный swap() через using namespace std - то неоднозначностей нет. Можно заставить работать и рейнджи через using std::ranges::swap вместо using namespace, но я не понимаю почему оно вот так вот работает, как swap функция для какого-то там Ustring вообще может быть годна для unsigned char?

 

kvpfs
()

Написать key mapping

Приветствую, не хватает нервов, часа два не могу победить эту пустяковую ерунду. Проблема: когда открываю tag в preview окне (через CTRL-W}), то объект в предпросмотре спозиционирован нудачно - в районе центра, низ обрезается, нужно руками сходить в другое окно и сделать zt, это неудобно.

Захотел это исправить и написать своё сочетание, которое должно открыть таг, перейти на превью окно, сделать zt, вернуться обратно. Составные элементы выражения такие:

ptag [tag name]         - открыть таг в preview окне
expand('<cexpr>')       - id под курсором
<C-w>p                  - переключиться на предыдущее окно
zt                      - первая строка окна в позиции курсора
<C-y>                   - скролл на одну линию

В общем я по всякому пытался собрать это в целое, итог один - не могу

nnoremap <C-w>} :execute 'ptag' expand('<cexpr>')<CR>|<C-w>p zt <C-y> <C-w>p

nnoremap <C-w>} :call feedkeys("\:execute 'ptag' expand('<cexpr>')\<CR>") ...

nnoremap <C-w>} :call feedkeys("\:execute 'ptag' expand('<cexpr>')")<CR><CR> ...

nnoremap <C-w>} :call feedkeys(...) :call feedkeys(...)

 ,

kvpfs
()

Баг компилитора или со мной что-то?

Привет.

Хотел написать так, чтобы создавался массив размером == шаблонному параметру и все его элементы инициализировались некоторым значением (в момент создания, а не потом обходом, т.к массив юзер типов, надо через конструктор). Написал:

#include <array>
#include <utility>
#include <iostream>
using namespace std;

template <size_t I>
struct Init_val {
    static int f(int val) {return val;}
    static constexpr int i = 9;
};

template <size_t num>
struct S {
    void f(int val) {
        [val]<size_t ...I>(index_sequence<I...>) {
            array ar{(Init_val<I>::f(val) , ...)};
            array ar2{(Init_val<I>::i , ...)};

            // check
            for (int a : ar)
                cout << a;
            cout << endl;
            for (int a : ar2)
                cout << a;
            cout << endl;

        }(make_index_sequence<num>{});
    }
};

int main() {
    S<5> s;
    s.f(7);
}

шланг и ГЦЦ компилирует без ошибок, но при запуске ожидалось пять семёрок и пять девяток, но:

$ g++ 2.cpp -std=c++20  &&  ./a.out 
7
9

Надо багрепорт писать?

PS: я там два массива сделал, вообще мне нужен тот что с функцией, но т.к. с функцией конструкция шибко хитрая, то написал вариант с константой - тоже не работает.

 

kvpfs
()

Ширина символа в терминале

Хеллоу ворлд!

Господа, достаточно ли одного первого символа юникодной последовательности для определения ширины символа? Т.е. корректно ли предположение, что в юникоде нет никаких модификаторов, которые могут изменить ширину символа? Пример (в функцию передаётся один символ, основа и модификаторы):

#include <wchar.h>
int usym_width(wchar_t *begin, wchar_t *last) {
    return wcwidth(*begin);
}

// или же стоит перебдеть невзирая на большую цену:
int usym_width(wchar_t *begin, wchar_t *last) {
    return wcswidth(begin, last-begin);
}

возможность передачи в [begin, last) нескольких символов исключена.

 

kvpfs
()

Подключить внешний монитор

Привет. Проблема следующая - есть intel проц c интегрированной видеокартой GMA X4500HD, используемый драйвер - i915. Всё норм за исключением одной боли - при подключении внешнего монитора через HDMI он работает очень криво (постоянно какие-то помехи на картинке, периодически сигнал вовсе пропадает - 5 сек показывает, 3 секунды нет). При этом до загрузки ядра (в биосе, в меню загрузчика) с картинкой всё норм и нет никаких проблем пока ядро не стартанёт (т.е проблема возникает до всяких иксов и вяленных), также всё нормально работало под виндой.

Пробовал включить заливку firmware на карту (оказалось, что не поддерживается), потихоньку включаю/выключаю опции драйвера i915 наугад, пока эффекта нет.

Может кто-то уже боролся с таким? Куда копать?

 , ,

kvpfs
()

Прошить BIOS

Приветстую. Есть мёртвый ноут, достал с матери флеху с биосом для перепрошивки, слил старый образ, скачал с оф сайта Asus’а новый и срюрприз - размер прошивок разный flashrom говорит, что давай мне полный образ. Забить нулями не проблема, но говорят, что bios от Asus’а не содержит в себе ME region (я так понимаю, что речь про intel Management Engine).

Подскажите - как мне подготовить валидный образ BIOS’а? Могу ли я взять этот ME с какого-нибудь другого образа, должен ли это быть точно такой же ноут или можно дёрнуть с оф сайта интела? Брать что-то со старого образа - не хочу, там предположительно битые данные.

Чип биоса без панельки, проводить 100500 экспериментов с пайкой - не хочется.

 

kvpfs
()

Расчёт газовой «схемы»

Приветствую.
В процессе своего «творчества» столкнулся с изготовлением одной ерунды, и для уменьшения количества опытных образцов решил просчитать её теоретически. Видимо это из области газодинамики, если привести аналогию с электронной схемой, то в газовой схеме меня интересуют напряжения (давления) и токи в разных её участках. Например, условно так http://0x0.st/-FVM.png, где «R» - это электронный аналог «газодинамичского сопротивления» и не все сопротивления обозначены.

Но такая топорная аналогия с электроникой никуда не годится - например, сопротивление R2 будет непостоянным, а зависимым от тока в питающей линии, а при некотором значении вообще начнёт всасывать газ в обратную сторону. Получается, что я не могу найти сопротивления, пока не найду токи, а токи не найду, пока не найду сопротивления. В общем - здесь мне не резисторы.

Ну а как, собственно, считать подобную ерунду? Может пример какой кто знает, что-то гуглёж ничего толкого не даёт. Ну и если есть какая свободная софтина для моделирования таких процессов, то будет вообще годно.

 

kvpfs
()

Хитрая SD memory stick

Привет. Имеется некий плеер, умеет проигрывать всякое mp3 и подобное, принимает в себя SD карты. «Сейчас я быстро форматну под него карточку» - подумал я часов 6 назад.
Вот эта карту плеер принимает (шла в комлекте):

# fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 3.69 GiB, 3965190144 bytes, 7744512 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device         Boot Start     End Sectors  Size Id Type
/dev/mmcblk0p1       8192 7744511 7736320  3.7G  b W95 FAT32

# fdisk /dev/mmcblk0
Command (m for help): i
Selected partition 1
         Device: /dev/mmcblk0p1
          Start: 8192
            End: 7744511
        Sectors: 7736320
      Cylinders: 3290
           Size: 3.7G
             Id: b
           Type: W95 FAT32
    Start-C/H/S: 1/2/3
      End-C/H/S: 960/48/48

# fatlabel /dev/mmcblk0p1
1293
# fatlabel -i /dev/mmcblk0p1
5efa1bb8

А эту нет (говорит что кривая):

# fdisk -l /dev/mmcblk0
Disk /dev/mmcblk0: 29.72 GiB, 31914983424 bytes, 62333952 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x513dc19f

Device         Boot Start      End  Sectors  Size Id Type
/dev/mmcblk0p1       8192 62333951 62325760 29.7G  b W95 FAT32

# fdisk /dev/mmcblk0
Command (m for help): i
Selected partition 1
         Device: /dev/mmcblk0p1
          Start: 8192
            End: 62333951
        Sectors: 62325760
      Cylinders: 973841
           Size: 29.7G
             Id: b
           Type: W95 FAT32
    Start-C/H/S: 128/0/1
      End-C/H/S: 143/3/16

# fatlabel /dev/mmcblk0p1
1293
# fatlabel -i /dev/mmcblk0p1
5efa1bb8

Всё что мог сделал аналогично как у читаемой карты, только хз как поменять «Disk identifier», ну и может «Start-C/H/S» (но пока не знаю достаточно теории для корректной установки). Особенно интересует смена идентификатора диска (Id раздела уже поменял)? Может ещё есть какие-то скрытые от меня моменты?

Хорошо, если ошибусь, но всё больше мне сдаётся, что в лучших традициях российского хай-тека надо пользоваться фирменным софтом какой-нибудь «РаспилЛимитед», ибо прибор выдаётся через соц службы, сбыт обеспечен, а с такой стратегией - и необходимость поддержки тоже, греби бюджет и в ус не дуй.

 ,

kvpfs
()

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