LINUX.ORG.RU

Сообщения lesopilorama

 

Схёмка видосов города в бюджете до 10 тыр.

Форум — Talks
  1. Xiaomi YI 4K – 5 тыр
  2. GoPro Hero 7 black – 11 тыр
  3. samsung s22 plus LDU – 11 тыр

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

Принимаются советы на данныю тему в данном бюджете.

Нести очевидное - не нужно.

 

lesopilorama
()

Запилил бота в TG для записи подкастов

Форум — Talks

Потестируем, господа.

Бот: https://t.me/voicemixbot

Хелп: https://telegra.ph/voicemixbot-02-06

  1. На ходу не садясь за аудиоредактор прямо в телеге наговорить коротких обдуманных фраз по 5 сек

  2. отправить «go» и получить одно ораторски изящное аудио-поделие без «эээ, нууу».

Конец смысла бота.

Обьясняю нахрена это вообще нужно.

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

И я такой же, факультеты театральные по речи не оканчивал, а подкасты лепить хотелось. Но хотелось лепить так, чтобы это можно было слушать, а не что попало. Пришёл к такой механике: я хочу обдумывать фразу-мысль, записывать её отдельно. Потом подумать и следующую. Если обосрался сказать изящно (это часто), то нужен удобный быстрый жест отмены последней записанной фразы. Как убрать с вершины стека.

Когда наплодил отдельных речевых предложений. каждое из которых сказано ёмко, чётко и без пауз, тупо их склеить в один выпуск и подкаст готов. Получается 5 минут ёмких мыслей, как будто я Венедиктов с опытом на радио 30 лет.

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

 

lesopilorama
()

Немного про беспроводную безопасность. Открываю глаза. Срываю покрова.

Форум — Talks

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

  1. В радиусе 500 метров все разговоры по рациям всех охранников всех пятёрочек, бизнес-центров, грузчиков. Типичный конфиг их рации: частота 446.0…446.1 мгц или 433.075…435 мгц, ширина канала 12500 гц, модуляция FM, мощ 0.5 ватт. Крановщиков, сидящих высоко, слышно вообще за 5 километров. У многих ещё и дефолтные настройки раций, где выставлено 1…5 ватт. Слышно официантов в ресторанах, где подвезли тухлую куру, какой столик не оставил чаевые и т.п. Канал кухня-официанты очень популярен, иначе тяжело бегать туда-сюда. Если ресторан большой, то разные концы кухни обсуждают «мишаня, ты фарш вытащил размораживаться»? Если долго слушать один ресторан, можно потом буквально владельцу позвонить и перечислить за что ты на него в суд подашь и просить выкуп! Даже частные охранные предприятия не слышали, что существует шифрование в DMR рациях, всё передаётся в открытую, абсолютно всё! А если пролетать с приёмником над крупным городом в обычном пассажирском самолёте, то хоть у него корпус и алюминевый, то слышно вообще весь этот город! Вверх-то колебание летит не через здания, а по прямой видимости через самую комфортную для него среду - чистое небо, с минимумом затухания почти как в космосе. Именно поэтому самолёты-разведчики так популярны - в небе нет захламления железобетоном и кирпичом. Если бы в городах не было зданий, использовали бы единицы милливат вместо ваттов.
  2. Целая гора всяких дачиков и сигнализаций в диапазоне 433-435 мгц и 868 мгц. Все эти датчики давления в шинах, термометры на окнах у людей, датчики заполненности жопы. Их просто какая-то гора. Протокол, по которому работает каждый конкретный - очередная техническая фантазия выпускника китайского технического университета, документации на них нет, но чаще всего просто посылки из штук 40-100 каиких-то битов с 2FSK-подобной модуляцией. Можно при желании сделать себе домашний градусник, который будет слушать с них инфу, усреднять и выводить на табло тебе. Чего там только нет, весь диапазон 433…435 мгц буквально засран какими-то нешифроваными пакетами о какой-то херне - их можно годами разбирать и получать горы какой-то информации. То, что в соседнем треде подаётся как сенсация про датчики давления в шинах - это уже сверх-архи-боян последние хз скольких лет. Это старая тема, дефолтная частота этой помойки - 433.92 MHz, там насрано по горло.
  3. Автосигнализации. Тачки, стоящие под окном, отмечаются в эфире, что всё ещё не угнаы и батарейка у них норм. Если пульт тачки не получит пакет, он будит владельца. Можно отслеживать какой сосед когда приехал, если собрать данные, попоставить визуально приезд его повозки и появление сигналов. Для таких детских мощностей, которые обычно применяют на 433 мгц, автомобильный аккумулятор - бездонная батарейка, поэтому там мощи не жалеют и светит оно далеко. Не знаю что будет в подземной паркинге - пробьёт ли оно толщу железобетонных перекрытий от паркинга до 15-го этажа владельца, но гораздо легче ситуация «двор с запаркованными тачками» - они активно светят: и сигналками и давлением в шинах и температурой в салоне и снаружи.
  4. Про блютусы и вай-фаи и рассказывать нечего. Продавались раньше даже счётчики человекопотоков мимо магазинов, которые подсчитывали сколько разных MAC-адресов bluetooth девайсов пролетало в эфире за последние 5 минут. Ясно, что там «по идее» всё шифрованое, но все начальные этапы коммуникаций проходят вполне себе нешифровано, у блютуса есть advertisement каналы и как их там, три штуки, на которых мобила слушает когда проснутся наушники.
  5. В GSM-900 без шифрования проходят первые этапы регистрации в сети, гуглить IMSI-catcher, но за это формально можно на бутылку засесть, а может и нельзя не помню уже, (может просто расстреливают). Можно буквально видеть когда кто в сети зарегался вокруг тебя. Но сейчас все поголовно на LTE, а там такого уже нет, так что пофиг.
  6. Видеоняни от motorola - довольно популярны у мамочек, там прямо с видеопотоком.
  7. Брелки от шлагбаумов и гаражных ворот паркингов. Передают в нешифрованом виде какие-то посылки, где есть ID брелка. Можно палить когда кто приезжает домой.

И чтобы принимать всё вышеперечисленное нужен только средней старины ноут и RTL-SDR свисток с авито за полторы тыщи, плюс правильная антенна. В этой аппаратной конфигурации хорошая антенна - примерно 80% успеха. Оконное стекло рубит уровень сигнала не по-детски на этих частотах, нужно выставлять антенну хотя-бы на подоконник. Я наврал, rtl-sdr кончается на частоте 1700 мгц, а чтобы попринимать Bluetooth нужно до 2500 мгц достреливать - ну это уже 8000 тыр: либо HackRF, но он уже морально устарел, лучше LibreSDR или Pluto+ - это в разы мощнее по возможностям, а цена тыщ 12…16 тыр в разное время на али.

 

lesopilorama
()

C++ и изобретение хеш-таблиц.

Форум — Development

Взглянем на этот набросок:

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


template <class data_t, class hasher_t, class marker_t, size_t SIZE>
class Hashtable {
  hasher_t hasher_;
  marker_t marker_;
  std::vector<data_t> memory_;
public:
  Hashtable()
  : memory_(SIZE) {
  }

  data_t *insert(const data_t &_value) {
    auto index = hasher_(_value) % SIZE;

    // test next 8 cells for free element
    for(int i = 0; i < 8; ++i) {
      auto &ref = memory_[index];
      if (marker_.is_free(ref, index)) {
        ref_ = _value;
        return &ref_;
      }

      index += 1;
      index = index % SIZE;
    }
    // cannot find place
    return nullptr;
  }

  data_t *find(const data_t &_value) {
    auto index = hasher_(_value) % SIZE;
    for(int i = 0; i < 8; ++i) {
      auto &ref = memory_[index];
      if (marker_.is_tombstone(ref, index)) {
        index += 1;
        index = index % SIZE;
        continue;
      }
      if (_value == ref) {
        return &ref;
      }
    }
  }

  bool erase(const data_t &_value) {
    data_t *f = find(_value);
    if (!f) {
      return false;
    }
    // TODO: check if next element is not empty.
    marker_.make_tombstone(*f /*TODO: index argument*/);
    return true;
  }
};


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

Вопрос о другом - щас сформулирую.

Это хеш-таблица с открытой адресацией, фиксированного размера. Коллизии в открытой адресации решают всякими методами, например вот этим линейным пробингом - если в нужной ячейке уже занято, кладёшь куда-то в следующую. При поиске, соответственно, оцениваешь не одну ячейку, в которую попал хешом, а ряд следующих. У ячейки 3 состояния - занято, свободно, «затычка». Затычка - это то, что говорит «мотай дальше, там что-то лежит». Затычки ставятся, когда удаляешь и после удалённого было не пусто. В моём коде это не корректно написано - он безусловно ставит затычку, а надо проверить что её ставить стоит.

Так вот, хранить эти состояния ячеек отдельными полями и флагами я не хочу (то есть, оборачивать data_t в структуру, одним из полей которых будет uint8_t state). А иногда хочу. И это хочу-не-хочу хочется вынести из реализации хетаблицы.

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

  1. Пользователь может решить, что какое-то зарезервированное значение data_t будет отвечать за какое-то состояние.

  2. Пользователь может решить, что нужны отдельные флаги. Тогда он в объекте marker_t херачит массив на SIZE элементов и, получая в вызовах маркера этот индекс, судит по этим состояниям и меняет их когда надо.

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

 ,

lesopilorama
()

Пишем мессенджер. Подумаем об архитектуре БД для черновиков.

Форум — Development

Есть мессенджер, в котором несколько разных распределённых баз, ничего не знающих друг от друге и не имеющих распределённых транзакций. Одна база - это, условно, как отдельный постгрес, а распределённая - это значит пошарденая по какому-то ключу. Реально там не постгресы, а скорее рэдисы. То есть, каждая база - это несколько каких-то редисов. У баз есть кодовые имена, типа:

  • MESSAGE - хранит сами сообщения; это особая база, она хранит каждый чатик как вектор объектов Message, больше ничего не умеет. Зато умеет зверски быстро отдать любой подинтервал любого чатика или вставить мессагу в середину чатика длиной миллиард месаг за микросекунду.
  • LIKES - хранит лайки к чему-то, может вернуть число лайков под каким-то объектом по его ID, больше ничо не умеет. Ну и умеет гарантировать, что ты не лайкнул что-то 2 раза. Реакции короче.
  • ACCOUNT - хранит профили юзеров. Пароли там всякие, ID фотки аватара и что-то такое.
  • SESSION - хранит куки или какие-то залогиненные сессии; Буквально это хештаблица sid=uid.
  • ATTACH - хранит инфу про аттачи; буквально хештаблица attach_id = (кодовое filename в хранилище файликов, автор аттача, когда запощено, тип аттача, что-то ещё..)
  • ATTACH_HASH - хранит хеши известных файлов, дедупликация аттачей, чтобы 2 раза одно и тоже не хранить
  • ATTACH_UID - обратный индекс для аттачей uid=[список всех аттачей этого юзера, чтобы можно было все экстремистские материалы сразу майору слить когда террориста поймали]
  • LIBRARY - информация про чатики или группы или каналы. Длинный профиль и настройки чатика. Буквально хештаблица chat_id = (структура данных про этот чатик рассказывающая - кто создал, когда, полное имя, полное описание, аватарка, флаги разрешённых действий с чатиком, список модеров и владельцев и прочая херобаза)
  • CONTACTLIST - контактлисты юзеров. Ты в чатик зашёл, тебе его в контактлист захерачили. В мессенджер вошёл - твой контактлист вычитали и тебе вернули, чтобы ты мог в свои чатики или в свои контакты смотреть.
  • и т.п. Разных баз около 20 под каждый пук.

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

  1. Раньше постинг мессаги предполагал на backend 1 запрос в базу MESSAGE - запостил и готово, а теперь 2 запроса - надо ещё удалить эту мессагу из DRAFT.
  2. Если DRAFT упала и там что-то было, а ты уже запостил, то потом внезапно клиенту восстанет из ада старый черновик. Возможно это чем-то хорошо, ну мол лучше данные сохранить, чем потерять, но всё равно странновато.

Потом возникла идея, которую надо обсудить.

  1. Выкинуть базу DRAFT и сохранять черновик в базу MESSAGE в отдельную табличку в той же шарде. Когда юзер постит, сделать хитрее: выполнить в базе особо хитровыдуманную атомарную команду «move» которая атомарно-транзакционно переместит черновик как он есть в таблицу сообщений (тут предполагается, конечно, что мы доводим черновик перед этим до состояния финальной мессаги, то есть досылаем в черновик те изменения, которые юзверь сделал после последнего SAVE_DRAFT и до MSG_SEND). В постгресе такой «move» бы наверно делался как небольшая транзакция вида "BEGIN; вставить в MSG результат подзапроса из DRAFT; delete from DRAFT; COMMIT;). Решается сразу проблемы (1) и (2).

Но тут возникла такая приколюха:

  1. Если раньше база MESSAGE была нагружена на запись только тем, что туда постили финальные мессаги, то теперь каждые 2 секунды туда будет апдейт черновика от каждого кто печатает. То есть, это сразу кратный рост нагрузки в разы. Прям в разы. Потому что для каждого «поста» финального сообщения в чатик, который совершался и раньше, теперь этот пост ещё льётся нам каждые 2 секунды в эту базу в отдельную табличку апдейтом. Теперь если посмотреть на пишущую нагрузку в базу MESSAGE то добавление финальных сообщений в неё - это теперь не основная нагрузка, основная - куча апдейтов черновиков.

Короче как лучше не понятно. Ужирнить MESSAGE и забить болт или всё таки юзать схему с отдельной базуней DRAFT?

 

lesopilorama
()

Markdown редактор декстопный посоветуйте, который не тянет 200 мегабайт зависимостей?

Форум — Development
  1. ReText – 280 мегабайт зависимостей и всякой Qt. Нахрен.
  2. Remarkable – тянет через snap какой-то Гном целый на стопицот байтов.
  3. nvim с каким-то плагином – извращение конечно, но за неименеем лучшего пока в нём. Но в консоли оно физически не может рисовать разных размеров буковки и поля.

 

lesopilorama
()

Посоветуйте портативный камеро-gopro-девайс, способный делать 1 jpeg в секунду

Форум — Linux-hardware

Что надо:

  1. Невеликость. Нацепляемость на лямку рюкзака объективом вперёд.
  2. Может быть и какой-то смартфон, но у них экран жрёт питание. Тоже можете посоветовать старые девайсы с годной камерой и тогда сразу приложение timelapse
  3. Довольно неплохая картинка, ну то есть прямо HDR в каждом кадре - в общем не тот уровень, что давали цифровые фотики 2010 года, а что-то поинтереснее - хотя-бы уровень современных видеорегистраторов, чтобы при сьёмке на улице цветопередача была «норм», а не совсем синяя плоская и чтобы земля и небо были загнаны в большой динамический диапазон нормально, точнее наоборот, Ну вы поняли.
  4. Надо чтобы сохраняло на microsd желательно или тупо в собственную память если это сартпхоне.
  5. В идеале это какой-то gopro-подобный девайс, где кнопку нажал и оно поехало делать timelapse видос и чтобы было достаточно просто понять, что нужный режим врублен и оно работает.

Но нельзя просто так взять timelapse видеоснималку. Потому что она добавляет 1 jpeg в новый кадр на скорости 30fps, а мне надо другое - 30 кадров подряд идёт какой-то один джипег. Это так надо по сюжету видоса и это ещё побочно даёт более качественный джипег на экране, потому что больше битрейта можно потратить на один кадр в потоке и кодек не дёргается постоянно между кардинально разными картинками - а камера будет двигаться и постоянно будут разные вещи попадать в кадр.

Интернеты говорят, что GoPro hero 3 plus. Оно умеет timelapse. Причём gopro 4 даёт картинку хуже. Но можно ли gopro заставить делать именно отдельными джипегами, чтобы я потом ffmpeg склеил?

Объектив нужен широкоугольный или нет - это я плохо понимаю, в принципе пока что пофиг. Скорее даже нет, чтобы картинка была как в дефолтной камере дефолтного смартфона в режиме 1x. Но в принципе с широкоугольным фишайным тоже прикольно может оказаться…

Ещё одно требование - дешевизна, ну от тыщи до 4 тыр условно.

 , ,

lesopilorama
()

Список самых высоких по соотношению крутость/цена роутеров для OpenWRT для поднятия простого vpn или подобного.

Форум — Linux-hardware

Есть у меня такой список пока:

  1. Cudy WR3000p/e/s - посмотреть разницу - кажется 3500 руб
  2. Xiaomi AX3000T с нужной ревизией железа - 3500 руб
  3. Netis NX31 - 3500 руб
  4. netgear n600 wndr3800 - 1500 руб
  5. WBR3000UAX от wildberries
  6. Routerich AX3000 USB 2.0 - 5000 руб
  7. Routerich AX3000 USB 3.0 - 6000 руб - нафига для модема USB 3.0 вообще, или может в чём-то ещё разница??)
  8. Mikrotik HAP ac2 - 5500 руб – интересно он уделает пункт (7) по процу?

Замечания:

  1. Цена - это «красная цена», за которую их надо брать на авито. Поправьте если инфа не сотка. Соткуйте инфу, кароч. Или сотчуйте, как правильно не помню.
  2. Докиньте своих вариантов. Варибасов. Варибасья наколбасячьте.

Смысл - быть второй домашней точкой доступа, к которой мы подключаемся, когда хотим поработать в рабочей сети из дома, например. Всякий подключившийся к такой точке автоматически попадает в VPN, допустим. Ну это просто пример задач, которые такой штукой надо будет решать. На штуке хочется запускать всякие самоскомпиленные C++ бинари и вертеть iptables. Возможно юзать USB для LTE-модема, но это не точно, но желательно.

 

lesopilorama
()

Хочу ARM-плату с парой eth интерфейсов 100-1000 мегабит, которая вычислительно будет способна эти 100 мегабит пороутить или зашифровать.

Форум — Linux-hardware

Хочется ARM плату без FPGA, на которой есть пара eth интерфейсов и на которой можно поиграться в мамкиного создателя крутых роутеров, которые уделывают микротик. Пошифровать на лету, порасшифровывать, поискать ключевые строки в пакетах на лету на 100 мегабитах и прочее такое. На что годное с алиэкспресса обратить внимание? На гигабите заниматься извратом нет желания, достаточно тяги в 100 мегабит, например. Тяги - всмысле вычислительной. То есть, пускай при доходе до 100 мегабит реального трафика оно ещё способно полностью пробежать по всем байтикам каждого пакета, а после 100 мегабит уже пускай загибается - такое сойдёт. Хотя конечно хз, лучше с запасом.

Или может есть правда какой-то микротик конкретный, который на авито можно недорого купить и снести ему routerOS в пользу OpenWRT и который железно это всё потянет?

 , ,

lesopilorama
()

Культура разработки. Написание тестов на каждый пук своего кода, фаззинг и т.п. Почему это НЕНУЖНО.

Форум — Talks

Некоторые разводят срачи, мол как можно в 2025 писать без полного покрытия тестами, фаззинга и не на Rust. Стоит бурлёж до неба. Факт бурлежа указывает на неоднозначность вопросика и на отсутствие чётких формулировок у каждой из сторон, скорее всего у той, которая предлагает забить на тесты хрен.

Пришла в голову чёткая понятная формулировка НЕНУЖНОСТИ. Потому, что это как предварительная оптимизация. Аналогия абсолютно точна! Утверждать, что всё должно быть покрыто тестами и фаззингом и быть написано на rust - то же самое, что утверждать, что всё должно быть написано крайне оптимально сразу, ведь ты не знаешь решат ли твою функцию повызвать 1 млн раз в наносекунду и дадут ли потом время переделать!

И предварительно оптимизировать можно, и писать на всё тесты, но у этого есть ЦЕНА. В среднем платить её никому не усралось, ценнее выкатить фичу. Упадёт на проде - тогда и починим (убьют - тогда и приходите). Бизнесу дешевле полдня полежать, чем инвестировать в сотни кнопкодаво-часов, которые будут полгода всё обмазывать своими автоматическими технологиями доказательсва корректности всех веток кода на всех данных, а потом потерять бизнес вообще по другой причине.

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

Короче, краткий ответ: НЕНУЖНО, потому что не бесплатно.

 

lesopilorama
()

Zynq XC7z010 FPGA + linux - насколько это адская жопа по сложности, кто пробовал?

Форум — Talks

Есть платка, на борту у которой

  • zynq xc7z010 - там FPGA
  • Cortex-A9 два ядра в том же чипе
  • 512MB DDR3L памяти
  • microsd
  • ethernet
  • какая-то припаяная NAND флешка с которой грузится сейчас какой-то busybox-овы линукс.
  • куча всяких проводочков выведено из FPGA переменного назначения. Нет USB, но через эти проводочки можно заимплементить наверное, но не суть.

Есть идея поднять на этом чипе любой рандомный armbian и запустить в нём в юзерспейсе такой процесс, который сделает mmap 128 мегабайт ОЗУ и дальше самое интересное - как-то пробросить эти 128 мегабайт в FPGA и на FPGA реализовать некий сложный DSP на этом куске памяти. Сообщать FPGA о том что нужно начать обработку и от FPGA в «линукс» о том, что обработка завершена незнаю как пока, не понимаю бывают ли в этом мире какие-то прерывания между ними.

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

На C++ писать могу, линуксы на ARM-ы накатывать могу, осциллографом и паяльником даже умею пользоваться, но вот с FPGA работал последний раз на детском уровне в универе на каком-то курсаче, а тем более не трогал современные FPGA технологии и особенно их связность с линуксами.

Финально чо хочется сделать: поток IQ семплов с rtl-sdr USB-приёмника процессить на FPGA в задачах корелляции сигналов, спрятанных под уровнем шума, типа попробовать программно подетектировать LORA посылки - для этого надо запустить несколько тысяч параллельных корелляторов наверное, проц такое не потянет, FPGA вполне может, но только с внешней памятью. USB на плате не выведено, ну может по ethernet поток семплов запихаю туда. Процессить IQ-семплы с rtl-sdr на обычном железе алгоритмами на C++ пробовал, но ARM-ядра в этой задаче хватит не на особо амбициозные задачи. Заранее чувствую, что это такая невероятная жопа, что проще помоделировать свои идеи в условном матлабе и успокоиться, но всё равно прикольно было бы поиграться в FPGA хоть как-то.

 

lesopilorama
()

Вот иногда бывает нытьё про авито. А что если сделать сайт торговли-обмена старым электронным хламом чисто наш пацанский свой?

Форум — Talks

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

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

Так вот, чо если сделать чисто такую вот нищеганскую радиобарахолку без пафоса? Телефонных перекупов там щемить на взлёте, держать атмосферу чисто митинского радиорынка той поры, когда там ещё не понастроили ларьки и жёсткими НКВД методами держать именно такой дух. То есть, все сервисы сайта бесплатны, но только для реальных барахольщиков, потому что держать мощный сервак куда влезли бы все перекупы и филиалы М-Видео уже будет платно. Ну и чтобы тебя не сильно щемил РКН, личных данных там не хранить - регистрация чисто по капче и хешкоину (ну типа заставить браузер один раз при реге 10 секунд хеши матчить и потом пропускать, чтобы скриптами много не нарегали) без e-mail, SMS и прочего (просрал пароль - соболезнуем тебе, никакого восстановления, зато бесплатно). Можно в профиле будет сделать возможность задать три пароля, мастер-пароль дома на бумажке запишешь как в биткоене короч. Сила будет в некой небольшой армии модераторов, как на лоре, которые будут резать зло, пропускать добро. Все объявления в выдачу - после премодерации. Ну и наверху сижу я (ну или какой-то другой нормальный господь-вседержитель), который уже пасёт модераторов и инквизирует геев, которые пропустили порево.

Да, скромный объём модераторского корпуса добровольцев не позволит создать быстрый оперативный рынок, но тебе какая разница когда твой старый системник попадёт в поиск - щас или через неделю, он всё равно у тебя валялся 2 года в кладовке. Зато барахолка будет истино барахольной - там можно будет наплодить прям много объявлений про весь свой хлам и свести всё в картотеку. Старые динамики, провод оторванный от мышки, пробитый ломом ноут, старый павербанк. Ну и пусть картотека так лежит - через полгода может кто вблизи тебя такое захочет и хоба вечером зайдёт заберёт.

Ну и модераторскую технологию можно выстроить хитро. С кармой, баллами, белыми списками и т.п. - ну например про тебя известно, что ты не вредитель, потому что у тебя уже 10 раз покупали и ты 10 раз приносил нормальные объявы в течении года, ну значит твоя объява без модерации может идт.

С одной стороны, всё это сивый тупой бред, потому что:

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

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

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

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

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

 ,

lesopilorama
()

Armbian: а как там вообще организована apt-репа? Где там искать .deb пакеты?

Форум — General

https://www.armbian.com/kernel/ – вот у них тут опубликованы две репы. Хочу найти wpasupplicant-blabla-*.deb какой-нибудь. Иду сюда: https://netcup-02.armbian.com/apt/pool/main/ а там каталога с именем «w» вообще нет. Чё вообще происходит, как они там живут?

Пойти покопаться в apt install не могу, я сломал себе apt, lists я тоже дропнул, ничего не вижу из самого apt, переустанавливать нет желания, есть желание понять как оно работало.

 

lesopilorama
()

U-boot и Cubieboard. Одноплатники. SD-карты. Загрузка.

Форум — Development

Allwinner A20 процы и подобные им семейства sunxi имеют где-то внутри прошитый на заводе загрузчик BROM прямо на кристалле, который при наличии SD-слота и правильно выставленных пинах смотрит в этот SD-слот на блочное устройство по смещению 8 килобайт, читает оттуда то-ли 8, то-ли 32KB так называемого SPL-загрузчика (Secondary Program Loader) и далее тупо исполняет код оттуда. Этот SPL может быть хоть вашей инновационной OS мигающей светодиодами, хоть тупым кодом который грузит ещё 100 мегабайт с флешки и исполняет их. Но обычно SPL содержит код, который загружает по какому-то смещению лежащий там где-то дальше U-Boot с жирностью до 32 КБ, который уже умеет парсить прям настоящие ext4 (не в полном смысле монтировать и запускать журнал, а просто хотя-бы читать), этот U-Boot выковыривает из ext4 всякие нужные ему вещи из /boot, главным образом исполняет /boot/boot.cmd, грузит ядро и дальше уже передаёт управление на linux и далее завертелось.

Так вот, вопрос в том, откуда U-Boot знает что на флешке читать надо именно ext4 раздел и на этом разделе что-то там ещё находить.

Взял я исходники U-Boot с гитхаба, кросс-компилял их с помощью arm-linux-gnueabihf-gcc-12 вот таким макаром:

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
make Cubieboard2_defconfig
make -j2

и получил файлик

u-boot-sunxi-with-spl.bin

который закинул на SD-карту таким макаром:

sudo dd if=~/src/u-boot/u-boot-sunxi-with-spl.bin of=/dev/sda bs=1024 seek=8

На данной SD-карте 1 раздел ext4, в которой лежит корень от armbian покоцаный, но настроенный и рабочий. Воткнул это в cubieboard2 железку и она успешно загрузилась.

Я вот не пойму как этот U-Boot понял, что надо парсить именно ext4 FS на этой флешке? Я не нашёл в каких конфигах при сборке у него это было явно записано, в Cubieboard2_defconfig например этого нет.

Там в U-Boot какое-то тупое эвристическое сканирование-перебор всех разделов с попыткой их попарсить и поискать /boot/boot.scr?

 , ,

lesopilorama
()

Взять Armbian и вырезать всё лишнее. Работа на одноплатнике.

Форум — Development

Хочется взять armbian последний-предпоследний, загрузиться с него и на живой системе начать вырезать всякое ненужно. Цель - получить минималистичный дистр, наиболее быстро грузящийся с SD карты на одноплатнике, который ничем особо не занят, кроме отправки бекапов куда-то раз в час и кое-каких фоток с камер видеонаблюдения. Девайс стоит на полке в прихожей, его не трогают.

Хочется оставить:

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

  • wi-fi дрова и в принципе «всю сеть», но без NetworkManager, а через /etc/interfaces + /etc/wpa_supplicant + ifup + ifdown - такой стиль работы с сетью

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

  • родной apt, чтобы могло что-то установить-проапдейтить из armbian репы родной

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

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

Я тут нашёл контрольную плату от биткоино-майнера какого-то, там на борту zynq-ПЛИС+ARM два ядра, 512мб ОЗУ и флешка какая-то. Включил, оно заргузилось, по dhcp адрес получило, root по ssh пустило - а там

BusyBox v1.25.1 () built-in shell (ash)

   ____            _ _              ______   _____
  |  _ \          (_|_)            /  __  \ /  ___|
  | |_) |_ __ __ _ _ _ _ __  ___  |  |  |  |  (__
  |  _ <| '__/ _` | | | '_ \/ __| |  |  |  |\__  \
  | |_) | | | (_| | | | | | \__ \ |  |__|  |___)  |
  |____/|_|  \__,_|_|_|_| |_|___/  \______/______/  by Braiins for Slush Pool
 -----------------------------------------------------------------------------
  2022-02-18-0-b63a6c87-22.02-plus
 -----------------------------------------------------------------------------

Круто это конечно, но до такой степени я armbian врядли урежу да и apt там никакого нет встроенного, вдруг захочется какие-то либы поставить libusb-dev например…

Корень у меня вообще как RO монтируется и я живу в рамдиске, чтобы SD-карту не портить, да и как-то привычнее и стабильнее - мало ли какая тварь в корне что испортит, а так хоть гарантия что ты сегодня загрузился с того же, с чем в чера.

 ,

lesopilorama
()

Качественная запись звука на 2 встроенных MEMS-микрофона Android-смартфона.

Форум — Talks

Есть в нынешних телефонах по 2 и более очень хороших MEMS-микрофона в разных концах корпуса, что позволяет довольно неплохо записывать стереозвук. SONY PCM-D50 с собой уже можно не таскать в большинстве случаев, птичку на дереве записать технически можно достаточно неплохо, употребимо в видеопродакшене и музыкальном творчестве любой степени профессиональности в целом - мужик со спектроанализатором заметит что у тебя на 16.5 кгц обрезано всё и дырки в спектре от пожатия, но никто из нормальных людей в любых наушниках это не услышит. Для собирании семплов для электронной музыки, собирания звуков для видеофильмов и т.п. уровень уже точно преодолён. Я даже кайфую от качества записи «тишины» в парке в дефолтном самсунговом «диктофоне» с выставленным «stereo/256kbps» на топовых самсунгах - очень дофига шороху слышно вкруг. Оперативно телефон всегда с собой, а SONY PCM-D50 оперативно не всегда с собой, поэтому таки телефон. Проблема телефона только в отсутствии ветрозащиты, по качеству звукозаписи уже происходит офигение конечно.

Проблема в софте. Большинство софта берёт какой-то дефолтный input «camcorder» и как-то пожато в AAC 256 kbps пишет в m4a. С включенным AGC, с включенным авто-эквалайзером, который глушит НЧ при задувании ветра в микрофон и прочее такое иногда встречается. А хочется софтину, которая получает поток с этих MEMS-микрофонов как можно более сырой с отключенным авторегулятором уровня, с отключенными авто-эквалайзерами и жмёт само через libopus с указанным битрейтом в два канала, а юзеру выдан регулятор усиления.

Есть чё подобное из софта у кого-то на примете? Спасибо.

 , , , ,

lesopilorama
()

Читал про UEFI, много думал.

Форум — Talks

Господа, читайте и изучайте UEFI, если всё ещё не. Это базовая база нынче!

Я когда-то писал на ассемблере в школе-универе для развлечения бут-сектора для дискет и HDD, MBR это называлось - это такой 512-байтный самый первый сектор диска, который автоматически считывался BIOS на x86 в память по фиксированному адресу и управление туда передавали. У меня был ThinkPad 755C для развлечений. Далее ты всё должен был делать сам. В 512-байтный код надо было запихнуть самодельный примитивный парсер корня FAT12/FAT32, чтобы он нашёл в корне ФС некий условный файл /kernel.bin и передал туда управление - это твой условной grub или вообще сразу же ядро самописной маленькой OS - я писал детскую OS, которая переводила cpu в protected mode и умела параллельные задачи запускать - мигание какой-то лампочкой клавиатуры и считывание каких-то байтиков с неё и какой-то крутящийся курсор. Это был мой kernel.bin бугага.

А нынче эти времена поменялись. Теперь нет никакого BIOS - точнее теперь эту сущность стали называть просто бездушно firmware и это firmware должно соответствовать спецификации UEFI. UEFI - это стандарт внешних и (где-то внутренних) признаков, которые этот BIOS должен проявлять. Раньше как было - BIOS на каждой матери был устроен как захотят, главное чтобы умел int 10h (видео), int 13h (диск), int 16h (клавиатура) и какие-то другие программные прерывания обрабатывать. Ну и ещё было выражение «зайти в BIOS» - это какая-то F1 клавиша и синий экран с менюшками и там можно было save changed and exit - но такой фигни могло и не быть и BIOS всё равно у тебя был. Внутри этих прерываний был чёрный ящик тащемта и работало оно только в 16-bit real mode. Теперь всё это выкинуто нахер. UEFI - это прям как маленькая OS, которая изначально работает в protected mode, там есть концепции драйверов, даже приложений. Есть разные фазы загрузки всего. Оно умеет парсить FAT32 и доставать оттуда загрузчики и приложения и исполнять всё это.

UEFI умеет парсить FAT32, в которой лежат файлики .efi в формате windows PE (MZ в начале файла, микрософт оставила свой след, бугага). В FAT32 есть разные папочки, в них разные .efi файлики, часть из которых имеет фиксированные имена и содержит дефолтные загрузчики и загрузчик этой вашей убунты оформлен как /boot/efi/EFI/ubuntu/grubx64.efi а сама /boot/efi есть точка монтирования vfat-раздела на диске, и этот раздел «осознаётся» UEFI firmware на старте системы.

Ещё у UEFI есть стандарт на хранение кучи key=value переменных - «efivars» которые открыты на чтение-запись, часть из которых имеет фиксированные имена и форматы, а часть пользовательские, можно даже туда телефон бабушки положить и он будет лежать во флешке на матери. Эти переменные можно в линуксах увидеть тут: ls -l /sys/firmware/efi/efivars - оно невозбранно смонтировано как type efivars. В этих переменных лежит и порядок загрузки с разных разделов и ещё всякой дофига фигни, а GUI вашего BIOS нынче просто просматривет эти переменные, а не хранит «настройки BIOS» в каком-то своём формате в чёрном ящике.

Вместо BIOS-прерываний типа int 16h теперь какая-то там системная таблица протоколов, в которой можно найти EFI_SIMPLE_TEXT_INPUT_PROTOCOL и поюзать клавиатуру.

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

Короче господа, изучайте UEFI чтобы не быть чертилой. Это нечто неиллюзорно большое, куда АНБ конечно же напихала своих драйверов и приложений и пока ваш ноут грузится, он может успеть и в интернет сходить, но хорошая новость может быть в том, что UEFI позволяет вам там это выключить или поменять логотип вашего тынкпада на загрузке.

 , ,

lesopilorama
()

Электронщики и обладатели 3D-принтеров, давайте намутим мелкий бизнесок на аккумуляторах для раций. Спрос есть.

Форум — Talks

Суть: ко многим популярным рациям не найти аккумов, выполненных как модуль из пары сменных 18650 с зарядкой по USB-C, а очень надо.

Нужно взять оригинальный аккум, содрать размеры «стыковой» части, смоделировать корпус аккума, который будет стыковаться в рацию как родной (скиллы умения пользоваться штангеном и 3d-воображением) и иметь внутри пару сменных 18650 (без крышки, жёстко на винтах) и надёжно оформленный порт USB-C и вариация TC4056A в как зарядник.

Например, есть популярные рации Vertex Standard VX-231 или vx-120 или vs-261 и подобное. Аккумы, которые с ними продаются или которые можно найти в продаже сейчас, рассчитаны на зарядный стакан. Стакан удобен и прост в максимально хардкорных условиях - воткнул и забыл - нефтяник в масляных руках не будет тыкать usb-c с напиханной в него землёй в порт. Но эти условия далеко не всегда такие и полно пользователей этой техники во вполне офисных условиях или походах без экстрима, когда одним powerbank ты можешь зарядить и телефон и это. Как и на посту охраны в «пятёрочке» у охранника на столе валяется usb-c шнурок для зарядки мобилы. Да, штатные аккумы не Li-Ion, а Ni-MH, чтобы не бояться мороза. Но мороз часто нафиг не интересен и много штатных уже переходят на li-ion, но всё ещё жрут стакан.

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

Основные хитрые нюансы:

  1. Снять размеры с сабжа и смоделировать что-то, что надёжно защёлкивается в рацию. Держится оно железным крючком-защёлкой, как крышка в старых ThinkPad. Если вы в Питере, могу лично отдать на изучение.

  2. USB-порт в модели должен быть хорошо запроектирован, чтобы не провалился внутрь и все кабели подходили.

  3. Рация питается формально от 7.4 V. Ворочать DC-DC понижайку с 8.4 до 7.4 - плохо, потому что ШИМ неплохо нашумит в радиотракт - пробовали; экранировать - треш и гимор-какой-то. Можно дедовским способом ронять напряжение диодами. Короче, тут нужно микро-исследование. Неизвестно есть ли у рации запас прочности до 8.4 из коробки, надо читать форумы.

В общем, смысл этого поста в том, что

  1. Дофига кому такое надо.
  2. Некоторые такое печатают и продают за пару тыр. Но не под те модели, что нужно лично мне - я бы побыл первым покупаном.
  3. Пара тыр - это заметная маржа за небольшую кучку PETG-пластика, разьём, шурупы и пару аккумов.
  4. Если у вас будет проект и налаженный техпроцесс сборки этого девайса, то через авито у вас будут некоторые продажи достаточно продолжительное время, потому что раций этих развелось достаточно дофига. Не говоря уже про всякие баофенги. Сложность в том, что каждая новая модель рации - всё сначала, замеры и тесты с нуля. Но чем для большего количества разных популярных моделей вы сможете предложить решение, тем у вас чаще продажи. Спрос на такое подыхать пока не собирается.

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

 , , ,

lesopilorama
()

html canvas, линии, координаты, пиксельные буферы, OffscreenCanvas и прочее безумие.

Форум — Development
  1. Известно, что <canvas> 2d context считает центром самого первого пикселя координату (0.5, 0.5), потому что координаты он считает не как индексы пикселей, а как координаты, мать её, сетки, между которыми пиксели стоят. Координата (0, 0) обозначает не самый верхний левый пиксель, а верхнюю-левую вершину этого пикселя. Поэтому если ты пустил линию (0, 0, 10, 0), то получишь что-то размытое антиалиасингом серое между двумя рядами пикселями. Причём, верхнюю половину размытой линии ты не увидишь, у ибо она будет тянуться до -0.5, а экран у тебя от 0. Некоторые делают context.translate(0.5, 0.5) и так живут, а некоторые + 0.5 везде пишут. Дурка, короче, но не суть.

  2. Но есть ещё OffscreenCanvas, чтобы в памяти рисовать спрайты (например), быстро рисуемые на другом канвасе.

Теперь зацените прикол:

  1. Выключаем на главном наэкранном канвасе всякий там context.stanslate(0.5, 0.5) и рисуем линию по целочисленным координатам. Ожидаемо видим размытую хрень. Ладно, понятно.

  2. Теперь, берём и то же самое рисуем на OffscreenCanvas, ожидая что в памяти в пиксельный буфер будут отрендерены такие же размытые линии. Далее методом context.drawImage(my_offscreen_canvas) пихаем нарисованное на нашем OffscreenCanvas главный канвас. И хоба, никакого размытия мы не видим, все линии чоткие пацанские.

Как так-то?

 ,

lesopilorama
()

Поверхностный вопрос к знатокам Lanczos даунскейла картинок.

Форум — Development

Попробовал тут реализовать на сишечке lanczos3 и получается вот такое:

оригинал: http://0x0.st/KTx6.png

результат: http://0x0.st/KTxE.jpg

Вопрос пока без исходников - правда ли что такого мерзского алиасинга в нормально реализованном lanczos3 даже близко быть не должно? Артефакты сжатия джипегом во второй картинке тоже есть, но основные претензии к этим ссаным лесенкам на тонких линиях. Если кто реализовывал lanczos-based downsampling в обозримом прошлом, можете примерно подсказать отвал жопы в каком месте мог привести к подобным приколам?

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

UPDATE Как обычно был обманут DeepSeek. Оно мне в качестве примера выдало некий кусок кода, который вот так с артефактами работал, на первый взгляд выглядело годно. Но оказалось, что оно забыло увеличить размер ядра. То есть, идеально-математическое представление ядра свёртки 3*3 в физической реализации для конкретного ratio ресайза не растягивается как нужно. Условно говоря, вам надо свернуть полоску пикселей в один пиксель, но длина этой полоски не должна быть константной в 6 пикселей, а должна растянуться плавно на «сколько нужно» если ratio больше единицы. Так-то. Короче, забыл подумать не-жопой! После допила напильником заработало идеально, прям цимес! Дипсиком я пользовался для уточнения некоторых физических смыслов, было полезно, но когда дошло до реального кода у него жопа отвалилась.

 ,

lesopilorama
()

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