Есть два потока: первый наполняет буфер (на самом деле буфера два, один наполняется, второй обрабатывается, потом меняются) данными из сети, второй ждёт данные в бесконечном цикле и должен их обрабатывать, как буфер заполнился, а остальное время спать. Второй может работать дольше первого, соответственно пропустить несколько наполнений. Данные, которые второй поток обработать не успел, нужно отбрасывать.
Проблема в том, что, если второй поток работал слишком долго и пропустил несколько циклов заполнения, то первый поток уже установил переменную, используемую в предикате, в состояние true и вызвал (один или несколько раз) notify_one(). И «cv.wait(lk, []{return ready;});», насколько я понимаю, снимает блокировку сразу, не дожидаясь нового события (новых данных). Второй поток при этом начинает обрабатывать старые данные. Мне это не нужно. Нужно, чтобы он ждал свежие, а те, что не успел обработать, просто отбрасывались бы.
Можно было бы использовать «cv.wait(lk);», т.е. без предиката. Тогда, насколько я понимаю, notify_one() вызванный до wait() будет проигнорирован, а сработает тот notify_one(), что вызывался уже после wait(). Что мне и нужно. Но везде пишут, что без предиката может произойти некое состояние «spurious wakeup» (ложное пробуждение), когда никто не делал notify_one() или notify_all(), а wait() вернул управление и поток-обработчик проснулся просто так.
Как такая задача правильно решается? Каким чудом эти spurious wakeup вообще случаются?
В основном работа происходит удалённо из дома. Заключается в написании кода на Python, C++, взаимодействии с оборудованием по USB. Но иногда прямо очень надо что-то делать в офисе, например, когда случается показывать наработки начальству или когда надо отлаживать код с другим комплектом оборудования. Поскольку работа в офисе не ограничивается только демонстрациями, то бывает нужно дописать/собрать что-то по месту, поэтому и среды разработки со всеми библиотеками, исходниками и вообще всем желательно иметь под рукой. Возникает желание сделать синхронизацию двух систем по сети. И не только какого-нибудь каталога /home/user/mycode, а вообще всей ОС. Чаще всего только в одну сторону, но иногда и в обратную.
Вопрос: Как это лучше сделать? Может есть какие-то готовые решения? На компьютерах различаются материнские платы и процессоры, видеокарты одинаковые. Но Linux не винда, от разного оборудования проблем быть не должно. ОС Ubuntu 18.04, машины находятся в одной VPN. Никаких MySQL и других БД в системе не имеется, т.е. нет особой опасности получить нецелостное состояние.
Думал делать просто rsync'ом по расписанию. На домашней машине создавать LVM снапшот, и с него копировать на удалённую. Но не уверен, можно ли на удалённой просто так переписывать все системные файлы во время работы или надо установить ещё одну ОС для использования во время копирования.
Возможно это лучше делать через какое-то перевалочное сетевое хранилище (сервер с расшаренной директорией).
Пока не придумал, как обезопаситься от конфликтных ситуаций. Например, если изменения с домашней машины ещё не все скопировались, а на офисной уже произошли свои.
Или лучше разделить копирование файлов ОС и файлов в /home? Приходила мысль монтировать /home по сети, но это не вариант, т.к. с устройств надо много и быстро писать.
Есть удалённый сервер в другом городе на котором я работаю. Нужно запускать как 2D, так и 3D приложения. Сейчас используется связка VirtualGL+TigerVNC(и клиент и сервер). Ускорение на GPU сервера, скорости отрисовки 2D и 3D меня устраивают.
Не нравится, что работа происходит с целым рабочим столом. Буфер обмена часто не синхронизируется и переключаться между локальными и удалёнными окнами очень не удобно. Я бы хотел запускать отдельные приложения и видеть отдельные окна.
Пробовал SSH+X11Forwarding+VirtualGL, но оно работает медленно.
Что можно использовать в связке с VirtualGL, более быстрое нежели обычный X11 протокол? Чтобы при этом пробрасывались только нужные окна. Желательно, чтобы управлялись локальным оконным менеджером.
Надобно это для совместной разработки от разных пользователей одного проекта.
Да, я знаю, что для совместной разработки надо использовать VCS. Но сейчас начальный активный этап разработки с исследовательским уклоном. На месте (в одной директории) получаются данные с устройства для анализа, на месте пишется и компилируется короткий говнокод для разбора этих данных. Потом это будет структурировано, причёсано и т.п.
Да, я в курсе про chmod g+s на директорию и ACL (хотя может не разобрался?). Всё равно не удобно. Нужно не просто иметь доступ к файлам/поддиректориям директории на чтение/запись/выполнение (в комбинациях по необходимости), но и иметь возможность менять права на файлы от имени любого пользователя, как если бы он был владельцем. Вот со сменой прав не получается.
Работать от одного пользователя не удобно. Присвоить им один UID - изврат ещё больший, чем то, о чём я пишу.
Я знаю, что штатно такой функциональности нет и у каждого объекта ФС есть только один владелец. Но, может быть, есть обходные пути через какое-нибудь хитрое монтирование с FUSE? Файловая система ext4.
-----------------------------
Всем спасибо. Нашёл bindfs, который вполне подходит.
Интересно, почему в современном Linux этот подход вроде бы используется, а вроде бы и нет?
Например, в Gnome можно смонтировать архив штатными средствами, также есть отдельные FUSE файловые системы для этих целей. Но при этом, например, Midnight Commander архивы открывает через что-то своё встроенное и в нём уже нельзя нажать Ctrl+O и выполнить несколько bash команд. KDE, насколько я помню, аналогично Midnight Commander'у.
Или ещё пример. Недавно было обсуждение, о том, как будут работать скриншоты и скринкасты с переходом на Wayland. И там что-то с D-Bus+PipeWire. Я так понимаю, к последнему будет своё API. Почему бы не реализовать интерфейс получения скриншота также как в видео? И с правами всё просто. Запретил через AppArmor-профиль браузеру получать доступ к /run/user/self/wayland/screen-0/ и подлый браузер за тобой не подглядывает.
Почему D-Bus не выглядит как файловая система? echo 100 > /run/user/self/volume-control. Удобно же! Опять же правами рулить просто и быстро. Можно через стандартные группы и пользователи, через ACL, всякие SELinux тоже в тему.
Единообразие интерфейсов это же так здорово! И примеров можно придумать ещё миллион...
Собираю из исходников библиотеку Open3D. https://github.com/IntelVCL/Open3D Чтобы не засорять систему, как воспитанный дрессировщик пингвинов, решил использовать checkinstall. Но оно создаёт пустой пакет.
При просмотре файлов из «Some of the files created by the installation are inside the home directory» там есть некоторые тестовые файлы и примеры, но основных файлов библиотеки там нет. А пакет при этом совсем ничего не содержит.
Ubuntu 18.04 checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran
Как починить? Или может есть какие альтернативы этой штуке? Похоже, что программка не особо активно развивается.
Есть у меня кучка PLY файлов, которые получены путём 3D реконструкции, в формате три координаты+три составляющие цвета. Пытаюсь написать простой топорный просмотрщик анимации из серии файлов.
Проблема в том, что на экране всё время одно и тоже облако. Пробовал каждую итерацию присваивать разные идентификаторы, вроде «cld»+номер_кадра, но это ничего не дало. Для теста сделал смену цвета фона. Вот это работает и фон мигает с нужной частотой. То ли viewer.removeAllPointClouds(); ничего не удаляет, или надо апдейт сцены какой-то сделать... Не понятно!
P.S.: Ну да, через SIGALRM, наверное, глупая идея делать, но мне не для продакшена, для себя.
Придумываем в соавторстве фантастический мир в котором будет развиваться сюжет эпичной борьбы добра и зла ну надо же, как это ново!. Завели общий google doc. Совершенно не удобно даже на раннем этапе, а что будет когда доберёмся до объёмов «Войны и мира» и помыслить страшно.
Посему вопрос. А в чём же это нормальные люди творят?
Хотелось бы: = Визуальной графоподобной структуры всего документа. Т.е. есть нод/сущность (допустим, животное), у неё есть название, описание, есть зависимости от других нодов/сущностей (допустим, еды), между ними связи, другие в свою очередь зависят по цепочке и т.п. -= Удобное представление, сворачивание связей, масштабирование. -= Удобная и быстрая навигация между нодами, поиск -= Поддержание целостности. Т.е. при удалении одного нода, зависимости помечаются как нарушенные. -= Слои связей. Скажем, между разными нодами могут быть отношения в разных категориях, удаление связей в одной не нарушает целостность связей в другой.
= Переменные. Назвал животное лупоглазиком, потом не понравилось, и поправил сразу во всех местах, где встречается.
= Теги/классы/категории нодов. Нужно для группировки и быстрой выборки нодов между которыми нет прямых связей. Например, группа «растения мира». Зависимости между ними нет, но нужно, чтобы их можно было быстро найти. Конечно, можно создать специальный нод и от него наследовать все растения, но при большом количестве связей такая организация только создаст лишнее захламление документа.
= Версионность как всего документа, так и отдельных нодов. -= Внутри одного нода может быть несколько версий. Например, можно переписывать отдельные характеристики отдельного предмета, при этом связи не нарушаются и версия связей не меняется. -= Версия связей всего документа.
Поставил свежую Ubuntu 18.04, GNOME Shell 3.28.1. Дефолтное расположение панелей ну никак не нравится. Две вполне можно совместить в одну панель снизу (как Windows 7). Для чего было использовано расширение «Dash to panel». Но есть проблема в том, что пропадает меню текущего приложения, которое было в панели сверху и нигде его нет. Где-то мне раньше попадалось расширение (или просто настройка), чтобы это меню переехало в заголовок окна в виде отдельной кнопки. Но никак найти не могу, не помню, как называется.
Как вообще сейчас модно, современно использовать меню? Когда-то давно следил за этим вопросом, ещё на заре Unity и даже в других средах делал аля macOS. Потом забил на это дело, в Unity было вполне нормально. А потом в GNOME сделали что-то непонятное. Меню на верхней панели, но там всегда какие-то стандартные три пункта. Я понимаю смысл меню в стиле macOS, оно всегда на виду и всегда у края экрана. За счёт этого можно быстро мышкой попадать в нужные пункты. Хотя у него есть и недостатки, например, нужно сначала передать фокус нужному окну, а потом уже лезть в меню. В меню в стиле классического Windows всё наоборот: целиться неудобно, но зато не надо кликать дополнительно. А меню в GNOME Shell зачем такое?
Ещё хочется настроить тени у окон. Где и как это сделать?
А также отучить панель менять стиль при прижатии окна к ней. Это вообще очень странная концепция. Пусть уж будет либо прозрачной и светлой, либо чёрной. Но никак не меняющейся постоянно. Раздражает!
Ъ: Замминистра финансов Алексей Моисеев в интервью телеканалу «Россия 24» высказал позицию министерства финансов по поводу легализации торговли криптовалютами. Он напомнил, что по этому поводу проходила «достаточно публичная» дискуссия между Минфином и Центробанком, где последний высказывал более жёсткую позицию по запрету криптовалют, а Минфин — более мягкую. В частности, Минфин предлагал всё-таки разрешить физлицам и квалифицированным инвесторам торговлю криптовалютами на лицензированных биржах. Но в итоге всё-таки взяла верх запретительная политика Центробанка. Так что такого разрешения не будет. Судя по всему, сохранится нынешний статус-кво: торговля будет осуществляться только на подпольных биржах в интернете без государственных гарантий.
Моисеев против изменения Гражданского кодекса для создания статуса криптовалют. Он считает, что они вполне вписываются в имеющееся определение «иного имущества», но дискуссии на этот счёт продолжаются. Статус криптовалют должен быть описан в законодательстве до 1 июля 2018 года, также как понятие технологии распределённых реестров (блокчейна), токена и смарт-контракта.
Вообще, министерство финансов ожидает спада интереса к криптовалютам и падения цены биткоина.
Чиновник отметил, что официально покупать и продавать криптовалюты будет нельзя, но вот сделки в рамках ICO предполагается законодательно разрешить с неким механизмом защиты инвесторов, то есть юридически оформленными обязательствами эмитента в процессе размещения токенов и «дубликацией смарт-контрактов хотя бы в одном экземпляре». Сейчас готовятся правила регулирования ICO в России. Предложения по криптовалютам и рынку ICO должны сформировать к 1 февраля 2018 года, законопроект по ним может быть принят Госдумой в весеннюю сессию.
Крипторубль, по словам Моисеева, станет развитием национальной валюты в электронном виде (что уже существует) с возможным расширением такого её использования. Моисеев при этом предложил использовать вместо термина «крипторубль» более подходящий термин «киберрубль»: «Когда говорят о крипторубле, то немножко смешивают понятия. Все-таки более привычно его называть киберрублем. В принципе, что в крипто-, что в кибер- присутствует криптография. Поэтому не будет ошибкой назвать любой «Яндекс»-кошелек или любой другой «кошелек» крипторублем. Но здесь речь идет о развитии электронного рубля в том виде, в котором он существует. Но возможно некоторое расширение его использования», — сказал замминистра финансов.
Кроме введения в законодательство статуса криптовалют, токена и смарт-контракта, к 1 июля 2018 года регуляторы должны выработать требования к майнингу и определить механизм налогообложения майнеров.
Центробанк РФ поддерживает введение налога на майнинг. Первый зампред Банка России Ольга Скоробогатова сказала, что налогом должны облагаться как юридические лица, так и частные предприниматели. Этот вид деятельности должен быть зарегистрирован в законном порядке и облагаться налогом: «Майнинг — не только деятельность по производству криптовалют и даже не столько, это более широкое понятие. Майнинг используется при применении технологии блокчейн и является валидацией транзакции, которая в виде блоков представлена в этой технологии, — пояснила Скоробогатова. Она добавила, что для майнинга «требуется большая инфраструктура, поэтому мы считаем, что это вид деятельности».
Позиции ЦБ, Минфина, Минкомсвязи и Минэкономразвития, совпадают «по основным моментам», сказала Скоробогатова.
Что за зверь? Какой-то развод, фейк или реально работает?
Ъ: Биткоин-банкомат появился в Казани. Установлен он в небольшом продуктовом магазине на улице Восстания. Терминал позволяет обменять рубли на электронные деньги и криптовалюту на рубли.
Хочу померить, сколько процессорного времени потребляет группа процессов, запущенная от одного пользователя. Но дело происходит в контейнере LXC, поэтому «sa -m» ничего не показывает, т.к. accton не работает, ругается сообщением «accton: Operation not permitted».
Я ведь правильно понимаю, что можно взять поле «TIME+» из вывода команды top и сложить для нужных процессов нужного пользователя? Результат будет тот же, что и вывод «sa -m» в графе с обозначением «cp» или нет? При запуске «sa -m» за пределами контейнера похожих цифр не наблюдаю. Однако сумма «TIME+» из top для всего контейнера совпадает с полем «CPU use:» в выводе «lxc-info --name контейнер» (если секунды последнего пересчитать в минуты).
Суть всех этих манипуляций в том, что планируется перенос сайта из этого контейнера на виртуальный хостинг, у которого есть ограничение нагрузки на процессор, измеряемое в CP. Как ответили в техподдержке, измеряют они это CP через «sa -m» и это время использования процессора в минутах.
Интересно, что в одних доках пишут, что «TIME+» измеряется в минутах, в других - секундах. Кстати, как оно считается по факту и насколько корректно сравнивать значения для разных систем? Это ведь для какого-то абстрактного процессора в вакууме?
Скончался роутер, подбираю что-то на замену в районе 3000 руб. В приоритете мощность wifi (чтобы через стену на улицу добивал), два диапазона и гибкость настроек.
Интернет потребляют 2 планшета, 3 телефона, 2 компа, один престарелый нетбук и один телевизор.
Интернет PPPoE, оптика и медиа конвертер. Сейчас 25 Мбит, но хочу перейти на тариф шустрее.
Из хотелок: DDNS (no-ip), port knocking для проброса портов, VPN и заворачивание трафика в socks5, ssh клиент и сервер.
Вообще, что лучше, Mikrotik с кучей настроек из коробки или обычный роутер с OpenWRT? Как у Mikrotik с расширяемость, там какая-то пакетная система? Можно ли использовать USB для установки ПО?
Пока присматриваюсь к: Mikrotik RB952Ui-5ac2nD - встроенная антенна. что у него с дальнобойностью? TP-LINK Archer C59 - не понятно, что тут с OpenWRT. TP-LINK Archer C50 - вроде, что OpenWRT ставится без проблем, но в отзывах пишут о большом количестве аппаратного брака.
Есть племянник, 7 лет. У него есть игровой (с контроллерами) планшет на Android и ноутбук родителей. Кроме игорей у него часто появляются вопросы, как чего устроено, зачем надо и т.п. Хочу купить ему годную книжку.
Требования: + Чтобы книжка была рассчитана на неподготовленного читателя, но при этом не останавливалась на уровне чайников или совсем детском. Т.е., я понимаю, что в этом возрасте объяснить про логические схемы и регистры может быть сложно, но чуши вроде «процессор это сердце компьютера» очень хочется избежать. + Чтобы она охватывала широкий спектр вопросов: что внутри компьютера, что вне его (сети, интернет, разное оборудование), какой и зачем бывает софт, зачем нужна ОС и т.п. + Читалась бы при этом достаточно легко.
Читает он бодро (для своего возраста) и это дело любит, поэтому можно и толстую. Кроме того родители настаивают, чтобы больше читал и меньше играл.
P.S.: GNU/Linux тут при том, что если в книжке про него будет написано, то это будет очень здорово. P.P.S.: Раньше, когда подсаживал не сильно опытных знакомых на GNU/Linux, обнаружил, что нет хороших книжек с азов и до хорошего уровня для пользователей GNU/Linux. Везде подразумевается, что пользователь уже достаточно подкован в общих вопросах. Т.е. хочется, чтобы рассказывалось, про общие вопросы информатики, затем начинку компа, а потом плавно перетекало к вопросом ОС. А вот с виндой таких книг завались. Почему-то книгописатели не рассматривают вариант, что знакомство с компьютером вообще может начаться сразу с GNU/Linux.
* - мне кажется, что книги серии «Для чайников» только их создают.
Все уже давно видели как всевозможные deep dream и прочую наркоманию, так и достаточно годные вещи, вроде стилизации фотографии под стиль определённого художника.
Меня интересует второй вариант. Может кто в курсе, есть ли какие-то варианты, чтобы можно было скачать себе на компьютер, натренировать (да, я понимаю, что это не быстро) на картинах нужного стиля, а потом дать фото на растерзание?
Мне удалось нагуглить только онлайн сервисы. Но стили там предопределённые и размеры сильно ограничены. А я бы хотел достаточно большое разрешение, чтобы потом напечатать.
Есть NAS на некоем SoC от Intel. Наверное там ce4100 или что-то типа того. Устройство работает на старом линуксе. Хочется старый линукс поменять на новый. После включения и до загрузки ОС там можно початиться с CEFDK и RedBoot (кстати, интересно, зачем делать два загрузчика) через UART на плате. Оба они прошиты в NAND. Вероятно и ядро тоже где-то там. Т.к. файл ядра в /boot - фикция и ни на что не влияет.
Пробовал в CEFDK выполнить bootata, но оно просто вешается, перед этим сообщив что сектор прочитан и управление в него передано. В RedBoot пробовал загрузить ядро по аналогии с существующим конфигом, но тоже всё вешается с выхлопом мусора в консоль.
Есть много контейнеров LXC, некоторым из них надо ограничить количество ядер (предпочтительный вариант), чтобы внутри контейнера было видно, например, не больше двух ядер. Или ограничить процент использования процессора (менее предпочтительный вариант).
Используется чистый LXC, без LXD. Система Ubuntu 16.04
Нагуглил, что: 1. Можно в конфиг контейнера прописать lxc.cgroup.cpuset.cpus = n-m, что ограничит контейнер физическими ядрами с n по m. Надо самому следить, у какого контейнера какие ядра. Это неудобно, т.к. контейнеров много, они останавливаются и запускаются. 2. Можно прописать одному lxc.cgroup.cpu.shares = n, другому - lxc.cgroup.cpu.shares = m. Тоже не очень удобно и не понятно, что достаётся хосту в этом случае. Нужно, чтобы у него был всегда некий запас.
Как можно решить проблему? Если я установлю LXD, я смогу рулить существующими контейнерами? Какие грабли в этом случае могут быть?
Есть контейнеры LXC. Для безопасности у них настроены диапазоны UID/GID через lxc.id_map. Хранилище LVM, файловая система ext4. С них делаются бекапы: снапшот, монтирование снапшота, собственно копирование. В принципе всё хорошо.
Но есть неудобство: Если бекап нужно развернуть в другое место или просто перенести файлик из контейнера, то появляются проблемы из-за UID/GID.
Вопрос: Как смонтировать ext4 со сдвигом UID/GID? Т.е., чтобы, например, uid 10000 у файла отображался как 0 в точке монтирования, а 10001, соответственно, отображался как 1?
Что-то туплю... Для скрипта надо получить список файлов, которые были созданы N минут назад или более свежие. Нагугливается только «find -cmin -N». Но, насколько я понимаю, это не то, т.к. -cmin это время модификации inode. Т.е. найдутся не только созданные файлы, но и, те, у которых поменялись атрибуты.
Есть почта на яндексе. Там есть достаточно удобная штука - цветные метки. Это такие с произвольным текстом и отображающиеся слева, под папками, а также перед темой письма в списке писем.
А Thunderbird их не показывает, предлагает только стандартные «Важно», «Срочно», т.д. или настроить свои. Как бы синхронизировать с теми, что уже есть в яндекс почте? Может быть кто-то сталкивался...