LINUX.ORG.RU

Сообщения dimgel

 

gentoo with binary packages: нельзя ли убрать задержку при каждом запуске emerge?

Всем привет.

Сабж. На каждый чих – несколько секунд что-то там качает, прежде чему выплюнуть «Local copy of remote index is up-to-date». Озвереешь, по времени – практически --sync на каждый вызов. Если бы не это, всё остальное (вокруг бинарных пакетов) по ощущениям сделано вполне шикарно.

(Ну разве что per-package настройки ещё только в планах.)

И ещё я краем глаза увидел (в вике было упоминание про icu), но недопонял: при апгрейде бинарного пакета его бинарные зависимости пересобираются? А как оно там определяет, от какой именно сборки бинарной зависимости зависит бинарный пакет?

 , ,

dimgel
()

Наталья Касперская: «Задача полного отказа от бумажных документов – это госизмена»

На Глобальном цифровом форуме-2025, состоявшемся в Нижнем Новгороде, на панели «Архитектура цифровизации госуправления», ведущий IT-эксперт по кибербезопасности, президент Infowatch Наталья Касперская очень наглядно рассказала про ключевые риски тотальной оцифровки:

«У нас цифровизация – очень модная тема, все мы быстрее бежим в цифру… Вся она построена на данных. Надо понимать, что данные, которые мы отдаем в облака, в какие-то госсистемы, они подвержены рискам инфобезопасности. Эти риски просто невозможно купировать, задача до сих пор не решена. Вообще. Если вы поставите задачу гарантированного избавления от утечек, то ее на сегодня человечество нигде не решило. То есть отдаем данные в цифру – получаем гарантированное повышение уязвимости.

Оборудование и устройства у нас в основном иностранного производства. У всех вас в карманах лежат смартфоны. Посмотрите внимательно, чего производства. Это иностранные платформы, работающие на облачных технологиях. Это значит, что все наши данные принадлежат производителю, устройство которого лежит у вас в кармане. Либо это американцы, либо китайцы, которые не посмущаются напихать туда различных закладок. Мы потом можем ставить туда любые системы госуправления, которые такие славные и хорошие, но вы понимаете: если это платформа, на платформенном уровне они могут быть перехвачены.

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

Максут Игоревич раньше говорил, что наш идеальный чиновник – это «чиновник-робот», который будет управляться системой. И здесь у нас на панели тоже звучало: «у чиновников будет возможность быть управляемыми электронными системами». То есть мы предлагаем электронный кнут для чиновников. Это не нравится чиновникам, явно снижает мотивацию. И вообще-то мы имеем непредсказуемые социальные риски. Что проще сделать системе? Проще послать человека на фиг. По внедрению электронных помощников это прекрасно видно. Представим себе, что мы оцифровали все. Там люди, граждане, уже никуда пробиваться не будут. При этом электронные болваны будут давать сами себе прекрасную статистику – будет все выглядеть так, как будто госуправление у нас на прекрасном уровне.

Вы не задумывались над тем, что цифровизация, это электричество + интернет? Я сейчас живу на даче за городом, у нас интернет с вечера и до утра отключают, все мобильные операторы это делают. Потому что летящие на Москву БПЛА ориентируются по вышкам. Давайте честно говорить – мы идем к глобальной войне. У нас через некоторое время отключение интернета будет нормой. Как в этом случае мы будем стучаться к государственным умникам? Зачем далеко ходить – у нас тут, на встрече с министром Шадаевым, перестала работать электронная идентификация. А по бейджу и паспорту меня пускать отказались. В момент отключения этих систем мы рискуем оказаться безрукими и слепыми котятами.

Еще хочу сказать по поводу ИИ. Здорово, что он у нас есть, это очень модно и молодежно. Но надо понимать, что система, основанная на нейросетях, имеет ложноположительные и ложноотрицательные срабатывания. Это значит, что она по определению будет глючить. Если опускаешь где-то ложноположительные, подрастают ложноотрицательные. Получить «ноль» и там, и там – нельзя. Мы имеем дело с глючными системами, поэтому предложение внедрить это на уровне принятия ответственных гос. решений – по юридическим моментам, например – это просто нельзя делать, коллеги. То же касается медицины. Почему из года в год собираясь на конференции по ИИ мы не говорим про «черный ящик»? Сейчас еще появляются «дип фейки», вообще не отличимые от реальности.

Задача, которая тут была озвучена: «отказ от бумаги к 2030 году» - это диверсия под госуправление. На мой взгляд, это госизмена. Давайте прямо называть вещи своими именами».

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

Отсюда.

 

dimgel
()

Отговорите покупать ebook

Вот этот. Ну или не отговаривайте, а наоборот подговорите.

Убогие цвета не особо смущают. Гораздо сильнее смущает полноценный андроид под капотом: если разница во времени жизни от батареи с обычным планшетом будет менее чем, скажем, в 3 раза, то может и ну его нафиг?

 , ,

dimgel
()

Можно ли получить текущий VkPhysicalDevice без вызова vkEnumeratePhysicalDevices()?

А то он у меня дискретку пробуждает. И висит несколько секунд всё то время, пока она просыпается. (И при завершении приложения тоже пробуждает и висит, вообще хз почему.)

UPD. Так-с, пробуждает дискретку и висит (1.99 секунды) vkCreateInstance() – ещё ДО того как вызывает enumerate. Сам enumerate отрабатывает мгновенно. Возможно, надо покопать в опциях этого create instance.

UPD2: Solved.

 

dimgel
()

А как бы в gcc получить 128-bit atomic — always lock free?

Гуглится всякое шушушу (в т.ч. давнишнее, в т.ч. в багтрекере gcc, дескать можно заюзать SSE, в т.ч. с коммитами), но по факту хрен:

__atomic_always_lock_free(16, nullptr) == false
std::atomic<__int128_t>::is_always_lock_free == false

Это и для march=x86-64, и march=native (AMD Ryzen 9 7845HX).

 ,

dimgel
()

sendto() on UDP-socket всегда успешен; а как тогда ведёт себя select(&writeSet)?

Экспериментально обнаружил, что если вызвать sendto() на UDP-сокете 100500 раз подряд с маленькими сообщениями, то все вызовы вернут успех, но получателю приедет лишь малая доля отправленных сообщений.

Нагуглил:

For UDP sockets, there are no send buffers, so send() and sendto() never return EWOULDBLOCK

Packets are just silently dropped when a device queue overflows.

Получается, что в случае UDP-сокета, sendto() пишет сразу в буфер адаптера.

Я не стану задавать риторический вопрос, что мешало этим чертям проверять переполнение буфера адаптера и честно возвращать EWOULDBLOCK – чтобы отправитель мог сразу регулировать плотность трафика, а не через ожидание отсутствия подтверждения от получателя по таймауту (в результате чего у отправителя ВСЕГДА устаревшие данные о пропускной способности канала).

Мне интересно более практичное: если UDP-сокет никогда не возвращает EWOULDBLOCK (т.е. не проверяет переполнение буфера адаптера), есть ли смысл добавлять его во writeSet для select(), и как он себя в этом случае поведёт (ведь для срабатывания writeSet таки-нужно проверять наличие свободного места в буфере адаптера)?

Или же тупо писать в него безо всяких select(&writeSet)? Даже если writeSet сработает корректно, один хрен невозможно узнать, сколько можно записать и когда нужно остановиться.

 , ,

dimgel
()

GLFW: непонятка с monitor workarea & maximized window coords.

У меня моник 2K (2560x1440), glfwGetMonitorWorkarea() возвращает (0,0,2560,1405), где 1440-1405=35 высоты занимает taskbar:

$ grep panel_size ~/.config/tint2/tint2rc 
panel_size = 100% 35

Если я делаю glfwMaximizeWindow(window), то в коллбэки прилетает три события: maximize(true), resize(2560,1381), move(0,24).

Что это за 1381 и 24 (в сумме дающие 1405) и откуда они взялись?

 ,

dimgel
()

Сломали C++23. (UPD: это шланг 17.0.6 корявый)

Мигрирую тут своё барахлишко с -std=c++20 на -std=c++23, и всё чистенько, кроме одного затыка:

#include <unordered_map>

class C {};

int main() {
	C c;
	std::unordered_map<C*, int> m;
	m.insert({&c, 0});   // no matching function for call to 'get'
	return 0;
}

C++20 компилял это нормально, C++23 ругается на &c. Что поменяли, чего ей надо?

Вот так работает, но это ж как-то длинно и глупо:

	m.insert(std::pair{&c, "hello"});

UPD: «Но действительность ещё кошмарней.» (c)

#include <regex>

int main() {
	static std::regex rColor {"^#?[0-9A-Fa-f]{6}$"};
	return 0;
}

$ clang -std=c++23 -c try.cpp 
In file included from try.cpp:1:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/regex:40:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bitset:52:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/string:67:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/memory_resource.h:41:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/uses_allocator_args.h:39:
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/tuple:956:36: error: no matching function for call to 'get'
  956 |             return __convertible<decltype(std::get<_Is>(std::declval<_UTuple>()))...>();
      |                                           ^~~~~~~~~~~~~
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/tuple:955:11: note: in instantiation of function template specialization 'std::tuple<const long &>::__convertible_from_tuple_like()::(anonymous class)::operator()<0UL>' requested here
  955 |           return []<size_t... _Is>(index_sequence<_Is...>) {
      |                  ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/tuple:1136:22: note: in instantiation of function template specialization 'std::tuple<const long &>::__convertible_from_tuple_like<const long &>' requested here
 1136 |         constexpr explicit(!__convertible_from_tuple_like<_UTuple>())
      |                             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_map.h:514:38: note: while substituting deduced template arguments into function template 'tuple' [with _UTuple = const key_type &]
  514 |                                             std::tuple<const key_type&>(__k),
      |                                                                         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/regex_automaton.tcc:207:7: note: in instantiation of member function 'std::map<long, long>::operator[]' requested here
  207 |           __m[__u] = __id;
      |              ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/regex_compiler.tcc:241:24: note: in instantiation of member function 'std::__detail::_StateSeq<std::regex_traits<char>>::_M_clone' requested here
  241 |             __e._M_append(__r._M_clone());
      |                               ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/regex_compiler.tcc:135:17: note: (skipping 2 contexts in backtrace; use -ftemplate-backtrace-limit=0 to see all)
  135 |           while (this->_M_quantifier())
      |                        ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/regex_compiler.tcc:91:13: note: in instantiation of member function 'std::__detail::_Compiler<std::regex_traits<char>>::_M_alternative' requested here
   91 |       this->_M_alternative();
      |             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/regex_compiler.tcc:76:13: note: in instantiation of member function 'std::__detail::_Compiler<std::regex_traits<char>>::_M_disjunction' requested here
   76 |       this->_M_disjunction();
      |             ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/regex.h:809:34: note: in instantiation of member function 'std::__detail::_Compiler<std::regex_traits<char>>::_Compiler' requested here
  809 |         __detail::_Compiler<_Rx_traits> __c(__first, __last, _M_loc, __f);
      |                                         ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/regex.h:473:9: note: in instantiation of member function 'std::basic_regex<char>::_M_compile' requested here
  473 |       { _M_compile(__p, __p + _Rx_traits::length(__p), __f); }
      |         ^
try.cpp:14:26: note: in instantiation of member function 'std::basic_regex<char>::basic_regex' requested here
   14 |         static const std::regex shmNameRegex {"^/[^/]{1,254}$"};
      |                                 ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:122:5: note: candidate template ignored: could not match 'tuple<_Elements...>' against 'const long'
  122 |     get(tuple<_Elements...>& __t) noexcept;
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:126:5: note: candidate template ignored: could not match 'const tuple<_Elements...>' against 'const long'
  126 |     get(const tuple<_Elements...>& __t) noexcept;
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:130:5: note: candidate template ignored: could not match 'tuple<_Elements...>' against 'const long'
  130 |     get(tuple<_Elements...>&& __t) noexcept;
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:134:5: note: candidate template ignored: could not match 'const tuple<_Elements...>' against 'const long'
  134 |     get(const tuple<_Elements...>&& __t) noexcept;
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:138:5: note: candidate template ignored: could not match 'array<_Tp, _Nm>' against 'const long'
  138 |     get(array<_Tp, _Nm>&) noexcept;
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:142:5: note: candidate template ignored: could not match 'array<_Tp, _Nm>' against 'const long'
  142 |     get(array<_Tp, _Nm>&&) noexcept;
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:146:5: note: candidate template ignored: could not match 'const array<_Tp, _Nm>' against 'const long'
  146 |     get(const array<_Tp, _Nm>&) noexcept;
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:150:5: note: candidate template ignored: could not match 'const array<_Tp, _Nm>' against 'const long'
  150 |     get(const array<_Tp, _Nm>&&) noexcept;
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:1250:5: note: candidate template ignored: could not match 'pair<_Tp1, _Tp2>' against 'const long'
 1250 |     get(pair<_Tp1, _Tp2>& __in) noexcept
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:1255:5: note: candidate template ignored: could not match 'pair<_Tp1, _Tp2>' against 'const long'
 1255 |     get(pair<_Tp1, _Tp2>&& __in) noexcept
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:1260:5: note: candidate template ignored: could not match 'const pair<_Tp1, _Tp2>' against 'const long'
 1260 |     get(const pair<_Tp1, _Tp2>& __in) noexcept
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:1265:5: note: candidate template ignored: could not match 'const pair<_Tp1, _Tp2>' against 'const long'
 1265 |     get(const pair<_Tp1, _Tp2>&& __in) noexcept
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/ranges_util.h:444:5: note: candidate template ignored: could not match 'const subrange<_It, _Sent, _Kind>' against 'const long'
  444 |     get(const subrange<_It, _Sent, _Kind>& __r)
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/ranges_util.h:455:5: note: candidate template ignored: could not match 'subrange<_It, _Sent, _Kind>' against 'const long'
  455 |     get(subrange<_It, _Sent, _Kind>&& __r)
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:1272:5: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Tp'
 1272 |     get(pair<_Tp, _Up>& __p) noexcept
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:1277:5: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Tp'
 1277 |     get(const pair<_Tp, _Up>& __p) noexcept
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:1282:5: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Tp'
 1282 |     get(pair<_Tp, _Up>&& __p) noexcept
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:1287:5: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Tp'
 1287 |     get(const pair<_Tp, _Up>&& __p) noexcept
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:1292:5: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Tp'
 1292 |     get(pair<_Up, _Tp>& __p) noexcept
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:1297:5: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Tp'
 1297 |     get(const pair<_Up, _Tp>& __p) noexcept
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:1302:5: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Tp'
 1302 |     get(pair<_Up, _Tp>&& __p) noexcept
      |     ^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/14.1.1/../../../../include/c++/14.1.1/bits/stl_pair.h:1307:5: note: candidate template ignored: invalid explicitly-specified argument for template parameter '_Tp'
 1307 |     get(const pair<_Up, _Tp>&& __p) noexcept
      |     ^
1 error generated.

 , ,

dimgel
()

Как узнать, загружена ли DLL-ка в wine? Т.е. нужен wine-аналог `lsof /lib/libz.so`.

Сабж.

 

dimgel
()

Ищу работу: teamlead / senior, java/scala / C++ / web fullstack

 , , ,

dimgel
()

Я тут программу написал, но она почему-то не работает, не подскажете где у меня ошибка? - ...

Шучу (1е апреля всё-таки), всё работает.

Кому делать нечего, зацените презенташку сайта на плюсях (ролик 1 минута):

 ,

dimgel
()

Чё там у гентушников?

Я тут подумываю, а не вернуться ли мне на генту. Правда, от этих мыслей меня существенно подташнивает. Тем не менее, не поделитесь ли, товарищи гентушники,

  1. чё у вас там новенького, кроме бинарных пакетов?

  2. Насколько runit юзабелен как полная замена OpenRC? Поддерживается ли он для всех сервисов?

2a. К слову, а почему они вообще до сих пор от этого громоздкого говна мамонта не отказались? (Гы, на всякий случай уточню, что я про OpenRC.)

  1. Недопонял я, что там с ускорением портежа. Вижу USE=native-extensions, но недопонял, много ли он на данный момент даёт и какие дальнейшие планы?

 , ,

dimgel
()

Value ":A1_ROOT" cannot be set as name. Reason: Not POSIX compatible.

После обновления mdadm 4.2 —> 4.3, массивы не собираются с вышеуказанной ошибкой. WTF?!

Не из-за двоеточия ли это в начале имени? У меня в заметках записано, это чтобы оно не добавляло homehost. Видимо, чтобы при загрузке с флешки не ругалось, что хост неправильный. Возможно вместо этого можно вписать в /etc/mdadm.conf HOMEHOST=<ignore> (глобально для всех массивов), но прежде чем пердолиться с переименованием массивов и подкручиванием конфигов, мечтается получить подтверждение, что причина действительно в этом. Чёт не гуглится ничего, кроме аналогичного багрепорта без обсуждения.

 ,

dimgel
()

Как узнать, кто непрерывно пишет на диск, если никто не пишет?

У меня artix linux на компе и на загрузочном portable ssd, почти идентичные системы. После где-то полугодичного перерыва грузанулся в ssd чтобы его обновить. Обновил, перегрузился – всё работает, но идёт непрерывная запись на ssd на максимальной скорости, почти без остановки: gkrellm показывает, и светодиод на ssd непрерывно моргает. И сдаётся мне, редкие паузы там только потому что SSD отказывается принимать новые данные пока старые не раскидает.

iotop -a показывает с гулькин хрен – только jdb2 немного, несопоставимо по объёмам.
UPD: Вернее, в строке заголовка он показывает большой общий объём записи (Actual DISK WRITE:), а в разбивке по процессам – хрен.

Грузился в runlevel 1 без графики и сети – всё равно моргает непрерывно.

Насколько я себе представляю, если бы только сам SSD внутри себя освежал давно не перезаписывавшиеся данные, он бы сильно грелся, но gkrellm запись не показывал бы.

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

Как искать виноватого?

 

dimgel
()

core dump & dynamically loaded .so

nginx динамически грузит мой .so-модуль, который прилинкован к lucene++.so.

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

Вопрос: как объяснить gdb -c /tmp/core-xxx, чтобы он подцепил мою .so, или он сам это из дампа увидит?

Моя .so с отладочной инфой, nginx и lucene++ без (лень: они установлены тупо из пакетов).

 ,

dimgel
()

Не работает ссылка «Показать ответ» в одной теме

На этом своём каменте или через-следующем жму – в адресной строке появляется https://www.linux.org.ru/forum/development/17495702?cid=17520734#comment-er=show&cid=17521254 (на втором каменте последнее число другое) и всё, дальше ничего не происходит. В других выборочно проверенных темах всё работает.

UPD. Вот дьявол, а когда открываю второй камент по прямой второй ссылке выше, ссылка «показать ответ» из него работает.

UPD2. Похоже дело в том, что второй камент открывается в режиме «игнорируемые скрыты», а мой камент – в режиме «игнорируемые видны», а там навигация давно известно что подглюкивает, и давно смирился как с платой за возможность пол-ЛОРа игнорить. В общем, ложная тревога.

 

dimgel
()

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

 ,

dimgel
()

Позиция окон qt-приложений восстанавливается некорректно: top на несколько пикселей ниже.

В смысле, при перезапуске приложения. Уже с полгода имеет место быть, созрел пожаловаться. У меня окна не maximized, справа ~=200px отступ чтобы кусок десктопа был виден (а точнее gkrellm). А при перезапуске ещё и сверху отступ 5-10px образуется, каждый раз приходится ресайзить. QtCreator, QBitTorrent (этот ещё на 1px вправо сдвигает окно), не помню что ещё.

Никто не сталкивался? Как лечили?

 ,

dimgel
()

Нужна маленькая C++ либа, чтобы HTML diff-ы хранить и показывать типа как на ЛОРе

Либа должна:

  1. (при редактировании HTML – WYSIWYG) Генерить diff: минималистичный, но достаточный для восстановления предыдущей версии по текущей, как в VCS.

  2. Применять diff к текущей версии для получения предыдущей.

  3. Выводить diff с раскраской, или лучше подготавливать какие-то структуры для вывода, по которым я сам быстренько-простенько раскрашу.

Загвоздка в том, что у меня HTML, и надо как-то типа как на ЛОРе: если отличие не в тексте, а в HTML тегах/атрибутах, оно должно сохраняться (для восстановления предыдущей версии), но не показываться.

В крайнем случае п.3 попробую сам запилить. Но уж для п.1+2 что-то наверняка да есть.

 , ,

dimgel
()

Помогите найти старый плач в частном бложике, во что превратилось программирование

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

 

dimgel
()

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