LINUX.ORG.RU

Сообщения AntonI

 

Указатель на шаблонную функцию-член класса как параметр шаблона?

Есть некий класс A, у него есть метод call который должен вызывать у класса B некоторый метод foo, bar или еще какой то:

class A{
    template<typename C, ... func ... > void call(C& c, ...){
    // длинная свитч-портянка в ней определеяется int I и
         c->func<I>(...);
    }
};
class B{
   template <int I> void foo(...){}
   template <int I> void bar(...){}
};

использоваться должно как то так

A a;
a.call<... &B::foo ...>(b);
...
a.call<... &B::bar ...>(b);

типы аргументов у foo и bar разные.

Общий смысл - не дублировать портянку в A::call. Чо то пока не выходит ни так ни эдак;-(

 , ,

AntonI ()

Научная визуализация - масштабируемые графики типографского качества?

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

Картинка обычно устроена следующим образом:

  4 +-------------+  +-+ 4
  3 |             |  |P| 3
Y 2 |   графики   |  |A| 2 Z 
  1 |             |  |L| 1 
  0 +-------------+  +-+ 0 
    0  1  2  3  4  
           X

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

Дальше начинаются проблемы. Когда картинка вставляется в статью, она должна удовлетворять двум требованиям - шрифтовке и выравниванию.

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

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

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

Поддержку LaTeX-а и правильную шрифтовку умеет делать например gnuplot в режиме epslatex - зарамочное оформление сбрасывается в .tex файл, график в .eps файл. Главный минус такого решения - если картинку начать масштабировать (это сложно, там размеры прибиты гвоздями наглухо, но гипотетически возможно) - то численные подписи к осям могут начать налезать друг на друга. Можно эту конструкцию сразу скопмилять в один .pdf (именно так я сейчас и делаю), но тогла при масштабировании поплывет шрифтовка, да и выравнивание превратится в лютый геморрой (в сложном случае) - понятно что размеры графика в центре при этом теряются. Подписи к оси X / палитру не отключишь.

Хочется некоторый формат для научной графики, отвечающий следующим требованиям:

  1. В файл сохраняются график, палитра (например в .png) + зарамочное оформление в формате (пределы по оси, метка к оси). Понятно что должна быть смотрелка для такого формата на экране.

  2. Есть утилита которая умеет из этого сделать например .png заданного размера с заданным шрифтом, чиселки вдоль осей она расставляет сама так что чиселки не налезают друг на друга. То же самое с подписями на графике.

  3. Та уже утилита умеет сразу сделать выравненную пачку картинок которые тупо вставляются в LaTeX таблицу.

  4. В идеале утилита должна дергаться из теха просто при указании каких то макросов в таблице или при вставке отдельных картинок.

Я такой штуки не знаю, но я ее сильно хочу и наверное готов сделать. Но может что то уже есть готовое?

@Crocodoom, @thunar, @Evgueni


UPD: сухой остаток после раздумий и обсуждения такой.

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

  1. все что относится к картинке хранится в отдельной директории/tar/tar.gz/zip.

  2. система координат связана с графиком, все меряется в долях графика, (0,0) - нижний левы угол, (1,1) - верхний правый.

  3. текстовый файл axes описывает оси. Каждая ось это одна строка,

x0 y0 x1 y1 min max [logscale] подпись-к-оси

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

  1. текстовый файл paletter задает палитру, в первой строчке
min max [logscale] подпись-к-палитре

во второй строчке сама палитра (цвета через пробел)

  1. изображение лежит в файле image.ppm или любом разумном графическом формате

  2. линии (кривые) лежат в файлах с имя.curve, каждая кривая в своем файле, первая строка #ключ-кривой, дальше в два столбца данные. Пустая строка означает разрыв в линии. Можно сохранять линии в бинарном формате.

  3. можно добавлять векторные поля и всяко разно.

Перемещено Shaman007 из development

 , ,

AntonI ()

Рисование больших растровых картинок в Qt и быстрая перерисовка окна?

Я делаю приложение для научной визуализации на PyQt5. PyQt (и Qt) я толком не знаю, осваиваю на ходу.

Окошко приложения выглядит так - слева элементы управления, остальную часть окна занимает собственно картинка, вокруг нее всякое зарамочное оформление (чиселки, метки к осям и пр). Картинка занимает большую часть окна. Картинка генерится как растр в недрах C++, это относительно дорогая операция. Поверх всего этого надо динамически (вместе с движением мыши) отображать некоторую информацию - выводить координаты точки куда указывает курсор, какие то линии рисовать привязанные к курсору, что то подсвечивать и пр.

Таким образом есть три варианта перерисовки:

  1. самая простая - меняем только то что связано с мышью при ее движении (скажем выводится крест на всю картинку что бы было видно куда по осям графика попадает курсор).

  2. самая сложная - при нажатии на элемент управления перерисовываем все, включая картинку.

  3. промежуточная по сложности, при изменении размера окна - пока размер меняется зарамочное оформление перерисовываем, картинку масштабируем. Когда изменение размера окна закончено, вызываем перерисовку 2.

Пока что в голову пришло вот такое - картинка возвращается из C++ как буфер. Зарамочное оформление (и картинка) рисуются через QPainter на QPixmap, это перерисовка 2. В перерисовке 1 выводится каждый раз этот QPixmap и поверх него набрасывается то что связано с мышью.

Можно ли это как то сделать более Ъ? Мне скажем не нравится то, что приходится много раз делать копии самой большой части изображения. Я бы из C++ рисовал скажем сразу в память QPixmap, да фиг к ней похоже достучишься…

Еще я пока не понял как ловить окончание изменений размера окна (когда юзер мышку отпустил). mouseReleaseEvent в этом случае не вызывается похоже.

 , ,

AntonI ()

PyQt5 - накидать в область окна картинок, линий, надписей и схоронить это все в .png?

В дцатый раз в первый класс;-(

Осваиваю тут новый (для себя) PyQt5. Нужно в области форточки навставлять картинок (генеряться на С++ в памяти), линий и текста, и в итоге сохранить все это в файл, лучше в png.

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

  1. в каком виджете это все делать? Пока что я в дизайнере влепил на окошко QGraphicsView и делаю для него QGraphicsScene. Хотелось бы какого аналога Canvas из родного Tkinter. Это оно?

  2. Мне нужно что бы виджет на котором я рисую масштабировался вместе с окном, при этом у меня слева от виджета гвоздями прибиты всякие элементы управления. Это можно как то сделать в дизайнере (завернуть его в какой то layot) или надо в коде колдунствовать? Я уже задолбался экспериментировать;-(

  3. Чего я там пока вообще не вижу - как все нарисованное сохранить в png, остальные мои хотелки в том или ином виде есть. Элементы управления сохранять не надо;-)

  4. Текст рисуется через QGraphicsScene.addText который возвращает QGraphicsTextItem? Как этот текст выровнять по правому краю например?! В нормальных фреймворках была такая опция прям при вставке текста, тут гуглится какая то содомия на пять строк с курсором и форматом. Проще никак?

  5. Где бы вообще про такое рисование почитать, желательно по русски? ;-(

UPD: Гугловские примеры говорят что это делается через QImage по которому рисует QPainter. Насколько я это вообще понял…

 , , ,

AntonI ()

ломается цепочка вызовов параметризованных методов

вот такой простой пример

struct Accessor{
    template <typename A> void plot(A &a) const { 
        a.plot_impl<0>(*this); 
    }
};

struct XXX{
    template <int I> void plot_impl(const Accessor&){}
    void plot(const Accessor &acc){ acc.plot(*this); }
};

при сборке вылетает ошибка

$ g++ -std=c++11 -c test-accessor.cpp
test-accessor.cpp: In instantiation of ‘void Accessor::plot(A&) const [with A = XXX]’:
test-accessor.cpp:9:48:   required from here
test-accessor.cpp:3:14: error: invalid operands of types ‘<unresolved overloaded function type>’ and ‘int’ to binary ‘operator<’
   a.plot_impl<0>(*this);
   ~~~~~~~~~~~^~

gcc 7.5.0

ЧЯНТД? Почему он не видит что plot_impl параметризована?

@monk

 ,

AntonI ()

3D рисовалка множества шариков а-ля молекулярная динамика?

Сабж. Нужна утилитка которая принимает массив шариков (x,y,z центра, радиус, сорт/цвет) и рисует их в 3D при помощи OpenGL. Шарики неподвижны, связей между ними нет, они не пересекаются, то есть это проще чем визуализация молекулярной динамики.

Шариков может быть много (10^6). Нужно что бы сцену можно было крутить мышью/стрелками, менять масштаб и двигать плоскости отсечения.

Она должны быть простой в установке (с минимумом зависимостей) и с примитивным текстовым входным форматом.

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

Есть вообще в природе такое?;-)

 , ,

AntonI ()

Похоже не работает редирект в nginx

Развернул bigbluebutton. www.ssllabs.com говорит что сертификаты в норме, но при заходе по адресу nginx меня перебрасывает на /50x.html со словами

2021/02/20 21:17:35 [error] 1727#1727: *5 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: XXX.XXX.XXX.XXX server: bbb.XXXXXX.ru, request: "GET /b HTTP/1.1", upstream: "http://127.0.0.1:5000/b", host: "bbb.XXXXX.ru"

(из /var/log/nginx/error.log).

В администрировании я полный нуб;-(

 ,

AntonI ()

литературное тестирование (по следам Дональда нашего Кнута)

Асилив наполовину книжку Владимира Хорикова «Принципы юнит-тестирования» я что то вернулся к одной своей старой идее. Я занимаюсь разработкой всякого академического софта, и у нас юнит-тестирование делать не принято. С одной стороны проекты маленькие и без него как то можно жить, с другой его практически никто не умеет делать.

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

Документация пишется разумеется в техе. Примеры оформляются в окружении verbatim, хотя можно выбрать какое то другое. В теховский документ добавляются специальные команды закомментированные для теха (начинающиеся с символа %), но влияющие на поведение утилиты тестирования.

  1. Может быть создано один или несколько файлов в которых накапливается код тестов по мере обработки теховской документации. Для создания файлов используется комбинация
%@> имена файлов через пробел 

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

%@(имена файлов) какой то код 

При этом в именах файлов можно использовать вайлдкарты а-ля шелл.

  1. если в окружение verbatim встречается комбинация
выражение --> результат

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

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

  2. Точно нужно будет настраивать как какие тесты собирать и запускать, аналогично через какой то вариант вроде %@$ … Ну и наверное для запуска тестов можно заюзать gnu make.

  3. Отдельная история с тестированием готовых приложений (небольших), на них ведь тоже пишется документация с примерами. В общем все то же самое но для запуска shell, при этом результаты сравниваются как строки?

Как то так. Cast @bugfixer, @pon4ik, @thunar, @Vit

 , , , ,

AntonI ()

Структура данных для хранения коэффициентов многомерного полинома?

Сабж. Есть полином от D параметров x_1,…x_D суммарной степени N. Его можно рассматривать как сумму членов x_1^{k1} x_2^{k2} … x_D^{kD}, sum k_i<=N. При каждом таком члене есть коэффициент типа double, нужна структура данных которая обеспечит эффективный доступ к коэффициенту если известен набор степеней k.

Число D известно в компайл-тайм, как правило D=2..4 но может быть и больше (скажем до 8ми). N известно в рантайм, N<256.

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

Cтепени k хранятся в беззнаковом целом (4 или 8 байт), по байту на степень.

Сейчас это реализовано тупо, как std::map<uint32_t, double>, есть ощущение что доступ к этой штуке сильно тормозит. Другой крайностью будет просто создать массив из N^D даблов, но это противоречит моему чуйтству прекрасного - уж больно здоровый оверхед по памяти.

Можно еще просто создать вектор из даблов, вектор из int-ов (или вектор из пар) и заниматься там поиском половинным делением - это будет всяко лучше мапа. Но есть спинномозговое ощущение, что можно придумать формулу индексации, позволяющую из набора степеней получать смещение в векторе. Вот если кто то такую формулу знает, или может подсказать как такой алгоритм построить…

ЗЫ если кто то хочет предложить хэш-таблицу, то нужно предложить сразу алгоритма вычисления хэша исключающий коллизии - это собственно и будет искомая формула;-)

 ,

AntonI ()

Как Ъ откатить часть толстого проекта?

Сабж. Проект мигрировал с CVS под git, есть единственная ветка. По нашим меркам проект толстый (100к строк).

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

Коммит на котором все работало бол-мен известен.

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

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

 ,

AntonI ()

Апгрейд рабочего места?

У меня уже лет 10 как нет десктопа, вообще - работаю только за ноутом. Если нужно что то тяжелое посчитать - есть несколько мощных машин (включая кластер) на работе.

Но тут, с этим карантином и пр., оборудовал себе уютную норку - удобное кресло, монитор 4К, граф.планшет, хорошая вебка, все это хозяйство на кронштейне с газлифтом, дорого-бохато. Ноут цепляется через рабочую станцию. И ноут таки с этим монитором иногда немного лагает. Некритично, но местами бесит.

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

  1. мобильность должна остаться - то есть нужно что бы в любой момент ноут можно было отключить и на нем осталось актуальное состояние в режиме сна.

  2. картинка и пр должны на рабочее место идти с десктопа.

  3. желательно что бы десктоп стоял в коридоре (это метров 7 от рабочего места, у меня там стеллаж под технику). Но это необязательно.

Понятно что это все должно работать под линуксом;-)

Мне сначала в голову пришли всякие свитчи для видео/клавы/мыши, но это все таки не совсем оно…

 ,

AntonI ()

64х битная кросскомпиляция под винду - ошибка линкера

x86_64-w64-mingw32-g++ -shared -o 4windows/_mymodule.pyd mingw/mymodule_wrap.o mingw/mymodule.o -L ~/.wine/drive_c/Python27/libs/ -lpython27 -lgomp
mingw/mymodule_wrap.o:mymodule_wrap.cxx:(.text+0x8a7d): undefined reference to `__imp_Py_InitModule4'
collect2: error: ld returned 1 exit status

ЧЯНТД? ;-(

Ставил под wine64 python2.7.18 64-х битный, версия wine-3.6 (Ubuntu 3.6-1).

$ x86_64-w64-mingw32-g++ -v
Using built-in specs.
COLLECT_GCC=x86_64-w64-mingw32-g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-w64-mingw32/7.3-win32/lto-wrapper
Target: x86_64-w64-mingw32
Configured with: ../../src/configure --build=x86_64-linux-gnu --prefix=/usr --includedir='/usr/include' --mandir='/usr/share/man' --infodir='/usr/share/info' --sysconfdir=/etc --localstatedir=/var --disable-silent-rules --libdir='/usr/lib/x86_64-linux-gnu' --libexecdir='/usr/lib/x86_64-linux-gnu' --disable-maintainer-mode --disable-dependency-tracking --prefix=/usr --enable-shared --enable-static --disable-multilib --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --libdir=/usr/lib --enable-libstdcxx-time=yes --with-tune=generic --with-headers=/usr/x86_64-w64-mingw32/include --enable-version-specific-runtime-libs --enable-fully-dynamic-string --enable-libgomp --enable-languages=c,c++,fortran,objc,obj-c++,ada --enable-lto --with-plugin-ld --enable-threads=win32 --program-suffix=-win32 --program-prefix=x86_64-w64-mingw32- --target=x86_64-w64-mingw32 --with-as=/usr/bin/x86_64-w64-mingw32-as --with-ld=/usr/bin/x86_64-w64-mingw32-ld --enable-libatomic --enable-libstdcxx-filesystem-ts=yes
Thread model: win32
gcc version 7.3-win32 20180312 (GCC) 

32х битная сборка нормально проходит, но нужна именно 64х битная - на 32х вылезают какие то странные проблемы с выделением памяти больше гига.

Всякие варианты с подсовыванием линкеру всего что есть в Python27/libs результатов не дали;-(

 , , , ,

AntonI ()

Как в PIL.Image вставить Tkinter.PhotoImage?

Сбаж. Че то я уже задолбался искать;-(

Вот такой пример

from Tkinter import *
tk = Tk()
cimage = PhotoImage(file='1.ppm')
print cimage.width(), cimage.height()


import PIL.Image, PIL.ImageTk, PIL.ImageDraw, PIL.ImageFont
img = PIL.Image.new('RGB', (100,1000), (255, 255, 255)) #2png

help(img)
img.paste(im=cimage, box=(30,59,60,900)) #<<< вот тут падает

img.save('1.png')

падает со словами

  File "/usr/lib/python2.7/dist-packages/PIL/Image.py", line 1408, in paste
    self.im.paste(im, box)
SystemError: new style getargs format but argument is not a tuple

Изначально работа идет именно с Tkinter.PhotoImage что бы не тащить PIL в обязательные зависимости, этот код вызывается только для быстрого сохранения Tkinter.Canvas в png. Если PIL нет то юзается canvas.poscript, но это долго работает.

PS завернуть Tkinter.PhotoImage во что то PIL-овское тоже не выходит. Можно конечно сделать это через диск, но уж больно извращенно такое решение выглядит;-(

 , ,

AntonI ()

Ошибка линковки при кросскомпиляции с помощью mingw - multiple definition of ...

Собираю одну свою толстую тулзу под винду (коллеги попросили) при помощи mingw. В проекте python2.6 (не спрашивайте, так вышло;-(((), swig, С++. Долгими танцами с бубном все скомпилял, но дальше упс - при сборе dll линкер орет multiple definition of … на все заинлайненные функции.

$ i686-w64-mingw32-g++ -v
Using built-in specs.
COLLECT_GCC=i686-w64-mingw32-g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-w64-mingw32/7.3-win32/lto-wrapper
Target: i686-w64-mingw32
Configured with: ../../src/configure --build=x86_64-linux-gnu --prefix=/usr --includedir='/usr/include' --mandir='/usr/share/man' --infodir='/usr/share/info' --sysconfdir=/etc --localstatedir=/var --disable-silent-rules --libdir='/usr/lib/x86_64-linux-gnu' --libexecdir='/usr/lib/x86_64-linux-gnu' --disable-maintainer-mode --disable-dependency-tracking --prefix=/usr --enable-shared --enable-static --disable-multilib --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --libdir=/usr/lib --enable-libstdcxx-time=yes --with-tune=generic --with-headers=/usr/i686-w64-mingw32/include --enable-version-specific-runtime-libs --enable-fully-dynamic-string --enable-libgomp --enable-languages=c,c++,fortran,objc,obj-c++,ada --enable-lto --with-plugin-ld --enable-threads=win32 --program-suffix=-win32 --program-prefix=i686-w64-mingw32- --target=i686-w64-mingw32 --with-as=/usr/bin/i686-w64-mingw32-as --with-ld=/usr/bin/i686-w64-mingw32-ld --enable-libatomic --enable-libstdcxx-filesystem-ts=yes
Thread model: win32
gcc version 7.3-win32 20180312 (GCC) 

собираю как

i686-w64-mingw32-ld -shared -o _name.pyd name_wrap.o src/*.o -L ~/.wine/drive_c/Python26/libs/ -lpython26 

 , , ,

AntonI ()

Подскажите телевизор?

Сам это не смотрю, маме хочу (она любит канал Культура).

Диагональ от 40", разрешение от FullHD, че там еще нужно… я в них ничего не понимаю. Хотелось бы крепеж VESA 100-200мм, у меня кронштейн такой есть. Но наверное смогу велосипедить крепеж и на больший размер, хотя лениво. По ценнику че то около 20тыр +/-.

Заведена коаксиальная антенна, но она от провайдера идет. Наверное неплохо что бы он там всякие каналы типа BBC живая природа умел?

Мне глянулся Xiaomi Mi TV 4A 43 T2 43" но там крепеж VESA 300 вроде.

ЗЫ линукс тут причем что наверное он там унутрях?

 ,

AntonI ()

gps-трекер для пожилого человека?

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

Посоветуйте девайс, поделитесь историями успеха. Хочется что бы:

  1. я мог посмотреть где она ходит

  2. эта штука могла мне посвистеть если что то пошло не так - например, не дай Бог, упала, или она нажала кнопку SOS.

  3. В идеале - что бы я мог ей позвонить, телефон она слышит плохо. Наверное для этого это должна быть какая то компактная фиговина которая крепится куда? На руку? Пришить ее на воротник? ХЗ…

  4. Не должно быть никаких сенсорных экранов и прочей фигни. Из интерфейса - одна кнопка. Что бы нельзя было случайно куда то ткнуть и уйти в непойми какой режим. Если смарт-часы с сенсорным экраном то он должен наглухо лочится и показывать только время.

Посоветуйте девайс/поделитесь историей успеха. Пока смотрю на Reachfar RF-V28

 ,

AntonI ()

Параллельный итератор для stencil-вычислений?

пардонте, тут будет некоторый поток сознания;-(

Есть многомерный массив, причем он может быть устроен достаточно сложным образом. Нам нужно взять каждый элемент этого массива и что то с ним сделать с учетом его соседей. Соседи расположены по некоторому шаблону, скажем ближайшие соседи (слева/справа/сверху/снизу) это шаблон «крест», бывают и более сложные шаблоны. Это называется stencil-вычислениями и условно половина числодробилок именно таким вот и занимается.

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

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

  1. Есть счетчик size_t i (потому что OpenMP), все ячейки массива пронумерованы подряд.

  2. Доступ к элементу массива по такому счетчику это дорого. Поэтому есть некий недоитератор I (я не знаю как это называется правильно), который может быть настроен на основе i. Если все сделано прямыми руками, то небольшие изменения i как правило приводят к минимальной перестройке I. Тогда можно написать что то вроде

#pragma omp parallel for firstprivate(I)
   for(size_t i=0; i<N; i++){ 
       I.update(i); 
       ...
    }

Будучи настроенным, I ведет себя как умный указатель, то есть у него перегружены операции -> и *. М.б. его и инкрементировать можно - тогда это обычный итератор, но с возможностью update(i). Кроме того I может давать кучу дополнительной информации (координаты ячейки например), и тогда это уже больше чем итератор получается?

  1. Есть шаблон S[n], это набор из n смещений относительно обрабатываемого элемента массива. Шаблон известен заранее, поэтому можно сгенерировать заранее массив каких то структур, которые относительно малой кровью позволяют от I обращаться к его соседям. Для обычного многомерного массива (который эмулируется на основе одномерного массива + адресная арифметика) это будут просто целые числа, в более сложных случаях это может быть что то выморочное. Есть нюанс - при обращении к соседям надо как то обрабатывать выход за границы многомерного массива.

С обработкой границ все сложно и это уже сильно зависит от того что именно за многомерный массив и что именно мы делаем при выходе за границу. По крайней мере можно рассмотреть два подхода:

  1. I.get_nb(S[k]) — принимает какой то элемент шаблона, возвращает указатель на соседнюю ячейку или nullptr. Хотя это кривовато - для анализа выхода за границу может понадобиться много операций, кроме того nullptr может оказаться недостаточно, иногда хочется унать куда именно (налево/направо) мы вылетели.

  2. I.get_nb(k) — принимает номер элемента шаблона, возвращает указатель на соседнюю ячейку или nullptr. Это чуть лучше, поскольку шаблон известен заранее, можно сделать маски какой элемент шаблона куда сдвинут.

Наверное можно и каких то методов навешать на I что бы понимать куда относительно границы мы попали…

Вопрос - как правильно называются I? Как правильно называются S (если называются)? И как вообще Ъ делают такие вещи в Ъ программировании?;-)

Cast @pon4ik, @monk, @peregrine

 , , , ,

AntonI ()

А у std::map старые итераторы остаются рабочими при модификации контейнера?

Понятно что речь идет о случае когда отвечающие итераторам элементы не были удалены.

std::map<T1, T2> M;
... тут мы что то в M напихали ...
I = M.find(k); // что то нашли
... тут мы вовсю добавляем/удаляем элементы в M, но элемент с ключем k НЕ удаляем
>>>> вот тут I рабочий? <<<

 , , ,

AntonI ()

Установка M2. 2242 в 1U сервер Intel R1000

Пришлось тут заняться накаткой оси пр. на такой вот агрегат. Сам не админ ни разу.

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

Рядом со слотом для SSD впаян SATA разъем с надписью «SATA M2 JIET», чОрненький. Из восьми беленьких SATA разъемов половина свободна (в четырех сидят диски). В комплекте идут SATA шлейфы, на одном написано - «SATA (6~7/M.2)». Типа предполагается что нужно этим шлейфом чорненький SATA-разьем соединить с беленьким? O_O

Чо то я инструкцию загуглить не смог;-(

 

AntonI ()

Где и как добыть в Москве новый АКБ для ноутбука lenovo для замены?

Сабж. Ноут lenovo carbon X1 4gen, машинке больше трех лет, батарея уже плохо держит заряд. Озаботился сегодня утром, позвонил вот этим деятелям https://lenovo.remont-support.com/ - спросили модель, говорят батарея есть в наличии, приезжайте, займет час, стоить будет 3.5тыр (удивился, че то мало).

Приехал, спрашиваю – сколько займет замена?
– не могу сказать, зависит от того у нас АКБ или на складе.
– а вы можете сейчас посмотреть и сказать у вас АКБ или на складе?
– не могу.
– но говорили же что займет час?
– ничего не могу обещать, можем взять только на диагностику (!!!), здесь вам не савеловский рынок что бы за час что то поменяли (!!!).
Плюнул и ушел - ноут это мой основной рабочий инструмент, щас я им отдам его на неопределенный срок.

Два вопроса:

  1. Что за хрень произошла с сервисными центрами? Судя по отзывам коллег это не единичный случай а какая то тенденция.

  2. Где и как все таки добыть нормальную АКБ на замену?

linux тут при том что на ноуте linux.

 ,

AntonI ()

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