<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dw="https://www.dreamwidth.org">
  <id>tag:dreamwidth.org,2016-12-24:2588025</id>
  <title>Эсхатология и герменевтика парапрограммных объектов</title>
  <subtitle>netch80</subtitle>
  <author>
    <name>netch80</name>
  </author>
  <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/"/>
  <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom"/>
  <updated>2026-04-15T13:59:23Z</updated>
  <dw:journal username="netch80" type="personal"/>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:58063</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/58063.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=58063"/>
    <title>netch80 @ 2026-04-15T16:55:00</title>
    <published>2026-04-15T13:59:23Z</published>
    <updated>2026-04-15T13:59:23Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>1</dw:reply-count>
    <content type="html">For archive: upgrade on a system of Ubuntu 22.04 -&amp;gt; 24.04 required manual install of the `plasma-workspace-wayland` package, otherwise `sddm` could not start. Dependencies did not list it.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=58063" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:57673</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/57673.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=57673"/>
    <title>netch80 @ 2026-04-03T13:54:00</title>
    <published>2026-04-03T11:01:09Z</published>
    <updated>2026-04-03T11:01:09Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">I ran out of words to describe my astonishment how Windows (10, 11) is buggy and insane in question of keyboard setup and how itʼs easier in any X11 based setup...&lt;br /&gt;&lt;br /&gt;However, universalization of Super+Space as input switcher, even in their inimitable manner of a hyppo in a porcelain shop (always turned on, whatever is said in configuration dialog), seems useful. They arenʼt first in it, but the fact they supported it shows they are not finally hopeless.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=57673" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:57575</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/57575.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=57575"/>
    <title>netch80 @ 2026-01-17T11:29:00</title>
    <published>2026-01-17T09:32:32Z</published>
    <updated>2026-01-17T09:32:32Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>1</dw:reply-count>
    <content type="html">А объясните plz как пятилетнему. Я понимаю, как при норме 230 вольт можно получить в розетке 180 или 250: есть разные виды корректировки под нагрузку или перекос фаз. Но откуда может быть там же 70 или 600, как наблюдалось с развалом сетей? Ну кроме вариантов, что напутали с коммутацией?&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=57575" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:57132</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/57132.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=57132"/>
    <title>netch80 @ 2026-01-17T11:29:00</title>
    <published>2026-01-17T09:29:45Z</published>
    <updated>2026-01-17T09:29:45Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Windows 11 Explorerʼs "widgets" (which show weather, stock exchange news, and other boring litter) create a bunch of empty files named "xml_file (number).xml", where number may be a very big integer (Iʼve seen 1228 after 5 days of an account life) in ~/AppData/Local/Temp/.&lt;br /&gt;&lt;br /&gt;Here, anything is really superb. Not cleaned-up files. Empty files for nothing. Finally, it is able to iterate any count of possible entries just to find a free one.&lt;br /&gt;&lt;br /&gt;Iʼm extremely delighted all this is still working. Anyway, great thanks to it for the idea to disable "widgets".&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=57132" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:56853</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/56853.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=56853"/>
    <title>netch80 @ 2026-01-02T09:20:00</title>
    <published>2026-01-02T07:27:44Z</published>
    <updated>2026-01-02T07:29:32Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">Как-то очень плавно и незаметно сократился на порядки интерес к такому руководству, как &lt;a href="http://www.catb.org/~esr/faqs/smart-questions.html"&gt;Smart Questions&lt;/a&gt;. Говорю это как хостер некогда популярной копии-перевода. Статистику не вёл, увы, цифр и графиков не будет.&lt;br /&gt;&lt;br /&gt;Случилось это задолго до нынешнего бума ИИ (имитаторов интеллекта) и перехода большинства подобных вопросов к неразумным, но многословным и дружелюбным отвечалкам, которые осмысленно отвечают на любой вопрос. Но ИИ будет только усугублять разрыв: не надо учиться быть корректным, точным и не грубым. Дальше тут могла быть длинная бурная филиппика, повторяющая тезисы киберпанка и НФ про деградацию человеческого общения и замену людей роботами, пропущу по очевидности.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=56853" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:56635</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/56635.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=56635"/>
    <title>Donʼt abuse narrow integers</title>
    <published>2025-09-18T09:32:22Z</published>
    <updated>2025-09-19T05:28:03Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>1</dw:reply-count>
    <content type="html">At least third embedded-related project that I found being used constructions like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
uint8_t i;
for (i = 0; i &amp;lt; 100; ++i) {
  do something
}
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Even there is known that the value is limited to be fully present in such a narrow type, it is harmful to use it this way. C/C++ compilers shall apply width extension to a value on each iteration, due to the usual «integral promotion», this is 1) an excessive action, 2) may mask the problem around the maximal value, in case like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
uint8_t slot;
for (i = 0; i &amp;lt; nslots; ++i) {
  do something
}
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;if nslots == 256, the index is formally valid, but the loop will be forever, because after 255 the next value of `i` will be 0, and the exit condition never succeeds.&lt;br /&gt;&lt;br /&gt;In machine code, this entails either iteration on registers like AL (in x86), which causes false sharing with rest of EAX (RAX), or an explicit masking (width extension):&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
void foo(unsigned n) {
  uint8_t i;
  for (i = 0; i &amp;lt; n; ++i) {
    moo(i);
  }
}
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;GCC, x86:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
foo:
        testl   %edi, %edi
        je      .L9
        pushq   %rbp
        movl    %edi, %ebp
        xorl    %edi, %edi
        pushq   %rbx
        xorl    %ebx, %ebx
        subq    $8, %rsp
.L3:
        call    moo@PLT
        addl    $1, %ebx
        movzbl  %bl, %edi ; &amp;lt;-- Oops!
        cmpl    %ebp, %edi
        jb      .L3
        addq    $8, %rsp
        popq    %rbx
        popq    %rbp
        ret
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;GCC, AArch64:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
foo:
        cbz     w0, .L9
        stp     x19, x20, [sp, -32]!
        mov     w20, w0
        mov     w19, 0
        str     x30, [sp, 16]
.L3:
        mov     w0, w19
        bl      moo
        add     w1, w19, 1
        and     w19, w1, 255
        cmp     w20, w1, uxtb ; &amp;lt;-- Oops!
        bhi     .L3
        ldr     x30, [sp, 16]
        ldp     x19, x20, [sp], 32
        ret
.L9:
        ret
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And even if there is no such an effect, there is no need to use such types for local variables, they have sense exclusively in external interfaces like structure members (and in fitting verification for such members).&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=56635" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:56517</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/56517.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=56517"/>
    <title>Kubuntu, mc and odt file</title>
    <published>2025-09-16T08:50:34Z</published>
    <updated>2025-09-16T08:50:34Z</updated>
    <category term="kde"/>
    <category term="kubuntu"/>
    <dw:security>public</dw:security>
    <dw:reply-count>1</dw:reply-count>
    <content type="html">To make `mc` really open LibreOffice file (odt) for editing in Kubuntu 22.04, I had to purge the `wslu` package which seems to be installed by the default installer — Iʼve certainly not installed it intentionally.&lt;br /&gt;mcʼs ext.sh calls `xdg-open` and stops if it reports success. `xdg-open` reported success although the called program `kde-open5` failed with WSL interaction. Somewhere in this chain, the failure fact was dropped.&lt;br /&gt;&lt;br /&gt;Too tangled, as for my normal leisure.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=56517" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:56308</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/56308.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=56308"/>
    <title>AnyHack-8</title>
    <published>2025-06-05T15:30:44Z</published>
    <updated>2025-09-16T09:03:40Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">CESU-8 disallows what is allowed in WTF-8 or MUTF-8.&lt;br /&gt;&lt;br /&gt;WTF-8 disallows what is allowed in CESU-8 or MUTF-8.&lt;br /&gt;&lt;br /&gt;MUTF-8 disallows what is allowed in WTF-8 or CESU-8.&lt;br /&gt;&lt;br /&gt;I find this discriminational. All these hacks are mutually compatible. Why canʼt anybody combine them?&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=56308" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:55904</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/55904.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=55904"/>
    <title>Enclosed {} in Python format strings</title>
    <published>2025-03-13T08:54:09Z</published>
    <updated>2025-03-13T13:44:34Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>4</dw:reply-count>
    <content type="html">Seems apparent, but only after occasionally found this.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color="#3333cc"&gt;
&amp;gt;&amp;gt;&amp;gt; "{}".format(math.pi)
'3.141592653589793'
&amp;gt;&amp;gt;&amp;gt; "{:{}}".format(math.pi, 'f')
'3.141593'
&amp;gt;&amp;gt;&amp;gt; "{:{}}".format(math.pi, '.14f')
'3.14159265358979'

&amp;gt;&amp;gt;&amp;gt; f"{math.pi}"
'3.141592653589793'
&amp;gt;&amp;gt;&amp;gt; pr=10
&amp;gt;&amp;gt;&amp;gt; f"{math.pi:.{pr}e}"
'3.1415926536e+00'
&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And even:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color="#3333cc"&gt;
&amp;gt;&amp;gt;&amp;gt; "{:{}}".format(math.pi, '.16e')
'3.1415926535897931e+00'
&amp;gt;&amp;gt;&amp;gt; f"{math.pi:{'.12e'}}"
'3.141592653590e+00'
&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But this way isnʼt allowed:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color="#3333cc"&gt;
&amp;gt;&amp;gt;&amp;gt; f"{math.pi:{\".12e\"}}"
  File "&lt;stdin&gt;", line 1
    f"{math.pi:{\".12e\"}}"
                           ^
SyntaxError: f-string expression part cannot include a backslash
&lt;/stdin&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;but we can override it with a trick:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color="#3333cc"&gt;
&amp;gt;&amp;gt;&amp;gt; f"{math.pi:{'.12e'}}"
'3.141592653590e+00'
&amp;gt;&amp;gt;&amp;gt; f"""{math.pi:{".12e"}}"""
'3.141592653590e+00'
&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Not an often case but still useful.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=55904" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:55602</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/55602.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=55602"/>
    <title>%a</title>
    <published>2025-03-13T05:02:17Z</published>
    <updated>2025-03-13T05:02:17Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>3</dw:reply-count>
    <content type="html">Из серии "мелких удивлений", почему так всё странно:&lt;br /&gt;Когда появилась двоичная плавающая точка, естественно было бы ожидать, что сразу появится и вариант текстового ввода-вывода в двоичном виде (возможно, свёрнутого до восьмеричного или шестнадцатиричного), который даёт:&lt;br /&gt;1) точность передачи значения;&lt;br /&gt;2) избавление от сложного и дорогого кода преобразования путём умножения и деления (который ещё долго был неточным, а для точного требуется многословная арифметика - для double это 1000+ бит в предельном случае, а ещё база констант в помощь самому преобразованию и тонкая шлифовка частных случаев).&lt;br /&gt;&lt;br /&gt;Пример: "0x1.921fb54442d18p+1" (число π в double).&lt;br /&gt;&lt;br /&gt;Тем не менее, в Fortran этого нет до сих пор, насколько я знаю - а там я ожидал бы в первую очередь. В C появилось в C99 ("%a" в printf, scanf). Аналогичные форматные методы ещё в десятке актуальных языков (Go, Lua, Matlab, OCaml, Perl, PHP, R, Ruby, Rust, Swift, Zig, спасибо ИИ за поиск). В C++ - режим iostream, с C++11 (std::hexfloat). В Python, Ada, Java, Julia, Haskell - нет форматного знака, есть отдельные методы (например, hex(), from_hex()). В некоторых других - требуются отдельные библиотеки, особенно странно про Javascript, где и целых-то нет, есть double на всё.&lt;br /&gt;&lt;br /&gt;Инерция эта выглядит более психологическим, чем технологическим фактором.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=55602" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:55444</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/55444.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=55444"/>
    <title>Объясните мне ghosting</title>
    <published>2025-02-06T08:42:54Z</published>
    <updated>2025-02-06T08:44:50Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">Я понимаю, что занимаюсь левыми вещами, но иногда надо отвлечься...&lt;br /&gt;У клавиатур есть такое понятие, как ghosting. Обычно его описывают так: если в матрице на пересечении двух строк и двух столбцов нажаты три клавиши, то надо сразу отвергнуть якобы нажатие четвёртой, потому что его реально нет. (Вариант с диодом на каждую клавишу не считаем, банально.) Описание недостаточное, проблема начинается уже при двух клавишах.&lt;br /&gt;&lt;br /&gt;Обозначим клавиши как строка/столбец, перебор идёт по строкам со считыванием значений столбцов. Пусть у нас уже зажаты две клавиши: 1/1 и 2/2. Любое из нажатий 1/2 и 2/1 (если физически определены обе) уже должно быть отсечено, потому что мы не можем распознать, какая из них реально нажата.&lt;br /&gt;&lt;br /&gt;Возьмём QMK как, вероятно, самый отработанный проект. Смотрим quantum/keyboard.c, matrix_task() и has_ghost_in_row(). Выполняется рескан текущего состояния клавиш. Если есть изменения, перебираем строки. Текущая строка сравнивается со всеми прочими, и если в bitand текущей строки с какой-то другой есть &amp;gt;=2 установленных бита из реально существующих клавиш (отсутствующие согласно карте раскладки - удаляются до этого bitand), то объявляется "призрак" и строка пропускается из рассмотрения на данном этапе.&lt;br /&gt;&lt;br /&gt;Теперь добавляем в реальную картину дребезг. Нажимаем 1/2. Пусть пока мы добежали в скане до 1/2, на ней читается отсутствие контакта. Но когда добежали до 2/1, контакт есть и через путь 1/1-1/2-2/2 читается реальный призрак на 2/1. Фиксируем нажатие 2/1, а когда на следующем скане 1/2 окончательно зафиксируется, игнорируем её. В результате срабатывает совсем не то, что должно было бы.&lt;br /&gt;&lt;br /&gt;Что я не учёл?&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=55444" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:55119</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/55119.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=55119"/>
    <title>Автосоветы апгрейдов в Ubuntu</title>
    <published>2024-12-19T07:14:47Z</published>
    <updated>2025-02-06T09:17:16Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>3</dw:reply-count>
    <content type="html">В Ubuntu (22, 24) сделали пакость: dpkg-reconfigure unattended-upgrades ставит в /etc/apt/apt.conf.d/20auto-upgrades:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;оба параметра в 1 или 0, в результате оно или само всё молча обновляет, или даже списки обновлений не тянет. А так, чтобы показать возможность, но не обновлять - оно не умеет. Надо для этого ставить 1 и 0 соответственно, но тогда оно начнёт жаловаться при обновлении пакета, мол, вы тут что-то наломали.&lt;br /&gt;&lt;br /&gt;На уровне конфигов сейчас исправить тривиально, но подход непорядочный.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=55119" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:54904</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/54904.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=54904"/>
    <title>Скобок хороших и разных</title>
    <published>2024-09-21T20:13:11Z</published>
    <updated>2025-02-07T10:09:05Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>5</dw:reply-count>
    <content type="html">Что трёх видов скобок не хватает языкам программирования - видно по такому извращению, как &amp;lt;&amp;gt; для шаблонов в C++, Java и прочих - проблемы парсинга тут известны каждому, кто интересовался.&lt;br /&gt;&lt;br /&gt;Но на сейчас непонятно, почему останавливаться на ASCII, если юникод чуть более чем везде. Вот например есть ⦓⦔ (U+2993, U+2994). template⦓class T⦔ class Foo { ... };&lt;br /&gt;И выглядит нормально, и парсинг тривиален.&lt;br /&gt;&lt;br /&gt;Есть, конечно, ещё варианты ⁅⁆ ⌈⌉ ⌊⌋ ⦇⦈ ⸨⸩, но как-то менее выразительны...&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=54904" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:54583</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/54583.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=54583"/>
    <title>Нормальная нормаль</title>
    <published>2024-06-21T06:24:23Z</published>
    <updated>2025-02-06T09:14:26Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Случайно обнаружил существование в СССР понятия "отраслевая нормаль", которая "нормаль - это как стандарт. только нормаль". Определение не гуглится, отличия от стандарта (ГОСТ, ОСТ. ТУ) - тоже. Причём некоторые вводились в те времена, когда стандарты уже были.&lt;br /&gt;Как-то загадочно.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=54583" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:54525</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/54525.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=54525"/>
    <title>Пента-...</title>
    <published>2023-03-28T18:58:35Z</published>
    <updated>2025-02-06T09:13:23Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Если сделать все команды пятибуквенными, то можно после этого гордо говорить "да, есть режим [censored], но я не помню, какой пентаграммой его вызывать".&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=54525" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:54176</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/54176.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=54176"/>
    <title>Проблема останова, практика.</title>
    <published>2023-02-28T08:53:47Z</published>
    <updated>2025-02-06T09:05:35Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">В современной практике "проблема останова" теоретической CS чаще всего выливается в вопрос "а где на 3-м уровне вложенности ссылок репозиториев находится указание, откуда же берутся сорцы нужной тулзы".&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=54176" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:53916</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/53916.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=53916"/>
    <title>Комплект замкнулся.</title>
    <published>2022-12-27T08:17:25Z</published>
    <updated>2022-12-27T08:17:25Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Для определённости, в 8 битах.&lt;br /&gt;&lt;table&gt;
&lt;tr&gt;
&lt;th&gt;coding&lt;/th&gt;
&lt;th&gt;Значение 10000000&lt;/th&gt;
&lt;th&gt;Значение 11111111&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unsigned (беззнаковый)&lt;/td&gt;
&lt;td&gt;128&lt;/td&gt;
&lt;td&gt;255&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;sign-and-magnitude (прямой)&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;-127&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1ʼs complement (обратный)&lt;/td&gt;
&lt;td&gt;-127&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;0ʼs complement (2ʼs complement, дополнительный)&lt;/td&gt;
&lt;td&gt;-128&lt;/td&gt;
&lt;td&gt;-1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;??? (обратно-дополнительный)&lt;/td&gt;
&lt;td&gt;-1&lt;/td&gt;
&lt;td&gt;-128&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;"В железе" вроде были только первые три. (Сейчас реально встретить только дополнительный.) Четвёртого я не видел, хотя для полноты картины он должен был где-то возникнуть. Возник: &lt;a href="https://datatracker.ietf.org/doc/html/rfc8949"&gt;CBOR&lt;/a&gt;, хоть это и чисто программное решение.&lt;br /&gt;&lt;br /&gt;Кря. То есть, признаю неизбежное.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=53916" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:53586</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/53586.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=53586"/>
    <title>CentOS upgrade 7-&amp;gt;8 inplace</title>
    <published>2022-04-06T18:32:52Z</published>
    <updated>2025-02-06T09:02:32Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">The recipe that succeeded to help: &lt;a href="https://forums.centos.org/viewtopic.php?t=75172#p325936"&gt;https://forums.centos.org/viewtopic.php?t=75172#p325936&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And then should be followed by: &lt;a href="https://www.linode.com/docs/guides/migrate-from-centos-8-to-centos-stream/"&gt;https://www.linode.com/docs/guides/migrate-from-centos-8-to-centos-stream/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=53586" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:53473</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/53473.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=53473"/>
    <title>History in bash is really ugly.</title>
    <published>2022-02-18T16:19:48Z</published>
    <updated>2025-02-06T09:01:11Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>1</dw:reply-count>
    <content type="html">History implementation in bash is really ugly.&lt;br /&gt;This is where sqlite looks useful.&lt;br /&gt;&lt;br /&gt;UPD[2025-02-06]: &lt;a href="https://github.com/NorfairKing/bevel"&gt;https://github.com/NorfairKing/bevel&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=53473" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:53057</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/53057.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=53057"/>
    <title>GRUB и проблемы переноса загрузочного раздела</title>
    <published>2022-01-08T17:19:27Z</published>
    <updated>2022-01-09T09:42:58Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>115</dw:reply-count>
    <content type="html">Как сделать установку нового диска в десктоп незабываемой от полного непонимания, что вообще творится и на каком свете находишься? Надо всего лишь просочетать несколько факторов:&lt;br /&gt;&lt;br /&gt;1. Если диск не упомянут в пункте "Hard drive BBS priorities" в настройке BIOS, то та его не отдаёт в I/O через int 13h. В результате GRUB не может его увидеть.&lt;br /&gt;&lt;br /&gt;1б. Первым в списке стоял тот диск, с которого не загружаются ;(&lt;br /&gt;&lt;br /&gt;2. Простых надёжных способов собрать grub.cfg под новые условия (смена корневого раздела) нет, а замена UUID редактором не позволяет подсказать, что надо было ещё добавить "insmod part_gpt" (на старом такого не было).&lt;br /&gt;&lt;br /&gt;3. На диске с GPT но без "BIOS boot partition" GRUB ставит свой core.img урезанным и неверно работающим. Но чтобы понять, что не так, его родной документации не хватает, там связь замолчана.&lt;br /&gt;&lt;br /&gt;4. Если GRUB не нашёл по указанным UUID и пути типа (hd1,msdos5) раздела со своими модулями и конфигами, он хватает первый попавшийся, который нашёл.&lt;br /&gt;&lt;br /&gt;4б. При этом он ещё перезаписывает UUID в параметрах загрузки, чтобы совсем уже никто не догадался.&lt;br /&gt;&lt;br /&gt;5. Спросить, по какому пути GRUB прошёл и прочитал свои конфиги, откуда грузил модули - невозможно.&lt;br /&gt;&lt;br /&gt;6. На то, загрузит ли BIOS внешнюю флэшку, если она была вставлена до перезагрузки, влияет погода на Марсе. Если нет - пункт в boot menu есть, но молча игнорируется.&lt;br /&gt;&lt;br /&gt;Таки взлетел. Выдыхаю:)&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=53057" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:52919</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/52919.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=52919"/>
    <title>Устранение  цифр по Shift при numlock=off (Windows 10)</title>
    <published>2021-12-04T17:09:08Z</published>
    <updated>2021-12-04T17:09:08Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>5</dw:reply-count>
    <content type="html">Есть виндовый лаптоп с 10кой. Как это принято у производителей лаптопов, в центре правой части стандартный numpad. Регулярно возникает ситуация типа нажимаешь Shift+PgUp - получаешь 9. Клавиши стрелочного блока есть, кроме Insert (злобный хьюлетт не сделал её даже как Fn+Del, хотя что им стоило), но расположены неудобно и непривычно. Диверсанты однако.&lt;br /&gt;Поставил вопрос: хочу устранить логику "при NumLock=off, Shift+клавиша даёт цифру" (включая точку для Del).&lt;br /&gt;&lt;br /&gt;Смотрел на Keyboard Layout Creator от MS - numpad там вообще не задействован. Смотрю в утёкшие файлы конфигурации стандартных раскладок - там эта часть вообще не настраивается. Похоже, логика стандартизована где-то в общем коде, не зависящем от раскладки :(&lt;br /&gt;&lt;br /&gt;Попытался подвеситься на WH_KEYBOARD_LL. И тут оказалось, что не всё просто. Home стрелочного блока и Home цифрового блока даёт одинаково 36 (VK_HOME) при numlock=off. Home цифрового блока даёт 103 (VK_NUMPAD7) при numlock=on. Во flags таки младший бит даёт различие между двумя клавишами. Итого вариант, который вроде работает (проверил вживую): если вижу одну из 10 клавиш (центральная 5 не в счёт) и flags&amp;1==0, ставлю 1 в младший бит flags и передаю дальше. Похоже на правду.&lt;br /&gt;&lt;br /&gt;В Linux реализация заняла несколько строчек в конфиге, а тут - извращаться. Но победил.&lt;br /&gt;&lt;br /&gt;Попутный вопрос: почему эта центральная 5 - VK_CLEAR в Windows и KP_Begin в XFree86? Откуда это и что должно было значить?&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=52919" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:52506</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/52506.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=52506"/>
    <title>netch80 @ 2021-10-27T23:19:00</title>
    <published>2021-10-27T20:20:34Z</published>
    <updated>2021-10-30T18:03:10Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>3</dw:reply-count>
    <content type="html">Электроника местами настолько загадочная вещь, что хочется докопаться до причин именно потому, что не понимаешь, как такое могли получить. Вот есть банальная десктопная клава Sven 301 с USB интерфейсом. Цепляюсь через usbhid-dump и наблюдаю реакцию. Если одновременно придавить qwer и yuio, например, то через секунду оно начинает жаловаться на rollover error (далее ROE). А если qwer и uiop - не жалуется. Почему, чёрт возьми? Что за злобные дизайнерские изыски в столь банальном устройстве, зачем? Что виновато - хард или софт? И зачем оно ждёт секунду?&lt;br /&gt;&lt;br /&gt;Если зажать sdf, то: wertgxcvb - любая из этих добавленная к sdf вызывает ROE. А вот a,q,z - не вызывают. Только не говорите, что проводки так идут:) wasd одновременно вызывают ROE. Явно не геймерское устройство:) А вот asdf - нет. Любая из dfg, fgh, ghj, hjk - да. jkl - нет. Чо?&lt;br /&gt;&lt;br /&gt;(Ну да, мне было откровенно нечего делать. Но...)&lt;br /&gt;&lt;br /&gt;UPD: секунду, а не полсекунды. Добавил второй абзац.&lt;br /&gt;&lt;br /&gt;UPD2: Клавиша \| имеет код 0x2b в Set 1 и 0x5d в Set 2, единообразно. Но в USB это 0x31 на клавах где она в D13 (ANSI) и E13 (JIS), но 0x32 на ISO (позиция C12). Л - логика.&lt;br /&gt;(Согласно HID tables это таки в USB две разных клавиши: Keyboard \ and |, и Keyboard Non-US # and ~. Но зачем, если они одновременно не встречаются?)&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=52506" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:52279</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/52279.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=52279"/>
    <title>netch80 @ 2021-10-13T20:26:00</title>
    <published>2021-10-13T19:05:59Z</published>
    <updated>2021-10-13T19:05:59Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Перевожу застарелый сишный код на C++. Самые неприятные чудеса:&lt;br /&gt;&lt;br /&gt;1. Designated initializers - это типа &lt;code&gt;struct moo { .a = 1, .b = 2 }&lt;/code&gt; - не поддерживаются, C++ сторона не смогла такое согласовать. Из g++ выкинули и ввели снова уже только ближе к C++20.&lt;br /&gt;Приходится записывать все значения с их умолчаниями явно.&lt;br /&gt;Попытался вырулить это через конструктор с параметрами - как-то не работает.&lt;br /&gt;Самое неприятное, что на массив на полсотни таких структур жалобы идут на последнюю строчку всего массива - дальше разбирайся сам. Лечится через #if 0 и смещение его по мелким кусочкам.&lt;br /&gt;1ʹ. Потерялась возможность писать конструкции типа &lt;code&gt;sig_action = (struct sigaction) { .sa_handler = usr1signal };&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;2. Если битовые маски были объявлены через enum, типа &lt;code&gt;enum moo { COW = 1, DOG = 2 }&lt;/code&gt;, то в &lt;code&gt;flags &amp;= ~DOG;&lt;/code&gt; требуется раскрытие операции и явное приведение к moo в присвоении. Тут уже просто обидно (кажется, в C# пометив enum как битовые маски можно уйти от подобных проблем).&lt;br /&gt;&lt;br /&gt;3. Инициализация структуры внутри другой структуры без квалификации области видимости. Основной туман возникает на записях типа &lt;code&gt;LIST_HEAD(moo, moo_params) params&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;4. Ну естественно куча присвоений типа &lt;code&gt;frx = calloc(1, sizeof(*frx))&lt;/code&gt;. GCC добавляет сюда адресную арифметику для void*.&lt;br /&gt;К calloc() ещё вопрос - если я перейду на new/make_unique/etc., memset вроде по-прежнему допустим, но некрасиво.&lt;br /&gt;&lt;br /&gt;5. Ошибки типа "goto обходит инициализацию переменных, низзя!"&lt;br /&gt;&lt;br /&gt;(Понятно, что это всё следы быстрого перехода и дальше будут вычищены. Речь не о том.)&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=52279" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:52038</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/52038.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=52038"/>
    <title>netch80 @ 2021-08-23T08:31:00</title>
    <published>2021-08-23T05:32:44Z</published>
    <updated>2021-08-23T05:32:44Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>5</dw:reply-count>
    <content type="html">Внезапно озарило: на FreeBSD ещё надо было явно указывать при настройке включение NTP, сервера, стиль (рывком или нет) и т.д. - а на Linux этой привычки уже нет, обычно оно как-то само магически работает. В systemd вообще свой встроенный демон. Раньше тщательно тюнил набор серверов, сейчас надо постараться поискать, есть на это конфиг или нет, и как его писать. В облаках на старте системы гипервизор гарантированно даёт точное время...&lt;br /&gt;Хорошо ли это, что точность времени перешла в категорию "воздух" - ресурс, который всегда есть? Что админы/девопы моложе ~30 просто не понимают, как его может не быть?&lt;br /&gt;И чем time.constant.com из Ubuntu лучше pool.ntp.org?&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=52038" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2588025:51866</id>
    <link rel="alternate" type="text/html" href="https://netch80.dreamwidth.org/51866.html"/>
    <link rel="self" type="text/xml" href="https://netch80.dreamwidth.org/data/atom/?itemid=51866"/>
    <title>netch80 @ 2021-07-02T18:04:00</title>
    <published>2021-07-02T15:05:04Z</published>
    <updated>2021-07-02T15:05:04Z</updated>
    <dw:security>public</dw:security>
    <dw:reply-count>6</dw:reply-count>
    <content type="html">$ export F=`printf "\xff\xfe\xfd"`&lt;br /&gt;$ python3 -c 'import os; print(repr(os.environ["F"]))'&lt;br /&gt;'\udcff\udcfe\udcfd'&lt;br /&gt;$ python3 -c 'import os; print(os.environ["F"].encode())'&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;string&gt;", line 1, in &lt;module&gt;&lt;br /&gt;UnicodeEncodeError: 'utf-8' codec can't encode characters in position 0-2: surrogates not allowed&lt;br /&gt;зачем ловить медведя, если потом он тебя не отпустит?&lt;/module&gt;&lt;/string&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=netch80&amp;ditemid=51866" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
</feed>
