LINUX.ORG.RU

Сообщения lesopilorama

 

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

Форум — Talks

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 тупо сложнее крестов в базовых сценариях применения?

Форум — Development

Если 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?

Форум — Talks

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

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

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

Спасибо.

 ,

lesopilorama
()

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

Форум — Talks

Про 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
()

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

Форум — Talks

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

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

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

 

lesopilorama
()

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

Форум — Talks
  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 более-менее современный по железу.

Форум — Talks

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

 

lesopilorama
()

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

Форум — Talks
  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
()

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

Форум — Talks

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

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

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

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

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

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

 

lesopilorama
()

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

Форум — Desktop

Слушаю музон в браузере через встроенный в ноут 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
()

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

Форум — Development

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

 ,

lesopilorama
()

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

Форум — Talks

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

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

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

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

Спасибо.

 ,

lesopilorama
()

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

Форум — Talks
  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.

Форум — Linux-hardware

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

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

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

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

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

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

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

 

lesopilorama
()

thinkpad X230. Чёрный экран ноута в некоторых случаях, в остальном нормальный. Подёргал шлейф матрицы - починилось! Что было?

Форум — Linux-hardware

Древняя убунта на thinkpad X230.

На экране дёргалась пара «строк» изображения, как будто помеха на телеке. Как будто каждый кадр изображения получал стабильно по времени наводку в одних и тех же местах картинки. Просто пара строк немного съехала влево и «дрожит». Пара строк в сантиметре от верха экрана и ещё пара строк через 2 сантиметра от первой пары строк.

Открываем хром/телеграм, крутим контент с картинками - хоба экран полностью чёрный. Закрываем приложение alt + f4 - хоба картинка возвращается. Наводим мышь на убунтушный «пуск», вылезают иконки приложений, хоба чёрный экран. Убираем оттуда мышь, хоба картинка оживает. Открываем какой-нибудь яндекс-дзен, крутим-крутим, хоба чёрный экран.

Разобрал ноут, продул пыль, разобрал крышку экрана, шлейф от матери до матрицы отключил, подключил обратно. В районе матрицы не отключал, но немного подёргал.

Собрал ноут, работает идеально как ничего не было. Вот интересно чисто физически-радиотехнически: а как это вообще такое возможно? Это чо было? Это какой контакт должен отходить, чтобы такое получить? Любопытно тут то, что оно реагирует на некое состояние системы/приложений. При этом если пойти в «фреймбуферный режим» нажатием CTRL + ALT + F2 и увидеть там login: залогиниться и поработать в консоли, то вообще всё идеально. Переключаемся обратно на иксы - снова этот прикол с чёрным экраном. (сейчас после «починки» проблемы исчезла, это было описание происходившего до).

 

lesopilorama
()

Пет-проджекты и зарабатывание денег в вебе. Как можно денег позарабатывать в вебе сейчас? Лендинги клепать или подобное.

Форум — Talks

Хочется помимо основной работы фоново немного позарабатывать денег в вебе на предпринимателях или рекламщиках, используя весь свой программистский талант и мощь в разработке быстрых отказоустойчивых нересурсоёмких серверных приложенек/фронтенда. Умею бакенд, TS/JS/JSX/react-like фронтенд, базы данных, в общем всё что надо. Но позарабатывать так, чтобы не тратить в сутки больше часа времени в перспективе. В бекенде могу всё: от говнокода на PHP+MySQL до разработки кастомных HTTP-серверов на C++20 для микросекундного задроча и модификаций PostgreSQL. На фронте в принципе тоже всё, но без дизайна. Вот эти фичи моей личности и хочется поэксплуатировать.

Ясно, что пойти клепать лендинги - это не то. Потому что хочется продавать что-то полуавтоматически, а клепка хороших лендингов - вполне себе фуллтайм работа, часто штучный продукт и много дизайна, а техническая часть давно сделана на тильде и требований к бекенду особо нет: работает и ладно. Хочется, чтобы клиент нажал кнопку «создать что-то», а ты получил бабла, а не сам с этим клиентом общался и рисовал ему лендинг. Минимум вовлечение личного ресурса, максимум автоматизации.

Хочется запилить некую платформу для чего-то такого, связанного с тем, где бабло крутится: лендинги, SMM, реклама, прочий треш и дичь. Некую платформу, на которой желающий может что-то создавать одной кнопкой, настраивать и как-то использовать. Простейший пример: создавалка чатиков: когда нужен чатик в вебе, когда его хочется прикрутить к лендингу, когда хочется через него пообщаться с клиентами. Такое делали в jivosite кажется и других подобных местах. У операторов колл-центра некая админка, куда поступают обращения из чатиков, а чатики прикручены к лендингу и у каждого клиента свой одноразовый чатик без регистрации с СМС в духе «Я Жанна, чем могу помочь».

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

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

Нет требований придумать инновационную идею. Наоборот: какую существующую идею или реализацию повторить эффективнее, чтобы пошли ко мне, а не в какое-то текущее кривое решение. Банально, я могу сделать сервис, который просто не тормозит и он будет приятнее. Например есть всякие платформы nocode, где неграмотные гуманитарии кликами кнопок создают какие-то странички или сайтики. Вот можно поработать в этом направлении, сделать какую-то свою отечественную платформу, которая чем-то лучше других. Ну и так далее, масса направлений размышлений. Возможно и правда надо клепать лендинги, просто автоматизировать это. Они будут все на одно лицо, зато быстро и за 500 рублей штука.

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

 ,

lesopilorama
()

TypeScript: импортить модули, лежащие где попало по абсолютным путям.

Форум — Development

Есть программа: /home/me/project/main.ts

import {Sobaka} from "./auto/sobaka.js"
import {Blabla} from "./auto/blabla.js"
console.log("hello")

Проблема в

/home/me/project/main.ts:N:M - error TS2307: Cannot find module './auto/sobaka.js' or its corresponding type declarations.

потому, что на самом деле никакого ./auto/ в текущем поддереве нет и никогда не будет! Это самое интригующее и раскрыто далее после заголовка «ЦИМЕС ВОПРОСА». Что там за Sobaka и Blabla читателю не важно, суть не в них, они норм. Если их положить в текущий каталог с main.ts и написать «./sobaka.js», то всё работает.

Так же есть /home/me/project/tsconfig.json:

{
  "compilerOptions": {
    "target" : "ES2016",
    "module" : "nodenext",
    "noImplicitAny": true,
    "removeComments": true,
    "preserveConstEnums": false,
    "moduleResolution": "nodenext",
    "sourceMap": false,
    "strictNullChecks" : true,
    "strictPropertyInitialization" : true,
    "outDir" : "/tmp/some/output/dir/blabla",
    "rootDirs" : [
       "/tmp/generated",
       "/home/me/project"
    ]
  },
  "include" : [
    "/home/me/project/main.ts"
   ]
}

Запускаю обычно так и всё собирается: tsc --build /home/me/project/tsconfig.json. Обычно, это когда не нужны были извращения из этого треда.

цимес вопроса:

Есть некий автосгенерированный .ts код, можно сказать «модуль» (при моём слабом понимании теории модулей TS): .ts файлы в папочке /tmp/generated/ или в любом другом одноразовом месте, про которое (место) базовый код знать не хочет:

/tmp/generated/auto/sobaka.ts
/tmp/generated/auto/blablabla.ts

Вот их инклудить я и хочу в main.ts, но не знаю как. Класть эти файлы в основное дерево (в репу) нельзя. Они генерятся при каждой сборке, там всякие актуальные константы и одноразовые интерфейсы.

  1. Пробовал добавить /tmp/generated/ в rootDirs как показано в tsconfig.json выше - не взлетело/

  2. Пробовал такое:

import {Sobaka} from @auto/sobaka.js

И добавить в tsconfig.json такое:

...
"baseUrl" : "/home/me/project/",
"paths" : {
   "@auto/*" : ["/tmp/generated/auto/*"]
}
...

Ошибка та же.

Помогите научиться инклудить валяющуюся где угодно по абсолютному пути фигню успешно, не указывая абсолютных путей в коде? Спасибо.

 

lesopilorama
()

Allwinner A20 - определить где на плате UART и определить почему девайс может виснуть.

Форум — Development

Есть платка. Типа cubietruck, на самом деле «вариация на тему», некая очередная итерация cubieboard, сделанная в виде некого A19 Android TV Box, который потом под заказ компании АТОЛ был чуть перепилен в продукт «Атол Хаб-19».

http://at89.ru/wp-content/uploads/2019/02/word-image-20.png

http://0x0.st/XZ-O.png - копия если первый урл сдох.

Хочется там найти UART, который при вдумчивом осмотре никак никуда не выведен и не распаян.

Единственное похожее на него место: смотрим на самый левый чип RAM, поднимаем взгляд чуть вверх - там кварц, идём от кварца влево - там нераспаянный трёхдырочный разьём. Это может быть оно? Дорожки идут прямо в камень. Если глянуть на даташит проца, где все ножки подписаны https://www.olimex.com/Products/SOM/A20/_resources/A20-Brief-2013-02-27.pdf - UART там явно не обозначен, ну может через GPIO реализован как-то какой-то, хз.

Так вот, задача проверить эти три дырки на то, являются ли они UART. Берём USB->TTL 3.3V штуку, втыкаем GND, TX, RX в эти дырки в разных комбинациях и пытаемся увидеть выхлоп. Вопрос: достаточно ли будет напихать на линии TX, RX по резистору в 1 кОм дабы не спалить этот A20 проц в случае чего?

Второй вопрос: как вообще дебажить такого рода железки на предмет зависания? Даже не кернел-паника, а просто впадания в говнище? Работала-работала день, херак стала кирпичом. Питание выдернули, вернули - дальше работает. Народ на форумах что-то там обсуждает про игры с параметрами U-Boot в области частот RAM. Вот думаю какой-бы физический интерфейс с такого рода железкой иметь, чтобы понимать что же в ней происходит. Пока что самым очевидным приколом кажется проблема с питанием, типа нагрузить оба ядра какой-то хренью и БП просаживается, от чего всё встаёт колом. Но там БП штатный, 5V 2A, должно хватать…

Выкинуть и купить нормальное - совет понятный.

 

lesopilorama
()

2 тупых вопроса про Bluetooth и кодеки, про BT-звук, про наушники и микрофоны.

Форум — Talks

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

Слегонца представляю как BT работает радиотехнически, ППРЧ там всякое, отличия некоторые BT 5 от BT предыдущих, примерно представляю почему это может быть очень эффективно. Хочу спросить про «кодеки». Вот бывает, что на блютус-наушниках написано, что они поддерживают всякие там кодеки: SBC, AAC, aptX, aptX HD. А правильно я понимаю, что эти кодеки «стоят» прямо в том же кристалле Qualcomm, который реализует ВООБЩЕ ВСЮ Bluetooth машинерию - радиотехническую, шифровальную? Правда ли, что на входе у такого Bluetooth-чипа, который пихает звук в «эфир» просто сырые семплы? А на выходе у такого же приёмного чипа тоже уже сырые семплы, которые осталось только запихнуть в DAC?

А правда ли, что такой Bluetooth-5.0 чип в режиме передачи звука по блютусу со всеми этими кодеками может жрать меньше тока, чем если бы мы попытались этим звуком качать наушники на средней громкости?

Вопрос-2: а посоветуйте Bluetooth-5 коробочку, куда втыкается старая гарнитура и позволяет по этой гарнитуре говорить, как если бы эти наушники втыкались прямо в звуковуху. Знаю такие коробочки, но там микрофон в виде дырки не самой коробочке, что немного не то: пример Ugreen CM402.

 

lesopilorama
()

Мамкины криптографы. AES.

Форум — Development

Щас будет тупой вопрос. Режимы ECB, CBC и т.п. тут не суть.

  1. Сам по себе AES блочный симметричный: если ключ не меняется, то для одного и того же шифруемого текста выход алгоритма (шифротекст) будет один и тот же. То есть, посылая через такую сырую хрень одинаковые HTTP-запросы, перехватчик будет видеть, что запросы идут одинаковые. Или что у них одинаковое начало)

  2. Поэтому добавляют всякие там initialization vector и подобные приколы.

  3. Вопрос треда в том, насколько нижеописанная идея избавления от повторяемости нормальна, годна, жизнеспособна и криптостойка в целом.

—- Описание идеи —-

  • обмена ключами нет: никакого Diffie–Hellman. Ключ известен двум сторонам заранее, он достаточно длинный и его точно никто не знает, кроме админа Васи, который руками сходил разложил. Ясно, что тут АНБ уже Васю завербовало, но не суть.

  • когда одна сторона хочет законнектиться, то она генерит рандомную строку 1024 байтиков, шифрует её ключом, отправляет другой стороне.

  • Далее эта строка в комбинации с ключом (xor например) уже используется как ключ для всей дальнейшей коммуникации.

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

Возможно это уже как-то называется и реализовано, но вопрос школьный и тупой, поэтому автор не в курсе. Спасибо.

 

lesopilorama
()

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