А как воообще устроен unsuspend в линаксе и железе, регулируется ли он программно, из биоса или аппаратно? Можно ли запретить машине просыпаться по сигналу с клавиатуры или тачпада, так что бы она реагировала только на нажатие кнопки power?
Асилив наполовину книжку Владимира Хорикова «Принципы юнит-тестирования» я что то вернулся к одной своей старой идее. Я занимаюсь разработкой всякого академического софта, и у нас юнит-тестирование делать не принято. С одной стороны проекты маленькие и без него как то можно жить, с другой его практически никто не умеет делать.
При этом документацию писать приходится, и коллеги жалуются что в моей документации мало примеров. Идея такая - раз в документации нужны примеры, то пусть эти примеры заодно играют роль тестов (всяких). Нужен doxygen наоборот, утилита которая из специально оформленной документации может выделить тесты, собрать их и запустить. Такие тесты все же лучше чем ничего.
Документация пишется разумеется в техе. Примеры оформляются в окружении verbatim, хотя можно выбрать какое то другое. В теховский документ добавляются специальные команды закомментированные для теха (начинающиеся с символа %), но влияющие на поведение утилиты тестирования.
Может быть создано один или несколько файлов в которых накапливается код тестов по мере обработки теховской документации. Для создания файлов используется комбинация
%@> имена файлов через пробел
созданные файлы могут быть активными (по умолчанию) или замороженными. Если файл активен, все что начинается с одиночного % или находится в окружении verbatim дублируется в этот файл. Для заморозки используется комбинация %@- имена файлов, для разморозки %@+ имена файлов, для закрытия файла %@. имена файлов.
Для записи отдельной строки в файл или группу файлов (вне зависимости от их состояния) используется
%@(имена файлов) какой то код
При этом в именах файлов можно использовать вайлдкарты а-ля шелл.
если в окружение verbatim встречается комбинация
выражение --> результат
оно трактуется как тест. То есть в файлах с тестами, в зависимости от расширения, будет добавлен код вычисляющий выражение и сравнивающий его с результатом.
В каждую строку теста в конец добавляется комментарий отсылающий
к исходному теховскому файлу (имя и номер строки), если тест провален то выдается сообщение указывающее на строку в теховском файле откуда тест был взят.
наверное можно вводить какие то макросы что бы переиспользовать подготовительный код тестов, команды для импорта модулей которые будут раскручиваться в зависимости от расширения файла в разный код и пр.
Точно нужно будет настраивать как какие тесты собирать и запускать, аналогично через какой то вариант вроде %@$ … Ну и наверное для запуска тестов можно заюзать gnu make.
Отдельная история с тестированием готовых приложений (небольших), на них ведь тоже пишется документация с примерами. В общем все то же самое но для запуска shell, при этом результаты сравниваются как строки?
Для _текущего_ субплота можно использовать plt.xticks(rotation=...). Естественно, когда суплотов много вручную вызывать это совершенно не удобно. У самих субплотов, такого метода по загадочной причине нет. Сам plt.xticks при их налчии действует на последний добавленный. А как тогда достучаться до тех что нужны?
Нужно из случайного индекса вектора брать данные и копировать во второй вектор. Соостветственно нужны случайные итераторы которые не будут повторятся. Ничего кроме как городить проверяющий цикл с условием – не придумаю. Есть ли решения с использованием STL и <random>?
Казалось бы элементарная проблема, но завис на ней.
В python есть крайне полезные функции zip, enumerate, range. Мне нужно что-то подобное для cpp/cuda (c++17). Если c range и enumerate более менее понятно, то как реализовать zip не соображу.
Семантически это должно быть variadic template
Где итератор возвращает кортеж ссылок на элементы что с контейнерами можно было работать как:
for(auto [x,y,z] : zip(xs,ys,zs))
Рекурсивное наследование должно быть ограничено тривиальным случаем одного аргумента. Но, кажется, я думаю не в правильную сторону, в частности, не соображу как рекурсивно вывести тип возвращаемых итератором кортежей:
using ret_type = tuple<decltype(begin(declval<t>())), decltype(???)>
Подскажите какую ни будь обёртку над zlib, инкапсулирующую низкоуровневую работу с архивами во что-то более похожее на работу с обычными файлами фс. Нужна возможность создать архив, добавить в него файл и писать в файл поток данных; открыть архив, получить список файлов и работать с каждым как с обычным несжатым потоком байтов.
Скрипт в результате работы генерирует массив функций аля [<function __main__.<lambda>>, <function __main__.<lambda>>, ... ]. Как можно сохранить этот массив в файл что бы использовать в другом скрипте?
То-ли разработчики gовноtk укурились в очердной раз, то-ли разработчики gimpа, но ВНЕЗАПНО оказалось, что в 2.9 в виджетах для чисел с плавающей точкой везде стали ЗАПЯТЫЕ, причём он не только отображает их так, но и требует вводить. Кто виноват и делать? Очередной HIGотизм запихали в мейнстрим?
Есть некая библиотека (моя), солянка из разных, местами слабо связанных фрагментов кода.
Появилась необходимость заюзать кусочек библиотеки в проекте, при этом хочется выделить туда минимально необходимую часть библиотеки (что бы лишнего не тащить) просто методом копирования (что бы проще было накатывать исправления и т.д.).
В библиотеке есть файл dump.hpp (условно) обеспечивающий запись разных объектов в бинарном формате, и он входит в ту часть которую нужно копировать. Этот файл определяет какие то служебные (шаблонные) методы а потом их как то специализует по необходимости для всего что есть в библиотеке. Понятно что он инклюдит кучу всего, в том числе кучу того что копировать не хочется. Вопрос - че с этим делать?
Я вижу два решения, оба кривые:
перенести части dump.hpp работающие с конкретными объектами в .hpp файлы где эти объекты объявлены. Минусы - все же этот код лучше выглядит когда лежит кучно, кроме того все станет зависеть от dump.hpp (сейчас это не так и хотелось бы что бы оно так и осталось).
понатыкать в dump.hpp директив условной компиляции, т.е. что бы соотве фрагмент кода для объекта A включался только если .hpp файл с этим объектом уже был включен. Это немного странно выглядит, dump.hpp всегда должен будет выключаться последним.
Устанавливал cuda-10.1 с официального сайта, через run-файл т.к. официальная версия из пакетов битая. Гасил исксы и следовал инструкции инсталлятора, однако он то-ли не собирает dkms-модуль, то ли не грузит его, или грузит неправильно. В результате, ни gl, y куда не работают. Как это продиагностировать.
В логи иксов вообще треш
[ 995.321] (II) LoadModule: "nvidia"
[ 995.321] (II) Loading /usr/lib/xorg/modules/drivers/nvidia_drv.so
[ 995.321] (II) Module nvidia: vendor="NVIDIA Corporation"
[ 995.321] compiled for 4.0.2, module version = 1.0.0
[ 995.321] Module class: X.Org Video Driver
[ 995.321] (II) UnloadModule: "nvidia"
[ 995.321] (II) Unloading nvidia
[ 995.321] (II) Failed to load module "nvidia" (already loaded, 21880)
[ 995.321] (II) LoadModule: "nouveau"
[ 995.322] (II) Loading /usr/lib/xorg/modules/drivers/nouveau_drv.so
[ 995.322] (II) Module nouveau: vendor="X.Org Foundation"
[ 995.322] compiled for 1.18.1, module version = 1.0.12
[ 995.322] Module class: X.Org Video Driver
[ 995.322] ABI class: X.Org Video Driver, version 20.0
Получается, нвидия грузится, потом грузится ещё раз, потом грузится нуво несмотря на то, что явно запрещён в блэклисте
cat /etc/modprobe.d/nvidia-installer-disable-nouveau.conf
# generated by nvidia-installer
blacklist nouveau
options nouveau modeset=0
glxinfo стабильно показывает
glxinfo
name of display: :0
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 154 (GLX)
Minor opcode of failed request: 24 (X_GLXCreateNewContext)
Value in failed request: 0x0
Serial number of failed request: 37
Current serial number in output stream: 38
Итак, как оттуда напроч вычистить все остатки установки, все драйвера и пр. И как эту куду заинсталлить нормально, вместе с libgl, glx, драйвером, вдапу и самим тулкитом?
Например, есть массив xs[N] и M тредов, M<N в среднем. Нужно случайно перемешать элементы массива как можно более быстрым способом. При этом, «качество» рандомизации не играет роли, скорее нужно что бы в среднем, каждый элемент массива побывал в каждой позиции. Как это правильно называется на английском языке, и какими алгоритмами реализуется?
Например, имеются массивы data[N], hole[M], N≥M. В data хранятся данные, а в hole — в порядке возрастания, индексы, отмечающие пустые точки. Нужно дефрагментировать этот массив, т.е. обменять элементы так что бы данные лежали непрерывно. При этом, порядок в котором они они пишутся не важен. Что-то вроде:
получается две шаренные переменные, т.е. если параллелить цикл по j, то на каждый шаг будет не менее двух атомарных операций, что нехорошо. Как тут можно переделать?
Предполагается, что с этим будет работать код на CUDA, в пределах одного блока тредов.
Ищу header-only библиотеку для бинарного-формата, поддерживающего хранение многомерных массивов, скляров и строк которые можно писать/читать из c++ и читать/писать из numpy-массивов. Оценочный размер файлов от единиц-мегабайт, до десятков гигабайт — поэтому, нужна воможность считав заголовок файла, найти нужные смещения, а данные грузить уже по необходимости. Что для этого лучше использовать? Подходит-ли для моих задач hdf5?
Привет всем. Как лучше визуализировать очень-очень большой двумерный (обычный в котором 2 оси x и y) график, без всяких многомерных проекций? Чтобы был понятен масштаб - скажем он начинается от полутора миллиона точек до 20-30 миллионов, значения тоже колеблются нехило (десятки миллиардов типичные значения). Хочется на него глазками посмотреть, есть ли в нём какие-то закономерности, вроде синусоиды и так далее, при том я не знаю масштабов на которых они будут видны (теоретически обязаны быть, но на практике...) Так что хочется чего-то, что можно маштабировать. Желательно из кода на Python-е. matplotlib навевает на меня тоску, он с более маленькими объёмами тонет в производительности, надо самому ручками выбирать тогда какие точки рисовать, ну и никакого масштабирования, а хочется чего-то умного, что не будет лишние точки рисовать.
Да, мне ещё гладкость глазками бы посмотреть, нет ли пиков каких-то, а если есть, то их характер, повторения и т.д.. Можно конечно для поиска скачков производными обмазываться, но не очень хочется в слепую бродить.
Матплотлиб работает, да, но хочется про альтернативы послушать.
т.е. берем и тупо двигаем последовательно на единичку по каждой из координат. Может кто то может предложить более эффективный вариант с меньшим числом операций, ситуация то выделенная?