LINUX.ORG.RU

6
Всего сообщений: 31

Абсорбер co2 из говна и палок

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

Купил детектор цо2 даджет mt8057s.
Нормы цо2: 400-800 - ок, 800-1200 - не ок, 1200+ - жопа.
При открытой форточке цо2 не опускается ниже 600, что хорошо. При закрытой быстро поднимается до 1100.
Нашел читалку данных с него: https://github.com/dmage/co2mon
Подработал напильником, убрав вызов decode_buf в libco2mon/src/co2mon.c

 ,

crutch_master ()

«Ангара» как каменный цветок российской космонавтики

6 января исполнилось 25 лет указу президента России «О разработке космического ракетного комплекса (КРК) «Ангара»». Однако за четверть века российской космонавтике так и не удалось наладить серийное производство этих носителей, хотя предполагалось, что к настоящему времени они станут основными средствами доставки в космос грузов и экипажей.

https://www.kommersant.ru/doc/4214792

 , ,

Uncle_Bobby ()

Что-то странное с кэшем в Linux-дистрибутивах

Я не знаю, как вы, но я давно заметил, что некоторые дистрибутивы (Ubuntu, Fedora, Linux Mint) не умеют обращаться с кэшем памяти. Я не шибко знаток этой темы, но кэш просто заполняется до отказа, пока система не фризится жёстко (только перезагрузка помогает). Есть ли хотя бы какие-то вменяемые костыли, чтобы это не происходило? Знаю про решение с освобождением кэша командой «sudo sync; echo 3 > /proc/sys/vm/drop_caches», но оно настолько костыльное, что просто ощущаешь себя реальным инвалидом.

Решение

Не рекомендую делать реиндексацию. Комп тупо не справится (у меня 8 ядер, 16 Гб ОЗУ - не потянул). Проще скачать блокчейн заново.

 , , , ,

Desmond_Hume ()

Хочу запилить «точку восстановления системы» systemd + btrfs но не знаю как...(РЕШЕНО)

Хочу запилить такой костыль: Нажимаю «Обновить систему» (или через терминал обновляю), systemd через

[Path]
PathChanged=
узнает что система хочет обновиться и запускает скрипт который смонтирует нолевой том и сделает снимок / /@_бла-бла.

Но я не представляю, что должен отслеживать PathChanged? Каким образом можно узнать, что система собирается обновляться? И можно ли, сделать так, чтобы эта «штуковина» не реагировала на установку ПО? Только обновление системы.

Есть что посоветовать? Кто что думает о подобной реализации?

OS: Manjaro x86_64 Plasma.

 , ,

Kapshibergen ()

Альтернатива initializer_list в Си

Есть задача - инициализировать массив структур:

typedef struct { const double *inputs, *outputs; } Example;

где inputs и outputs - указатели на массивы даблов, произвольной длины, терминированные NaN.

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

Пока что пришел к такому варианту:

#include <stdio.h>
#include <math.h>

#define INIT_LIST(type, ...) ((const type[]){__VA_ARGS__})
#define DOUBLES(...) INIT_LIST(double, __VA_ARGS__, (double)NAN)
#define INIT_STRUCT_PTR(type, ...) (&(type){__VA_ARGS__})
#define EXAMPLE(...) INIT_STRUCT_PTR(Example, __VA_ARGS__)

typedef struct { const double *inputs, *outputs; } Example;

// NAN-terminated array of doubles
void printDoubles(const char *fmt, const double *nandedArray) {
    while(!isnan(*nandedArray)) {
        printf(fmt, *nandedArray++); // не секурно, зато удобно
    }
}

#define TAB "  "

// NULL-terminated array of examples
void printExamples(Example **examples) {
    for( ; *examples; ++examples) {
        printf("Example {\n" TAB "inputs {\n");
        printDoubles(TAB TAB "%f\n", (*examples)->inputs);
        printf(TAB "}\n" TAB "outputs {\n");
        printDoubles(TAB TAB "%f\n", (*examples)->outputs);
        printf(TAB "}\n}\n");
    }
}

int main() {
    Example *examples[] = {
        EXAMPLE(DOUBLES(1.23), DOUBLES(4.56, 7.89)),
        EXAMPLE(DOUBLES(10.11, 12.13), DOUBLES(14.15)),
        NULL
    };
    printExamples(examples);
}
Example {
  inputs {
    1.230000
  }
  outputs {
    4.560000
    7.890000
  }
}
Example {
  inputs {
    10.110000
    12.130000
  }
  outputs {
    14.150000
  }
}

В плюсовом коде я бы запилил вектор векторов и инициализировал бы его через initializer_list. Поэтому, оказавшись без столь удобных инструментов, я немного впал в ступор.

Какие есть еще варианты?

 ,

driver ()

Есть ли аналог include для статики?

Мне собрали кое что на пых пыхе. Собственно о него там только эти самые инклуды. И все. Вообще все. Больше ни одной функции. Полная статика.

Можно ли как-то выкинуть пых пых? Чтоб работало на самом мизерном веб-сервере, и вообще тупо браузером без оного.

Есть тупой способ «когда все будет утверждено - накопипастить руками», но хреново так делать.

 

dk- ()

Мигание лампочками на клавиатуре

Здравствуйте, не могу найти ответ. Мне для индикации копирования нужно что бы поочередно загорались намлок, затем капслок, и в конце скроллок. Делать это нужно в консоли без иксов, то что я нашёл либо через xset, либо numlockx. Стоит серверная убунта. Буду рад советам как ещё можно копеечно обеспечить видимую индикацию процесса.

 , , ,

LoloArctic ()

JaCartaGOST. Можно ли как то понять в какой USB подключен ключ?

Доброго времени суток, есть ли возможность понять в какой USB порт подключен ключ Jacarta, при условии что этих ключей несколько..их нужно отделить друг от друга..

lsusb выводит следующее:

Bus 004 Device 003: ID 24dc:0101  
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 003: ID 24dc:0101 

24dc:0101 - это у нас и есть JacartaGost..

я могу узнать серийный номер каждой он уникален:

 pkcs11-tool -L --module /lib64/libjcPKCS11.so

вывод примерно следующий:

Slot 0 (0x0): Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00
  token label        :  JaCarta GOST
  token manufacturer : Aladdin R.D.
  token model        : eToken GOST
  token flags        : login required, rng, token initialized, PIN initialized, readonly
  hardware version   : 0.0
  firmware version   : 0.0
  serial num         : 4e3211164312304d
Slot 1 (0x1): Aladdin R.D. JaCarta [SCR Interface] (000000000000) 01 00
  token label        :  JaCarta GOST
  token manufacturer : Aladdin R.D.
  token model        : eToken GOST
  token flags        : login required, rng, token initialized, PIN initialized, readonly
  hardware version   : 0.0
  firmware version   : 0.0
  serial num         : 4e350006432212a

Не могу понять как мне мух от котлет друг от друга отличить.

 , , ,

vsafonin ()

Intel Clear Linux - есть промышленные пользователи?

https://clearlinux.org/features

Часто натыкаюсь на мягкий форсинг сего «дистра» со стороны Phoronix.

Просто стало любопытно, тут есть пользователи?
Что он дает на голом железе и в виртуалке?

Беглый просмотр документации дает несколько контейнерных ролей, включая десктоп на xfce.

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

 

Deleted ()

Магия энергосбережения в ядре.

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

Собранное ядро, в котором я выключил все, что мне не надо ( в том числе _все_ опции мониторинга и дебага )! прожило на 2 часа больше в режиме читалки, чем стоковое дебиановское, а добавление MuQSS дало еще пол часа и увеличило экономию под нагрузкой. А шедулер noop или deadline и на стоковом ядре экономит на ssd энергию(но на hdd - наоборот)...

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

P.S. в лолксах - потому что предчувствую приход маководов с их экономным уберзондом.

Перемещено leave из talks

 , , , ,

timdorohin ()

Python, subprocess - как получить PID процесса (не шелла)?

Стартую программу через Popen с параметром shell=True. Соответственно, мне известен только PID шелла, а надо знать PID запущенной в шелле программы. Как его получить? Нагуглил это, но нифига не понял, объясните внятно что делать.

 , ,

InterVi ()

Создание «общих» функций-обёрток для одноимённых методов отнаследованных классов

ЛОР, есть нубовопросы.

Есть библиотека на C++, в ней есть некий базовый класс Base и несколько отнаследованных от него (пусть будут Derived1, Derived2 и т.д.). Также для этой библиотеки есть обёртка для C, которая сейчас выглядит примерно так:

void *Derived1_Create() {
    Derived1 *der = new Derived1();
    return static_cast<void*>(der);
}
...

double Derived1_DoSomething(void *v) {
    Derived1 *der = static_cast<Derived1*>(v);
    return der->DoSomething();
}
...

void Derived1_Destroy(void *v) {
    Derived1 *der = static_cast<Derived1*>(v);
    delete der;
}
1) Можно ли определять общие функции для методов вида DerivedN::DoSomething? То есть, можно ли не писать для каждого класса Derived такую функцию в обёртке, а создать одну, в которой происходит каст к базовому классу (в котором метод DoSomething тоже существует (но реализация не обязательно такая же, просто он принимает такие же аргументы и возвращает значение того же типа))?
double Base_DoSomething(void *v) {
    Base *bas = static_cast<Base*>(v);
    return bas->DoSomething();
}
Это работает, но какие могут быть подводные камни?

2) То же самое, но про деструкторы. Если мы будем удалять объекты указанным ниже способом, чем это чревато?

void Base_Destroy(void *v) {
    Base *bas = static_cast<Base*>(v);
    delete bas;
}

...
int main() {
    derived1 = Derived1_Create();
    derived42 = Derived42_Create();
    Base_Destroy(derived1);
    Base_Destroy(derived42);
}

 , , ,

Ceiling_QB ()

автологон по выбору

Привет LOR и его банда. Ребят, у меня есть задачка, которую без вас я точно решить не смогу. Нужно, чтобы при включении ноута, можно было на жать на какую-нибудь кнопку (назовем ее «х» ) и дальше бы ноут грузился с автологином, а если эта «х» кнопка не нажата, то логинменеджер, должен спросить пароль, тоесть без автологина. OS - Arch DE - KDE logon_manager - SDDM Загрузчик - grub 2

 , , , ,

Lilit_angel ()

Ускорить системный таймер для конкретного приложения

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

 

next_time ()

Как делать ajax интерфейсы без единого обновления

Лор, я не понимаю, у меня выходит костылестроение, я пытаюсь писать интерфейсы без единого разрыва обновления страницы.

У меня в голове не укладывается правильное понимание аякса, я пытаюсь писать форму которая вызывает другую форму а в ней ещё одна форма.

Ну и естественно попадаю в ситуации типа надо вызывать JS а он естественно не вызывается тк это блок в блоке вызванный скриптом с главной и приходится извращаться типа:

<img style="display: none;" src="empty.gif" onload="setTimeout(function() {window.location.href = '/';}, 1500);" />

это же в корне неверно! как научиться? или я всё правильно делаю а не знаю реализации? что читать? куда писать?

 , , ,

VictimOfLoveToLinux ()

«Программа» (просто таблица) для подсчёта стоимости выезда ремонтника по гарантийным ремонтам.

Часто проиводители оборудования оговаривают стоимость гарантийного ремонта, но не виде конкретной цены за километр, а диапазонами. Или комбинировано. Например тоже LG

Город +10 км        800
От  11 до  50 км   1600
От  51 до  80 км   2200
От  81 до 100 км   2600
От 101 до 150 км   3600
Посчитать стоимость выезда по 1 марке не сложно. Но если этих марок много, и у каждой из них разные методы расчёта компенсаций то некоторые люди даже пишут программы для расчётов. Однако можно пойти другим путём.

Для таких случаев я составил таблицу в LibreOffice Calc. Скачать её можно тут https://yadi.sk/i/4Vv8VbBKmTCiy

Как её пользоваться. Надо написать в таблице марку и расстояние (или символьное значение типа «Город»)

Как добавлять новые марки. Надо открыть лист «Расценки_массив», и заменить одну из записей "Пусто" на Название марки. А затем заполнить столбец по значениям и расстояниям. При заполнении желательно использовать формулы вроде циклического увеличения или умножения на расстояние. (Подсказка, в LibreOffice Calc можно вставить одно значение во все выделенные ячейки.)

После добавления новой марки желательно добавить её так же и на страницу подсказки.

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

2 дополнительных поля столбца можно использовать на своё усмотрение.

Среди скрытых листов есть поисковый лист для чётных и поисковый лист для нечётных записей, а так же лист с примером который был использован в качестве образца.

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

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

 , , , ,

rezedent12 ()

Добавление swapon в initrd

Всем привет, есть ноутбук с 2мя USB, 2 ГБ озу и без CD-привода и тачпада (сломал при сборке после разборки), делаю загрузочный диск под него. На диске ноута есть 6.5 гигов своп раздел, который я и собираюсь монтировать, чтобы туда при каждой загрузке компа с моего CD в память (частично в ОЗУ, частично в этот своп) копировалась вся система (а не только root, home, var и tmp), чтобы потом невозбранно выдернуть CD-ROM и вставить внешний HDD (там у меня всё и мышь (тачпад же не работает)). В стоковом initrd нет swapon и как мне его туда добавить?

 , , ,

watashinoshi ()

Это фича, да?

А что это за гуанище в теме оформления «black»?
Когда заходишь в топик, вне зависимости от ширины окна в наличии горизонтальная прокрутка.

 ,

deep-purple ()

Crutch Commander

Я одержим безумной идеей написать свой двухпанельный ФМ, но не как у всех, а с unixway и плагинами.
Суть такая: есть ядро, ui и куча модулей. Каждый модуль отвечает за свой тип источника данных, ui отвечает за интерфейс, а ядро за связь этого всего. Это всё - отдельные процессы, и они общаются между с ядром через стандартный ввод/вывод.
Атомарной единицей в сей системе является объект. Объектом может быть что угодно в зависимости от набора модулей. Например: файл, таблица БД, объект json, таблица csv. Объекты объединяются в хранилища, это каталоги, базы данных (или файлы БД, если речь идёт о SQLite), файлы json/csv соответственно.

Ui - автономный настраиваемый интерфейс. Кнопки действий, колонки в списках объектов, параметры модулей и прочие вещи динамичны и настраиваются в зависимости от набора и возможностей модуля.

Каждый модуль имеет набор параметров необходимый для его работы. Для базы данных это хост, логин, пароль, если бд в файле это корневая директория файла. Обработка данных происходит в модуле в зависимости от контекста операции.
Например, если я копирую таблицу из mysql на диск, то модуль mysql запрашивает каталог у модуля файловой системы и пишет туда дамп. Если в csv, то он берёт у модуля cvs каталог, имя файла (если модуль что-то не знает, то он стучится в ui) и делает дамп в csv. В этих случаях между процессами ходят только команды.
Если надо взять несколько записей из таблицы и перегнать их в json то модуль источника данных преобразует их в нужный формат и передаёт данные модулю назначения, который разбирается что с ними делать. Я размышляю насчёт механизма, но во многих случаях это может быть просто передача json массива по трубам, хотя если в ход пойдут бинарные данные, то нужно будет организовывать отдельный поток/fifo/еще что-нибудь.

Итак. В принципе всё вполне технически решаемо, но работа буксует. Как-то трудно всё потянуть. Нужна хотя-бы моральная поддержка. Кому-нибудь вообще интересна такая идея?

 

crutch_master ()

C++ * * *

Как и в каких ситуациях правильней писать:

int *i;
or
int * i;
or
int* i;
???

 , , , ,

ioexception ()