LINUX.ORG.RU

Сообщения lesopilorama

 

А посоветуйте девайс или софтину под android для 360 фоток

  1. Сейчас юзаю samsung S22 ultra + «Google Camera» приложеньку, в которой есть функция Photo Sphere, которая даёт пока наилучший результат из всех приложенек, которые пробовал вместо этого решения. Бывает куча ошибок склейки и кривые фонари даже днём, но порой выдаёт шедевры и генерит 6000*N картинку - достаточно большое разрешение, чтобы это принималось яндекс-картами например. Пример съёмки этим решением: https://yandex.ru/maps/2/saint-petersburg/?l=stv%2Csta&ll=30.329850%2C59.944130&panorama%5Bdirection%5D=151.685075%2C-9.381176&panorama%5Bfull%5D=true&panorama%5Bpoint%5D=30.329595%2C59.944309&panorama%5Bspan%5D=117.141850%2C60.000000&z=18.86 (как я убираю фотку ног - «земельная» последняя нижняя центральная фотка делается вытянутой рукой отойдя на метр максимально из кадра)

version 8.7.250.494829638.44

  1. Есть всякие аппаратные штуки типа insta360, но стоит конско и непонятно что брать. В идеале хочется «нажал кнопку и готово» - то есть вские аппаратные комбинации из 2 fisheye-объективов, развёрнутых на 180 градусов. Но там недостаток в том, что надо редактировать фотку, вырезая из её низа фотку своей головы. Вроде вот есть обзорчик https://www.youtube.com/watch?v=52dHImsgOY0 но я пока времени вдумчиво посмотреть не нашёл…

Короче, интересно послушать советов по получению 360 фоток улицы с целью аплоада на яндекс-панорамы или аналогичный сервис минимальным количеством усилий. Ясно, что лучшее качество - это зеркалка + настольный комп с софтиной, но хочется обойтись без этого, нужно карманное портативное решение. Самое потенциально крутое решение - это тот же смартфон, плюс какое-то более волшебное приложение, чем в пункте (1).

 360,

lesopilorama
()

Посоветуйте android-мобилу за 5 тыр БУ с авито в качестве резервной.

Из критериев: максимум RAM, производительности и батарейки за эти деньги. Наличие LTE, usb-c. Камера важна не очень. Всё.

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

 

lesopilorama
()

Видеонаблюдение на вебкамерах - насколько это тупо?

Вот есть старые USB веб-камеры с хорошей картинкой типа logitech 9000 pro. Причём, картинка там конкурирует до сих пор с текущими имеющимися на рынке, правда 4K за 8 косарей эту штуку уже уделывает. Их можно втыкать в дешёвые одноплатники и стримить картинку куда-то, где её хранить. Вот так из буханки хлеба можно сделать троллейбус почти бесплатно.

Насколько это маразматически тупо в сравнении с современными IP-камерами типа hiwatch ds-i214? Правда ли, что во втором случае картинка будет даже лучше, да ещё тебе и аппаратно в нормальный кодек пожмут и не надо мутить ссаные одноплатники? Или первый способ ещё для чего-то годен в этой индустрии? Пробовал первым способом делать фото-наблюдение за котом на лежанке, оно с помощью софтины motion отправляла джипег раз в секунду на сервер - было годно тащемта. Но со вторым способом серьёзно в жизни дел не имел.

Главный трейдофф между этими вариантами - экономический. Хорошая IP-камера стоит 5-10К, а эти вебки можно насобирать по 500 руб и одноплатники, которые это потянут я тоже знаю где брать по 700 руб.

 ,

lesopilorama
()

Пояснения по математике для дебилов: а чем вообще так замечательны многочлены в алгебре и нафига они фундаментальны?

f(x) = c0 + c1 * x^1 + c2 * x^2 ... cn * x^n

Чем это вообще кому-то интересно, полезно и замечательно? Зачем это изучать и делать фундаментальным в алгебре? В чём прикол?

Для обычного программиста это выглядит просто рандомной функцией. Почему, например, не взяли функцию вида

f(x,y,z) = c0 * x + sqrt(y) + c2 * (x * y * z * 3)

и не начали усиленно изучать именно это? В чём особый цимес первой функции? Ну типа, зачем что-то возводить именно в какую-то степень? В чём такой большой прикол умножения на самого себя какое-то целое число раз, постоянно возрастающее именно на 1 в каждом следующем члене суммы? А чё если мне надо возводить в степени из массива [1, 1.2, 1.4, 1.5]? Почему степени именно [1,2,3,4,5,6]? Чё за натуральный счёт, кто-то кого-то считает или чо.

 

lesopilorama
()

C++ vs Rust - проблемы этих языков на примерах кода.

Хочется срача по сабжу, но без эпистолярных рассуждений, а чисто на примерах кода.

  1. Rust фанат кидает пример C++ говнокода.
  2. C++ енджоер объясняет, что данный код в 2024 все C++ разрабы пишут не так (и показывает как) и никаких проблем не может быть.

И наоборот.

Например мне Rust-фанаты кинули такое:

#include <iostream>

struct Data {
   const int &ref_;

   explicit Data(const int &_r)
   : ref_(_r) {

   }

   void print() {
      std::cout << ref_ << "\n";
   }
};

int main() {
  Data t(42);

  // Тут ты умер - попытка напечатать 42
  // по ссылке на него, тогда как 42 давно
  // не существует (оно существовало только
  //во время вызова конструктора Data())
  t.print();

  return 0;
}

Но выяснилось, что Rust-фанаты наврали, потому что C++ такое тупо не скомпилирует, если вызывать компилятор с нормальными пацанскими опциями «просто не пропускай херню»:

g++ test.cpp -O3 -Wall -Werror

 ,

lesopilorama
()

C++: как сделать, чтобы это не компилировалось?

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

-Wall -Werror – достаточно по-пацански так жить?


struct Data {
   const int &ref_;
   explicit Data(const int &_r)
   : ref_(_r) {

   }

   void print() {
      std::cout << ref_ << "\n";
   }
};

int main() {
   
   Data t(42);
   t.print(); // развал жопы на куски
   return 0;
}

 

lesopilorama
()

Нужны пояснения по формулам из статьи.

http://www.dsplib.ru/content/filters/ch9/ch9.html

Посмотрим на формулу (1) и пару графиков ниже.

обозначения:

x(t) – оригинальный сигнал, который дискретизуют.

xb(t) – видимо это дискретизующий дискретный сигнал, генератор выборок, ну то есть шарашит импульсы равные 1 через интервалы T, в остальное время имеет значение 0? Или я не так понял?

Что непонятно:

Зачем сумма в формуле и что такое б(t). Если б(t) - это сигнал дескретизатора, который показан на первом же графике ниже, то зачем сумма-то?

Сигнал дескретизатора (первый график ниже) изображён ну вроде-бы понятно почему так: там нарисовано, что в каждый момент времени через T этот сигнал равен одному и тому же = б(t). То есть, в момент времени, например, 4T значение этого сигнала = б(t - 4T). Почему не написали б(0 - 4T), нафига сюда засунули t?

Вообще первый график я не понимаю. Он в момент времени 0 равен б(t). А чему равно б(t) - то?

Дальше: зачем в формуле (1) сумма? Значение дискретного сигнала в точке t равно просто x(t) * б(t) без всяких там сумм. Просто б(t) имеет значение 0 на всех промежутках между отсчётами 0, T, 2T, 3T. Зачем что-то с чем-то суммировать-то? Я бы понял там какую-то попытку что-то с чем-то интегрировать, но там сумма по n = 0,1,2,3. Это же то же самое, что я напишу цикл:

// обозначим б(t) функцией BEE(t).
int calc_discrete_value(double *signal, int t) {
   int value = 0;
   for(int i = 0; i < INFINITY; ++i) {
      value += signal[t] * BEE(t - T * n); // вот это чо за бред?
   }
   return value;
}

Чё за бредовая сумма-то? Спасибо.

 

lesopilorama
()

C++ vs Rust: правда ли, что Rust тупо сложнее крестов в базовых сценариях применения?

Если C++ разраба заставить писать код на определённом подмножестве C++ (в первом приближении: не выделять память руками, не юзать указатели, не кастовать типы), то в принципе течь и падать там будет негде. На деле чуть тоньше и проще: указатели можно, но если тебе его передали в конструктор. Есть циклические ссылки, но тоже можно чё-то придумать. В общем, чёткого набора рецептов нет, опытный разраб в конкретном проекте выработает свои достаточно рабочие, плюс статический анализ и прочие там sanity-check тулзы и valgrind-ы скажут где насрано автоматически.

А есть просто Rust, где достаточно запретить писать unsafe и всё будет гарантированно блестяще и даже думать не надо.

Но говорят, Rust сложнее. Думать там надо уже просто чтобы базово взлететь, тогда как для базового взлёта на C++ достаточно быть тупорылым сишником, которому запретили выделять память. Гонят?

! ! ! ААААА ПРОСЬБА ПЕРЕНЕСТИ В TALKS ОШИБСЯ ФОРУМОМ ! ! !

Дополнение к уже написанному в треде.

  1. Тяжёлое наследие плюсов: его нет, если его не юзать. Я же не пишу в Rust ассемблерные вставки везде. Возможность их написать же не говорит о том, что у Rust тяжёлое наследие всей x86/ARM аппаратной платформы. Нормальный C++ код не содержит никаких макросов, например и передач указателей в пределе. Передай ты std::span, std::string_view и т.п. вместо (char* ptr, uint32_t size).

  2. Никогда не понимал тезис, что синтаксис обычного Си - сложный. Он может быть сложный во всех ВОЗМОЖНОСТЯХ, но в базовых сценариях он кажется примитивным: int function_name(int a, int b) { return a * b;} - это же предельно тупейшая идея синтаксиса, которую придумает любой школьник при наличии задачи изобретения ЯП. Даже конфиги хочется писать в таком стиле - см nginx. Так вот, если сознательно не усложнять себе жизнь, то C++ так же прост.

  3. Посмотрим на такие конструкции Rust, выдернутые из контекста:

languages.get_statistics(&input, &cli.ignored_directories(), &config);

Имеются какие-то &. Не знаю что это, но почему не написано input вместо &input? То есть, юзера заставляют думать про разные виды передачи аргумнетов чтоли? Ссылочно/указательно? Чем это отличается от необходимости в крестах думать про rvalue, lvalue, reference, pointer? То есть, от этого момента язык тоже не ушёл: нельзя как в JS/Python херануть объект в аргумент и зашибись - надо думать как херануть.

(0..10).map(|_| "#").collect::<String>()

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

fn main() -> Result<(), Box<dyn Error>> {

В С++ проще. Не надо писать fn, чтобы сказать, что это функция, достаточно привычных миру () и тип возвращаемого значения в C++ необязательно предварять -> чтобы сообщить компилятору, какое оно. Ту же мы видим некие генерики/шаблоны - в плюсах они выглядят так же.

let mut is_sorted = false;

В Rust это выглядит НАДЁЖНЕЕ чем в С++, потому что заставили написать mut, чтобы сообщить, что это можно менять. В C++ это выглядит так же коротко в принципе: auto is_sorted = false;. Но в крестах ты пишешь const auto is_sorted = false; если надо конст и всё.

Посмотрим как пилятся сруктуры в расте:

pub struct CodeStats {
    /// The blank lines in the blob.
    pub blanks: usize,
    /// The lines of code in the blob.
    pub code: usize,
    /// The lines of comments in the blob.
    pub comments: usize,

Блин, в C++ же проще:

struct CodeStats {
  // The blank lines in the blob.
  usize blanks;
  // The lines of code in the blob.
  usize code;
  // The lines of comments in the blob.
  usize comments;

Я потратил меньше кода в крестах. Мне не надо писать pub напротив каждого поля, я могу его вынести в начало. Плюс, struct в крестах - это по-дефолту всё pub, а class - по-дефолту всё private - можно регулировать приватовость всех полей сразу просто выбором слова, которым объявлять структуру.

Что бесит в Rust: тип в конце. Но в языках, где важна производительность, люди любят подумать про memory layout - «как всё лежит в памяти» и посмотреть в первую очередь на типы всего, что лежит в структуре: какой тип рядом с каким, как это выровняется, например. Понятно, что в структуру в таких случаях данные пихают не по выравниванию, а «что рядом с чем потребляется процом», чтобы «нужное вместе» в одну кеш-линию, поэтому важнее будут имена полей, чем типы. Но всё-таки хочется «от общего к частному»: сначала видеть ЧТО ЭТО В ПРИНЦИПЕ (какой у этого тип), а уже потом как оно называется. Условно, мне хочется в «семантике общения» ситуацию «это собака, её зовут Вася и это тоже собака, и гоша», а не наоборот: «это Вася, а ещё он собака, а это петя и он собака». Я не хочу думать про имена, я хочу сначала схватывать суть уровня «так, тут у нас две псины, что они тут делают», а как они называются я потом разберусь)

pub fn summarise(&self) -> Self {

Об этом уже говорилось, в C++ тут будет меньше кода. А где тип аргумента, статически типизированные вы наши, йопт? В целом понятно, почему они заставили писать pub перед каждой функцией - чтобы тупорылый разраб сразу видел точно публичное оно или нет. А то в C++ напишут слово public: а дальше ряд функций и могут случайно написать функцию не в той секции и она случайно будет public – лучше пусть явно пишут! Но хз, это вкусовщина: мне приятнее организовывать всё именно как в плюсах: написать public и дальше у нас красиво пошёл публичный интерфейс. Нафиг мне pub в глаза пихать на каждый чих. Та же конструкция в C++: Self summarise(T &self) {. Опять же, уже говорилось: наличие & - раст оказался не таким уж простым, юзеру надо думать ссылка там или не ссылка? Где такая же простота, как в ссаном JS, что просто self написал и всё?

Давайте просто сюда посмотрим: https://github.com/sharkdp/fd/blob/master/src/filesystem.rs – в принципе да, всё читаемо, красиво, выразительно. map всякие там. Отсутствие скобок у if бесит конечно, ну ладно, в питонячке так же. Но в целом код на современных крестах выглядит абсолютно так же, может чуть меньше символов напечатать придётся. А где-то вместо map().blabla().bubu() будет несколько процедурных строк, потому что в именно стандартную библиотеку C++ не подвезли именно такой семантики, но она достижима в самом языке.

Посмотрим сюда: https://github.com/XAMPPRocky/tokei/blob/master/src/input.rs

Спецсимвольный perl-адок какой-то немного. Зачем так жить. Степень жести в районе строк 16-26 вообще ничем не способна привлечь юзера в сравнении с самыми мерзкими местами C++. Ясно, что это всё можно как-то объяснить. Точно так же «как-то» можно объяснить вот такой C++ код: https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/src/c++11/thread.cc#L235 - синтаксис обычный такой «сишный», просто вперемешку с макросами и большим количеством ___ в названиях переменных: в общем, оба фаната «как-то» объяснят ад в своих языках, простой мане, которая хотела «простой язык» оба этих места одинаково жопные.

Хочется обратить внимание на такой тонкий психо-нюанс, который похоже имеет место быть в расте: раст далеко не питонячка, всмысле в нём уже таки надо думать о неком таком критическом количестве вещей, что требования к мозгу кандидата поднимаются на такой уровень, где ему уже совсем не противен C++ и возможные дедлоки в тредах не кажутся чем-то сложным: ой, опять мьютексы не в том порядке захватил, поправил и забыл.

 

lesopilorama
()

Цикл статей «для дебилов»: в чём смысл борьбы X11 vs Wayland?

Бывает, программируешь на C++ серверные приложения под линукс, шаришь в алгоритмах и файловых системах, а про другие части линукса знаешь мало: как стартует ядро или в чём разница между убунтой и дебианом или как пиксели на экране рисуются. Вот для этого нужна серия статей для дебилов, поясняющая чо происходит в линуксе. Как работают видеодрайверы и как физически рисуются пиксели я может быть знал во времена DOS, но не теперь.

Первый вопрос в этом цикле: а нафига нужен Wayland и почему недостаточно X11? Почему разрабы Wayland просто не форкнули X11, например или не кикнули старых разрабов X11 с баркаса на мороз и не стали паханами в X11 и не сделали всё как надо? Короче нужен исторический экскурс в причины появления Wayland, смысл его существования, перспективы, проблемы и нерешаемые проблемы. В чём X11 всё ещё крут, в чём X11 уже никогда не будет крут.

Может кто-нибудь на пальцах раскидать положняк по этой теме так, чтобы любой алкаш понял?

Спасибо.

 ,

lesopilorama
()

Про аудио-кодеки и OPUS: а есть что-то лучше, чем OPUS в построении интернет-телефонии в настоящее время?

Про Codec2 и прочие там AMBE+, P25, DMR и т.п. в курсе. Речь не про такие экстремальные приколы, речь про интернетик с «нормальными» полосами пропускания, где конечно тоже экономят.

Вопрос такой: каким кодеком сейчас пытаются кодировать голос создатели всяких там интернет-звонилок? Телеграм, зум, VK-звонки, гугл-hangouts и прочие созвоны? Правда ли, что ничего лучше OPUS кодека для этих целей сейчас особо нет? «особо» - значит, что он достаточно хорош, учитывая открытость, проработанность, низкозадержечность и звукожмучесть, чтобы не соскакивать на какой-то другой.

Да, есть всякие «стандартные» во «взрослой телефонии», типа там G.722. Но они достаточно «древние». OPUS пожмёт речь с тем же качеством на полосе в 2-3 раза меньше. Например OPUS 23 килобита - это прям HD качество речи, а G.722 на 48 килобитах только начинает работать.

В западных интернетах вроде бы мнение такое:

  1. G.722 – для HD-звонков внутри офиса (7 кгц звука, 48-64 кбпс)
  2. G.711 – для звонков за пределы офиса (300-3400 звук, полоса как у G.722?)
  3. OPUS – для всего новомодного

P.S. Кстати зацените прикол: если в андроид-клиенте телеги отправить голосовуху, то она кодируется OPUS, но зачем-то занимает конское число байт и кодируется с каким-то шедевральным симфоническим аудиофильским битрейтом вроде 165 кбпс! Жесть там Дуров диски не экономит.

 

lesopilorama
()

А расскажите про Торвальдса? Он правда сам мёржит руками и читает код до сих пор?

Вот он прямо реально сам сидит за компом целыми днями, вычитывает какие-то патчи, смотрит чо как? Или есть назначенные бояре на нужные участки ядра, а он особо не вникает?

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

(мем про киану: «а что если TOR - образовано от Torvalds»)

 

lesopilorama
()

Тяжёлые рациональные препятствия использования Rust вместо C++

  1. Язык, ограничивающий работу с сырой памятью, сырыми аллокациями, сырым владением - уже есть внутри C++: это такое его подмножество, где аллокации заменены на make_shared-подобное, сырая память/ресурсы - на всякие там контейнеры/инкапсуляции/RAII, владение - на смартпоинтеры и подобное. Если я как-то «нормально» знаю C++, включая и «сырое» и «хорошее», то получается мне не надо осваивать никакой другой язык, чтобы начать пейсать не-говно. Зачем вводить в инструментарий что-то ещё, если такое уже есть? Отказаться от C++ в пользу Rust - это какой-то сложный манёвр, совершаемый гораздо проще не уходя от C++ и не ДОБАВЛЯЯ ничего нового, а только УБИРАЯ что-то: достаточно отказаться от ЧАСТИ C++, не изучая ничего нового вообще. Не пиши на C++ и пиши на Rust - это строго сложнее и страннее, чем «пиши на С++, но без сырых указателей и сырых аллокаций». Rust уже есть внутри C++, что моментально заненужнивает какой-то отдельный Rust. Более того, для начала можно даже не ходить так далеко как отказ от куска C++, а взять свежайший C++ компилятор, врубить последний стандарт, врубить все параноидальные warning по максимуму, приравнять их к ошибкам компиляции (-Werror) и компилятор подробно расскажет тебе, какая ты дура, пока не перепишешь нормально.

  2. Ясно, что Rust нужен, чтобы набрать много макак с рынка, которые ПРИ ЖЕЛАНИИ не смогут сломать память. Теоретически, вредное подмножество Rust (unsafe) в разы меньше, чем вредное подмножество C++. По задумке, ревьюить Rust - проще, ведь надо просто отследить наличие unsafe, а ревьюить C++ макака не может. Ну ХЗ - в статический анализатор кода запихнул правила забраковки кода с сырыми указателями в С++ и готово. Ну и последний совет из пункта (1) даст 100 лет строгача с конфискацией за малейшую попытку побега - всё как в Rust: небезопасненько: не соберётся.

  3. Но Rust не простой, под него макака не подходит изначально. Rust варится в такой же задротской атмосфере, как и C++. Для макак инструмент надо ещё более тупой - что-то типа JS, где «что ни написал - всё работает», а к памяти доступа ВООБЩЕ нет ни через какое волшебное слово (unsafe). Если надо, чтобы быстро исполнялось, то в бинарный код мы уж как-нибудь скомпилируем/оттранслируем любой кал - в пределе (в прекрасной России будущего) волшебные оптимизаторы LLVM разрулят всё неоптимальное, что макака написала. Транслируем любой макачий кал в строго корректный машинногенерируемый С++ и его скомпиляем.

  4. Даже из принципа нужности управления битиками в крайне узкоспециальной части проекта мне не нужно много гениев. А это «мало гениев» я наберу с рынка вообще без проблем - и по зарплате там не сильно важно в чём он там гений - C++, Rust. Rust-задроты даже больше просят из-за модности.

  5. Супер железное правило, которое не перебивается вообще ничем логически: если вы затеяли лабать что-то уровня собственной СУБД с транзакциями и запутались в циклических ссылках, то вы уже давно перешли порог гениальности, после которого вам уже вообще насрать на чём это пишется. Эпичный баг, который вы будете искать дольше суток, с утечками/циклическими ссылками/порчей памяти вы в этом большом проекте поймаете за жизнь 2 раза от силы, остальное проблемное какой угодно сложности вы в дебаггере отловите за пару часов и это будет случаться раз в полгода - вообще экономически не повод менять инструмент. Да и то, затрачиваемое время на поиск багов растянется только потому, что на вашем уровне развития вы не могли пройти мимо очередного срача «C++ vs Rust» и отвлеклись на 4 часа от дебаггера.

UPDATE

Мне накидали в панаму разумных куёв, поэтому давайте выведем топик на новый уровень. Напишите не суперсложный кусок кода на C++, который потенциально вызывает проблемы и тот же кусок кода на расте, который никак не бомбанёт.

 

lesopilorama
()

Посоветуйте ThinkPad с авито тыщ за 20-30 более-менее современный по железу.

Ну типа i5-8XXXXU серия проца, 16 гигов памяти, IPS матрица. Чо смотреть? T480, E14, X1? Мобильность слабо важна, всю жизнь будет на столе в основном, иногда на диване.

 

lesopilorama
()

Научите пользоваться GPG, что я делаю не так.

  1. Создал ключ на BLABLA@BLABLA.COM, пройдя этапы –full-generate-key.
  2. Тестирую echo "HELLO WORLD" | gpg -r BLABLA@BLABLA.COM --encrypt --armor Выдаётся годнейший ASCII блок.
  3. Тестирую расшифровку: echo "HELLO WORLD" | gpg -r BLABLA@BLABLA.COM --encrypt --armor | gpg. Провал:
gpg: encrypted with 1024-bit RSA key, ID 1234524526262626, created 2024-08-06
      "POLUSUKA (PIDAR) <BLABLA@BLABLA.COM>"
gpg: public key decryption failed: Operation cancelled
gpg: decryption failed: No secret key

Чо делать-то.

 

lesopilorama
()

А какая бизнес-модель у Яндекс Браузера и перспективы?

Иногда происходит попытка завлечь некого C++ разраба на собес в Яндекс-Браузер и этот разраб думает: «а оно ещё живое? А зачем оно на планете есть»?

Оно в природе есть, чтобы существовал некий браузер с правильными государственными сертификатами? Движки же гуглы и файрфоксы наверняка пилят активнее и эти движки же наверняка воруют в свою репу яндексисты, не с нуля же пишут. Вряд-ли ведь яндексисты пилят прямо собственные глубоко оригинальные алгоритмы рендеринга, ибо зачем? В гугле ж наверняка с их ресурсами запилят интереснее и всё равно потом бэкпортить в себя, нет?

В общем, нафига ещё жив яндекс-браузер и каковы перспективы?

Тексты от HR монут выглядеть так:

Из интересного: Яндекс браузер – самый большой проект на С++ в мире. 
Есть несколько команд: 
те, кто делают ядро; 
рендеринг-движок; 
те, кто реализуют бизнес-логику; 
те, кто делают UI 
Стек: С++ ( минимум 11, кодовая база в проекте обновлена до 20 стандарта)
Браузер кроссплатформенный - это надо учитывать при разработке фичей

Там прям какие-то команды. Ядро, рендеринг и т.п. Зачем? Разве это не просто клон хрома?

 

lesopilorama
()

Ubuntu 20.04: запретить менять вывод звука на воткнутые USB-наушники.

Слушаю музон в браузере через встроенный в ноут jack 3.5. Втыкаю USB-наушники с микрофоном ради того, чтобы в ffmpeg позаписывать звук с этого микрофона явно выбирая hw:1,0. Музон в старых наушниках пропадает, поток перенаправляется в USB-наушники. Падла! Хочется запретить это жопное поведение.

В файле /etc/pulse/default.pa закомментил вот это:

# load-module module-switch-on-port-available
# load-module module-switch-on-connect

Сделал pulseaudio -k – но всё по-старому! Что делать? Самозарубиться топором по темени?

P.S.

Блеат, pulseaudio -k - для бомжей. Помогло только

killall -9 -r pulse
pulseaudio -k
pulseaudio --check

Жесть треш угар содомия. Заработало: USB звуковуха перестала воровать звук при втыкании.

Но теперь другая проблема: кнопки регулировки громкости ушли в USB-звуковуху, ноутбучные клавиши громкости не крутят звук у встроенной в ноут звуковухи! Тварь!

P.P.S.

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

 ,

lesopilorama
()

Цифровая обработка сигналов: фильтр Баттерворта, вопрос по амплитуде

Вопрос крайне туп. Если взять рандомную хорошую и правильную реализацию фильтра баттерворта рандомного порядка (или запилить самостоятельно) и загонять на вход фильтра семплы нашего сигнала, то на выходе мы получаем семплы правильно отфильтрованного сигнала, НО с какой-то дикой амплитудой. Вопрос в том, что я не понимаю связи размерности семплов входа и семплов выхода. Например, имея на входе нормализованный сигнал (со значениями между 0 и 1), в выходных float-значениях семплов я получаю какие-то адовые миллионы. При этом эти значения не являются бредом: если найти на рандомном участке максимум и нормализовать выходные семплы по этому максимуму, то мы имеем вполне себе адекватный выходной сигнал, отфильтрованный как ожидается. Хочется понять почему так происходит: значения выходных семплов никак не связаны по размерности со значениями входных. На входе может быть и не нормализованный сигнал, а прямо сырые PCM-значения: фильтр тоже исправно работает, просто на выходе уже «сотни миллионов» )

 ,

lesopilorama
()

gvim с вертикальными табами. Есть такое?

:tabe открывает новый файлик в табе.

Не, я понимаю что там не «табы», а view какие-то, или буферы или как там его. Это всё не суть. Табы есть табы, пофиг в данном контексте, что там внутри и какая за ними философия.

Вот в gvim есть табы, но они горизонтальные.

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

Спасибо.

 ,

lesopilorama
()

Bluetooth-адаптер: выдаёт звук на jack 3.5 гарнитуру и видит её микрофон? Посоветуйте.

  1. Есть обычная jack-3.5 4-контактная гарнитура.

  2. Надо коробочку, которая цепляется по BT, в которую втыкаешь гарнитуру и наушники в ней становятся BT-наушниакми, а микрофон гарнитуры видится в телефоне.

  3. Тестил такое: https://aliexpress.ru/item/1005005760011304.html - прямо то что надо, интересны альтернативы и аналоги. Аналоги интересны, потому что тут нет регулировки громкости и микрофон с задержкой пробрасывается, хотя это наверное везде так. Но то, что оно увидело микрофон в гарнитуре - уже суперплюс.

  4. Тестил такое: https://aliexpress.ru/item/1005003127873046.html - микрофон только встроенный и качество у него полная жопа. Каменный век, звук как из унитаза. Я конечно понимаю что стандартный телефонный канал - это 300-3400 гц, но не в 21 веке же, когда кругом «HD-кодеки», даже в любом телеграм звонке и LTE. Внешний микрофон (на гарнитуре) оно не видит. А надо чтобы видело.

Вопрос в советовании альтернатив и проверенных аналогов (3). Спасибо.

 

lesopilorama
()

Апгрейд старого LCD 1280x1024 монитора на LED.

Есть старые LCD мониторы с катодными трубами.

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

  2. Из платы БП, который отдаёт 5В, 12В и высокое напряжение на трубы. Можно попробовать отрезать на плате дорожки, которые запитывают высоковольтную трубную часть, потому что она жрёт ток. Там пара трансформаторов повышающих, пара мосфетов, генератор какой-то.

  3. Из платы адаптера DVI/VGA -> шлейф матрицы (LVDS)? Тут модификаций не надо. Это поставщик сырого сигнала в матрицу по нескольким диффпарам, как я понял. Ещё там BIOS монитора - проц, который рисует менюшку.

  4. Надо выдернуть катодные лампы и запихнуть светодиодные ленты. Питания на них уже может и не хватить конечно, если пытаться запитываться от встроенного БП, но это не точно. Можно их сделать не яркими.

Вопрос: а кто делал подобное? Выкидывать монитор жалко, а катодные трубы своим нагревом бесят и когда-нибудь всё равно сдохнут. Греются они как печь просто жесть. А ещё на плате БП в той части, которая питает трубы подсветки, на плате от нагрева уже пожелтение, там скоро какие-нибудь диоды сдохнут уже, они устали это тянуть.

А ещё такой вопрос: а реально сырую матрицу монитора накормить картинкой не от мониторной платы «скалера», от от условной ардуины? Чё там за протокол?

 

lesopilorama
()

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