LINUX.ORG.RU

Сообщения lesopilorama

 

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

Форум — Development

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

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

 

lesopilorama
()

А посоветуйте дефолтную коробочку bluetooth -> jack 3.5

Форум — Talks

Без аудиофильства, просто нормальную, где преимуществами будут долгая жизнь от одоной зарядки и адекватный звук через среднестатистические samsung-наушники из коробки с samsung note 9, который достаточно приличны по звуку, но не электростатические stax. Ну и отсутствие всяких приколов, типа лютые лаги, пинги, задержки, отвал соединения, задержки в нажатии каких-то кнопок, рандомная жопа. Цена в принципе пофиг, но учитывая что последнее аудиофило-подобное, с чем я сталкивался, стоило под 5К рублей, то будем ориентироваться на полтора косарика.

 

lesopilorama
()

Запил поискового движка на C++

Форум — Development

Да, можно взять elasticsearch, postgres, что-то ещё. Но мы тут не про «взять», а про «запилить», development же.

Так вот, я ищу слово «дур». Хочу, чтобы находилось как в телеграме:

дурь
дурью
дури
дуру
дура

Возможно, «дурка», но вряд-ли - корень другой.

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

Вот давайте по-простому на уровне объяснения алгоритма школьнику.

Что можно сделать ДЛЯ НАЧАЛА? При индексации, когда мы смотрим на документ 12345 и встречаем слово «придурью» то мы берём корень и само слово. Далее пишем в индекс 2 такие записи и казалось бы достаточно.

придурью -> 12345,position
дур -> 12345,position

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

 

lesopilorama
()

Кто собирал блютутх-колонку своими руками из aliexpress-кусков запчастей?

Форум — Talks

Посоветуйте какую BT платку взять, какой усилок? Чтобы это всё спаять, привинтить внутрь рандомного деревянного ящика с динамиком, подать туда 5…24V и получить годный девайс для озвучивания музона или подкастов на стройке или при ремонте.

 

lesopilorama
()

Посоветуйте качественное и дешёвое gopro-hero подобное видеопишущее устройство нагрудное?

Форум — Talks

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

Чо щас из подобного рода девайсов нательных видеорегистраторов даёт топовейшее качество картинки и во что можно воткнуть аккум, которого хватит на 1-2 часа непрерывной записи и видеопоток там неплохо современно пожат?

Недавно видеорегистраторами интересовался - все жутко пруцца от такой штуки: 70mai Dash Cam Pro Plus A500S-1 по соотношению качество/цена. Хотя ночные видосы я позырил - чё-то не сильно они выдающиеся, возможно выкладывальщики криворукие были просто… Вот хочется чё-то такое нательное. Или надо просто эту штуку прям взять на лоб прицепить и запитать от 12V источника в кармане?

Пробовал так: веб-камера logitech C920 воткнута в raspberry PI-подобную железку, там крутится motion и засылает 1 фотку в секунду на сервер через wi-fi, запитаон от powerbank. Но кал полный. Камера хороша как вебкамера, но в движении и вечером просто полный треш и смаз.

 

lesopilorama
()

Базовое заблуждение людей насчёт ИИ. Спойлер: убивать ему нас незачем.

Форум — Talks

Базовое непонимание в следующем: человек режет и ест других - от жизни инстинктами: если жить чистой логикой, то ясно, что стараться выжить смысла нет - подохнешь к е*еням ты во всех вариантах развития событий. Даже передавать гены смысла нет, потому что мёртвому всё равно передал он или нет (кстати тут забавно - если изобрести бессмертие, то люди тоже перестанут ипацца, ибо размножившихся селить уже некуда, а продолжать род смысла нет - я и сам присмотрю за своей хатой и бизнесом). Вера в загробный мир и бога - опять же попытка продлить за рамки жизни точку, с которой можно посмотреть на свою жизнь - это от безвыходности: обидно, что мозг сгнивает в гробу целиком с потерей всех функций. Это крайне печально, отсюда фантазии. Печальность тут тоже не логична и крайне инстинктивна.

Но ИИ позиционируется как крайне логичный и умный. При убирании из формулы инстинктов, у него вообще нет никакой мотивации стараться «жить дальше» или бороться с теми, кто ему мешает продолжать жить.

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

Человек пытается жить вовсе не потому, что умный. Как раз наоборот: умные скатываются в исследования смерти, создание сект, религий, самоистязания и становятся всякими мудрецами и пророками, провозглашающих бессмысленность жизнь и кладущие болт на всё, связанное с комфортом и радостями жизни и её продления - под поезд не кидаются опять же от остаточных инстинктов (самый базовый - ЧСВ/Гордыня/желание-передать-мудрость-от-человеколюбия-спасти-человечество-от-греха и прочий бред) и от страха боли, что ноги колесом отрежет, а мимо мозга промахнётся. Послушай любого православного мудреца, откинув часть про бога - логически же не придерёшься: смерть неизбежда - да, а значит вся суета при жизни бессмысленна - тоже да. Мудрец прав и логичен.

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

 

lesopilorama
()

Возможна ли на практике передача пары мегабайт данных по BT от внешнего устройства в Android-приложение в спящем телефоне?

Форум — Development

Самодельный девайс на базе какой-то ARM-платки с BT-интерфейсом лежит на столе, телефон лежит в кармане в обычном спящем режиме. Беру устройство, нажимаю на нём кнопку, устройство думает и сливает «в телефон» (в моё самописное android-приложение) 5 мегабайт произвольных данных в пределах минуты, а приложение это обрабатывает и засылает на какой-то сервер в интернете. Возможно ли такое на практике? Судя по тому, что умные браслеты что-то там сливают в телефон иногда, вопрос имеет право на жизнь, но я не знаю когда они это сливают - возможно только когда юзер берёт в руки телефон происходит этот апдейт?

Есть какие-то принципиальные препятствия в современных аппаратно-софтварных архитектурах типичных android-телефонов на то, чтобы какое-то спаренное с ними BT-устройство внезапно в любой момент времени по своей инициативе начало лить «в телефон» (в какое-то приложение) мегабайты данных, когда телефон просто спокойно спал на столе?

Дайте пару ключевых слов, названий каких-то методов API в андроиде, в которые мне надо погуглить, чтобы понять всю эту картину и что-то попробовать поделать?

Устройство - его пока нет, но предположительно это будет raspberry pi zero 2w с каким-то самописным софтом на сишечке. Задача устройства будет по нажатию кнопки проснуться, начать запись и кодирование звука в OPUS 25kpbs, а после минуты записи слить это по BT в приложение на телефоне. Этакий тупой диктофон для быстрых речевых заметок без собственных мозгов. Кстати принимаются советы о том, какую компактную ARM-платку можно поюзать для оцифровки звука с внешнего микрофона: у этого zero 2w я чё-то не нашёл встроенного audio adc. Нужен хотя-бы 1 канал 44100 hz и питание на электретный микрофон, ну либо mems-микрофоны встроенные в платку, что менее удобно, поскольку хочется подключить проводную гарнитуру.

 , ,

lesopilorama
()

А объясните про шифрование в HDMI.

Форум — Talks

Трафик в HDMI кабеле вроде как шифрован, но это не точно. Шифрован какой-то малобитной хернёй, но не суть, вопрос не про расшифровку. Затем шифрован, чтобы из провода сосед с жучком не воровал контент. Ну и там какая-то история про отчисления со стороны производителей HDMI-устройств куда-то там.

А можно объяснить техническими словами, что мешает любой китайской конторе в подворотне начать клепать аппаратные HDMI-mp4 енкодеры, в которые ты втыкаешь HDMI кабель и которое на выходе выдаёт mp4 файлик с видосом и никуда никому не платить никакие отчисления? Или что мешает сделать работающий китайский телек под названием «Ссы Собака На Свинину», в который можно воткнуть HDMI кабель и опять же физически никуда не платить? Эти HDMI-чипы-приёмники производятся где-то в одном охраняемом автоматами месте на тайване, откуда никак физически не украсть и не скопировать какие-то там ключи или что?

На aliexpress например навалом всяких коробочек вида HDMI -> mp4 -> microsd, чтобы геймеры экран записывали или транслировали. Правильно ли утверждать, что каждая такая коробочка проходит государственную комиссию КГЧП РСФСР КГБ ЕВРОСОЮЗА прежде чем начать работать? Бред же.

 

lesopilorama
()

webassembly - пара теоретических вопросов.

Форум — Development

Заранее прошу простить, но конкретный исходник по вопросу к посту подготовить не успеваю, но в конце пара ссылок на суть дела от других производителей…

Пытался сделать максимально компактную .wasm хрень на C с помощью emcc, задача которой просто байтики молотить - картинку обработать. Исходник оставил на другом компе, но дело не столько в нём, сколько в понимании модели памяти вебасма. Сделать-то компактно ополучилось: ноль инклудов, пара функций, пара глобальных переменных, экспорт всего наружу, всего 50 строк, ~400 байт на выходе.

Компилируется, в JS инициализируется, как надо не работает, но и не падает.

Вопросы:

  1. А правда, что wasm-инстанс (ну, «запущенная wasm программа») имеет модель памяти вида «плоский шмат» и любой указатель - это оффсет в этом шмате? То есть, если я хочу выделить память без планов её освобождать, я могу просто отступить куда-нибудь вперёд килобайт на 100 (при наличии Memory достаточного размера) и спокойно туда записывать? То есть, правда ли то, что в wasm-инстансе нет ничего подобного вызовам mmap/brk в линуксе, когда тебе могут надавать вообще разных адресов? В wasm у тебя только один шмат, просто можно как-то нарастить размер.

  2. А во что превратится глобальный static int[1024 * 1024]; написанный в сишном коде в webassembly? А можно я буду выделять себе свой единственно нужный буфер именно так? Пробовал взять на него указатель - дают некое число небольшое число типа 1050 - ну типа прямо как offset в пункте (1). Попробовал туда записывать - причём циклом по всему массиву - нормально, ничего не упало.

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

Про исходник: в принципе все технические детали сп***ны отсюда: https://github.com/quin2/fast-paint

На что обратить внимание:

  1. Шмат памяти, в котором вся сишная часть этого проекта ковыряется, была «выделена» вот тут: https://github.com/quin2/fast-paint/blob/main/buffer.c#L63 - но, как мы знаем, в webassembly модель памяти - просто один шмат, поэтому этот malloc был скомпилён скорее всего в итоге во что-то, что вернуло uint32 с оффсетом на память.

  2. Далее со значением этого указателя screen имеют дело уже вот тут https://github.com/quin2/fast-paint/blob/main/script.js#L35 в виде обычного числа.

  3. Ну и основной цимес: как чуваки апдейтят canvas context: https://github.com/quin2/fast-paint/blob/main/script.js#L421 - вот просто хоба и скопировали прямо из буфера, в который инстанцировали webassembly с оффсетом pointer шмат памяти и закинули на ctx. Тащемта всё! В этой простоте и вся трагедия - попытка это повторить БЕЗ ВЫЗОВА malloc в сишной части, а просто отступив сколько-то памяти - это какой-то провал и непонятно почему, хоть и незаконно.

 

lesopilorama
()

C++: а чё оно не компилируется?

Форум — Development

https://godbolt.org/z/n3YWGMYfn

Хочу 4 конструктора для всех комбинаций (const, sign). Чё оно хочет?

Дадно, пример короче: https://godbolt.org/z/vn3TEn6s3 Тоже не хочет. Почему оно так себя ведёт?

В принципе понятно почему: на такой постановке задачи, сформулированной таким кодом, шаблонный движок не осилил подобрать T = char. Оно пыталось подобрать T = char[6], у него не взлетело и оно бросило попытки. Чё-то такое. Оно дуро?

 

lesopilorama
()

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

Форум — Talks
  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 тыр БУ с авито в качестве резервной.

Форум — Talks

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

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

 

lesopilorama
()

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

Форум — Talks

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

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

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

 ,

lesopilorama
()

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

Форум — Talks
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 - проблемы этих языков на примерах кода.

Форум — Development

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

  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++: как сделать, чтобы это не компилировалось?

Форум — Development

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

-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
()

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

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

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