Сообщения thunar
Что установить на thinkpad x270?
Subj. Раньше пользовался убунтой, но с последними версиями с принудительным снапом, глючащим lightdm и пр. — не хочется даже связываться. Скачал последний mint-xfce — совсем не понравилось что там не работают кнопки регулировки яркости (laptop-tools не установлены, или фирмваря какая-то нужна?). Хочется, конечно, что-то deb-based и LTS.
matplotlib — экспортировать легенду в tex
Хочу сделать легенду в виде отдельного tex-файла, инжектируемого в пояснение к рисунку (кривые ссылаются на формулы, библиографию и пр.). Как такое можно провернуть, в каком формате, собственно, будут будут ключевые обозначения кривых? Можно конечно номерами сделать — но такое всегда настолько тяжело читать, что хочется сделать удобно.
python: странная ошибка вычислений или я идиот
#!/usr/bin/env python3
import numpy as np
import matplotlib.pyplot as plt
def main(args):
th, a = 12.13, [1.8034,-1.4809,-3.8281,17.892,-30.666,16.38]
evs = np.logspace(-3,3,100)
ys1 = np.empty_like(evs)
for n, ev in enumerate(evs+th):
ys1[n] = \
1/th/ev * (a[0]*np.log(ev/th) + np.sum([a*(1-th/ev)**j for j,a in enumerate(a[1:], 1)]))
fn = lambda ev:\
1/th/ev * (a[0]*np.log(ev/th) + np.sum([a*(1-th/ev)**j for j,a in enumerate(a[1:], 1)]))
ys2 = fn(evs+th)
fig,ax = plt.subplots()
ax.plot(evs+th, ys1,"-k")
ax.plot(evs+th, ys2,"-r")
plt.show()
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
Две АБСОЛЮТНО ИДЕНТИЧНЫЕ формулы, одну считаем циклом, другую лямбдой. В результате в лямбде получается лажа. Это как вообще и ЧЯДНТ?
AntonI, help!
pip+cmake
В продолжение этой темы. Потихоньку готовлю к публикации свой велосипед. В качестве системы сборки таки выбрал cmake и все завимисости тяну им же через FetchContent (кроме самого пайтона с хедерами). Встал вопрос, как теперь это правильно опакетить? Я попытался что-то изобразить с setup.py — ну он нормально вызывает cmake всё компилирует, создаёт egg, а дальше пока затык. Не совсем понимаю а куда потом это всё копировать/инсталлировать? Собственно, конечная цель что бы при наличии в системе компилятора и пайтона можно было установить простым pip3 install передав ему директорию или ссылку на гитхаб.
Таким образом, вопросы:
1. Какие пути надо прописать в cmake (или в setup.py). В моём случае скомпилированный проект представляет из себя две so-библиотеки + некоторое количество полезных python-снипплетов.
2. После старта, основной бинарник библиотеки динамически подгружает числодробильный бекенд. Мне не совсем понятно как правильно задать путь по которому искать бекенд, если он отличается от текущего $PWD. Я так понимаю, в моём случае лучше всё содержимое лучше держать в директории, обернув __init__.py. Но, тогда я так понимаю, при инициализации модуля библиотеки ей надо будет передать путь по которому она находится, или?
3. Есть ли истории успеха перехода с pybind11 на nanobind? Очень хочется всё таки дёргать только Py_LIMITED_API. Эта привязка к версии пайтона совсем не хорошо.
Странная ошибка c шаблоном (или я идиот, или одно из двух)
#include <cfloat>
#include <cstdint>
#include <cstddef>
#include <complex>
typedef uint8_t u8;
typedef float f32;
template<u8 nd>
struct grid_t {
struct node_t {
template<u8 order>
u8 get_form (f32 *form, u32 *ptidx, f32 *ptpos) const {
u8 flag{0};
return flag;
}
};
node_t operator [] (u32 k) const {
return {};
}
};
template<u8 nd, u8 order>
void run_ppush
(const grid_t<nd> &grid) {
auto node = grid[0];
u8 flag{node.get_form <order> (nullptr, nullptr, nullptr)};
// error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘unsigned char’ to binary ‘operator<’
// 38 | u8 flag{node.get_form <order> (nullptr, nullptr, nullptr)};
//WAT...
}
void ppush1_1_fn
(const grid_t<1> &grid) {
return run_ppush<1, 0>(grid);
}
MetaPost — есть ли для него хороший сборник примеров?
В своё время, matplotlib привлёк меня своей богатой библиотекой примеров. Есть ли что ни будь подобное для metapost? Официальный мануал что то не радует и напоминет скорее справочник... $cast Evgueni
ipython и автодополнение
Ipython умеет в автодополнение аттрибутов стандартных классов. Как добиться такого поведения для любого класса, особенно для тех, где переопределён __getattr__?
anaconda: боль и унижение
По ряду причин, имеет место машина с древним центосом, где нет возможности обновить это или как то сделать комфортней. Ну ок, безуспешно пытаюсь заставить код хотя бы собраться на этой машине. Загнал все зависимости в FetchContent, ок, выкачивает, хоть чуть чуть легче. Но вот пайтон всё равно приходится иметь внешний — и это боль... Ok, создаём окружение:
conda create -n build_ltp python=3.10
conda install -c conda-forge cmake gxx gcc python-devtools
export CMAKE_C_COMPILER=gcc && export CMAKE_CXX_COMPILER=g++ && export CMAKE_MAKE_PROGRAM=/usr/bin/make
Could NOT find Python3 (missing: Development Development.Module Development.Embed)
anaconda3/envs/ltp_build/include/python3.10/python3.10
Посему вопрос, если ли какие ни будь альтернативы, которые <<просто работают>>. Без всей вот этой мутотни, что бы был просто более-менее современный компилтор, хедеры где надо и даже не пыталось лезть и использовать что то из системы?
$cast AntonI
clang, линкер напрочь отказывается линковаться с openmp
clang++-14 -std=c++20 -fPIC -O3 -Wall -Wpedantic -fvisibility=hidden -fopenmp=libomp -shared libcpu.o cpu_porder.o cpu_pcheck.o cpu_ppush.o cpu_ppost.o cpu_remap.o cpu_pmcsim.o cpu_utils_poisson_eq.o -o libcpu.so
/usr/bin/ld: cannot find -lomp: No such file or directory
clang: error: linker command failed with exit code 1 (use -v to see invocation)
subj. Собственно, в чём беда? g++ на абсолютно той же системе (убунта 22.04) отрабатывает вооще без проблем линкует. Гуглёж выдал только какие то совсем протухшие темы аж от 18го года.
pydoc → html, подсветка синтаксиса?
subj. Хочу сделать автоматическую генерацию html-документации к своему велосипеду. В документации присутствуют фрагменты кода с примерами испольования, которые хотелось бы подсветить. Какие есть способы это сделать?
Линакс в 2024 (SLOR)
https://stoplinux.org.ru/none/linux-v-2024-godu-mertv-ili-zhiv.html
В Linux существует три «касты» пользователей Linux:
1. Фанатики красной шапочки (которые поддерживают во всем решения Red Hat)
2. Нейтралы
3. Ярые борцы за Патрика.
...
Что же можно сказать по итогу? Можно сэкономить кучу времени, взяв кредитную карту какого-нибудь банка, заплатить за Windows или купить какой-нибудь Mac и не знать этого всего и этой статьи. В жизни есть много более интересных дел, нежели чем разбираться в болоте озлобленных и обиженных на весь мир людей, который их не понимает.
Никак не могу напиать конструктор статично полиморфного класса.
Например, есть базовый шаблонный класс в котором содеражатся настройки:
template<int nd>
struct config_t<nd> {};
config_t
:
template<typename tp>
struct data_t {};
typedef std::variant<config_t<1>, config_t<2>, ...> сonfig_var;
typedef std::variant<data_t<float>, data_t<double>, ...> data_var;
struct config_holder : config_var {
struct {
// stuff
} control;
config_holder (int nd, ...); // nd -> config_t<nd>
};
struct data_holder : data_var {
struct {
// memory management & stuff
} control;
data_holder (std::string &&type, const config_var &cfg, ...) { // data_holder -> data_t<type>
// What to do in the Kathmandu?..
}
};
Смысл конструкции в том, что config_holder
кодирует некоторые операции, а data_holder
хранит данные (над которыми проводятся эти операции) и иницируется строкой задающей тип и конфигом. Базовые шаблонные типы (которые с *_t
) потом передаются в числодробильный бэкэнд. А *_holder
это интерфейсы, с которыми взаимодействует пользователь.
И вот тут я застрял. Следуя совету intelfx, у меня получилось написать конструктор для config_holder
, но с data_holder
не понимаю как подступиться...
Следуя той же идеологии, я могу иницировать data_holder
для каждого допустимого типа, переданного строкой, но не понимаю, как дальше сконфигурировать его c помощью config_holder
...
Пробовал делать хелпер, который для каждого заданного строкой типа вызывет свой визитор и из него возвращать значения, но не срабатывает. Как такое всё таки реализовать, или как переписать что бы работало?
Как правильно унаследоваться от std::variant?
Хочется сделать контейнер, что-то вроде такого:
template <int n>
struct foo {
float v[n];
};
struct foo_holder : std::variant<foo<1>, foo<2>> {
struct {/* some stuff */} info;
foo_holder (int nd) {
if (nd==1) /* foo<1> */;
if (nd==2) /* foo<2> */;
}
};
ПОГРОМИРОВЫВАЙ
Странный варнинг c++.
Есть вот такая структура, типы с py:: — из pybind11-неймспейса.
struct csection_set_cfg {
typedef mprog_t::opc_t opcode;
std::vector<std::string> ptinfo, bginfo;
float max_energy;
std::vector<mprog_t> progs;
std::vector<float> cffts, points, cstabs, rates, tabs;
std::map<uint16_t, py::tuple> dset;
uint8_t tsize, ntype;
uint8_t ncsect, nprog;
csection_set_cfg
(py::str, py::str, std::vector<py::dict>, float, py::dict);
};
./g++ -std=c++20 -fPIC -O3 -Wall -Wpedantic -fopenmp -Waggressive-loop-optimizations -c def_csections.cxx -I. -I./fmt/include
In file included from def_csections.cxx:1:
def_csections.hxx:21:8: warning: ‘csection_set_cfg’ declared with greater visibility than the type of its field ‘csection_set_cfg::dset’ [-Wattributes]
21 | struct csection_set_cfg {
| ^~~~~~~~~~~~~~~~
cudatext, как его заставить работать?
This command requires Python engine. Set proper value of «pylib__linux» in the user.json.
ок, добавляю в user.json
{
"font_name__linux": "Fira Code",
"font_size__linux": 16,
"ui_font_name__linux": "Fira Code",
"ui_font_size__linux": 12,
"pylib__linux": "/usr/lib/x86_64-linux-gnu/libpython3.10.so"
}
И, получаю всё ту же ошибку. ЧЯДНТ?
Сudatext взял из flathub io.github.cudatext.CudaText-Qt
.
История появления null-терминированных строк
Стало любопытно, как такое странное решение появилось и закрепилось. Каков исторический констекст и чем это было обусловлено? Дело было только в экономии памяти на дополнительный указатель на конец строки, или?
Текстовый (tex/latex) редактор с совместным редактированием по сети?
subj. Есть ли такое?
Перемещено hobbit из general
Eureka editor
Оказывается, есть такой редактор карт для классических *doom, Eureka.
Программа приятно удивила своим быстродействием (особенно в сравнение со SLADE), благо UI написан на FLTK. Поначалу сильно озадачило управление — чем-то напомнило старый интерфейс Blender`а — очень много хоткеев, при этом, большая часть их совершенно не нужна. Но в плюс автору можно сказать, что всё это настраивается (хоть и весьма странным способом), и ненужности легко отключить.
Немного озадачила работа с 3d-камерой — так и не понял как её использовать с тачпада. Впрочем, как оказалось, танковое управление с клавиатуры на ноутбуке вполне себе удобно. Как я понял, на контрасте с вышеупомянутым SLADE, автор эврики не пытается сделать комбайн, покрывающий все потребности ретро-сцены, а сосредоточил усилия хорошем редакторе карт, и у него получилось. Поэтому пожелаю ему всяческих успехов.
P.S.: Не нашёл, умеет ли он UDMF, впрочем, мне сейчас интересно сделать что-то совместимое с ванильным Ultimate DOOM.
следующие → |