<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. https://www.livejournal.com/bots/  -->
<rss version='2.0'  xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>язык, на котором не говорят</title>
  <link>https://beroal.livejournal.com/</link>
  <description>язык, на котором не говорят - LiveJournal.com</description>
  <lastBuildDate>Thu, 19 Aug 2021 11:03:24 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>beroal</lj:journal>
  <lj:journalid>4821330</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <image>
    <url>https://l-userpic.livejournal.com/63961076/4821330</url>
    <title>язык, на котором не говорят</title>
    <link>https://beroal.livejournal.com/</link>
    <width>100</width>
    <height>100</height>
  </image>

  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/82309.html</guid>
  <pubDate>Thu, 19 Aug 2021 11:03:24 GMT</pubDate>
  <title>On writing type size in its name</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/82309.html</link>
  <description>Since number type sizes are powers of 2, I propose to denote a number type of size &lt;code&gt;2**N&lt;/code&gt; by &lt;code&gt;int${N}&lt;/code&gt;. &lt;code&gt;int7&lt;/code&gt; is much shorter than, say, &lt;code&gt;int128&lt;/code&gt;. (The word &lt;code&gt;int&lt;/code&gt; is not important here. Replace it with &lt;code&gt;i&lt;/code&gt;, &lt;code&gt;Word&lt;/code&gt;, or whatever you want.)</description>
  <comments>https://beroal.livejournal.com/82309.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>интерфейс пользователя</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/82086.html</guid>
  <pubDate>Wed, 11 Aug 2021 19:08:26 GMT</pubDate>
  <title>Коренгал</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/82086.html</link>
  <description>Когда я в 2019 году переводил комедию про американского солдата, который стал наёмным убийцей, решил немного подковаться в этой области и прочитал статью и посмотрел фильм об американской операции в долине Коренгал в Афганистане. Статья оказалась более информативной.&lt;br /&gt;&lt;br /&gt;Американское военное начальство решило занять эту долину по стратегическим соображениям. В долине жило изолированное племя, не поддерживающее Талибан. Американцы начали строить через долину дорогу, возможно, ещё какие-то подарки, уже не помню. На встречах старейшины на словах поддерживали американцев, но начали сотрудничать с Талибаном. То есть местный житель пускает талибов в свой дом, талибы оттуда стреляют. Если американцы ответят, то им предъявят претензии за погибших гражданских. Зайдя в тупик и понеся потери, американцы оставили долину и дорогу так и не построили. Больше всего автор статьи возмущался лицемерием местных жителей. 😉&lt;br /&gt;&lt;br /&gt;Тогда у меня отложилось в голове, что американцы наивны и не понимают, что в Афганистане их демократия никому нафиг не сдалась и что местные жители обожают ислам и хотят жить в Средневековье. Сейчас мы наблюдаем долину Коренгал в масштабе всей страны. Американцам разумнее вкладывать в Украину, где их хотя бы поддерживает много людей.</description>
  <comments>https://beroal.livejournal.com/82086.html?view=comments#comments</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/81868.html</guid>
  <pubDate>Thu, 15 Jul 2021 17:01:17 GMT</pubDate>
  <title>планирование с помощью приоритетов</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/81868.html</link>
  <description>Встретился алгоритм планирования с помощью приоритетов, который автоматически назначает приоритеты. По-моему, это оксимирон.&lt;br /&gt;&lt;br /&gt;Рассмотрим алгоритм планирования, которые даёт процессор потоку, у которого общее время процессора, которое этот поток использовал, наименьшее. (Кстати, вполне рабочий алгоритм.) Получается, здесь приоритет — это использованное время процессора с обратным знаком (чем больше приоритет, тем больше вероятность, что поток получит время). ☺&lt;br /&gt;&lt;br /&gt;В моём понимании планирование с помощью приоритетов — это когда приоритеты задаёт системный администратор или пользователь.</description>
  <comments>https://beroal.livejournal.com/81868.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>термин</category>
  <category>algorithm</category>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/81580.html</guid>
  <pubDate>Thu, 06 May 2021 08:45:22 GMT</pubDate>
  <title>the no free lunch theorem and the philosophy of deep learning</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/81580.html</link>
  <description>&lt;blockquote&gt;The no free lunch theorem has made it clear that there is no best machine learning algorithm, and, in particular, no best form of regularization. Instead we must choose a form of regularization that is well suited to the particular task we want to solve. The philosophy of deep learning in general and this book in particular is that a wide range of tasks (such as all the intellectual tasks that people can do) may all be solved effectively using very general-purpose forms of regularization.&lt;/blockquote&gt; Goodfellow, Ian, et al. &lt;em&gt;Deep Learning.&lt;/em&gt; MIT Press, 2016.&lt;br /&gt;&lt;br /&gt;So they say that there is no best form of regularization which is true, but then they say that the philosophy of deep learning found or expects to be found the best form of regularization. This is why I believe that the logical reasoning skill should be one of prerequisites for studying Machine Learning. 😉</description>
  <comments>https://beroal.livejournal.com/81580.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>термин</category>
  <category>education</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/81163.html</guid>
  <pubDate>Tue, 13 Apr 2021 19:47:55 GMT</pubDate>
  <title>Setting up a network bridge between a QEMU VM and its host on the command line</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/81163.html</link>
  <description>Setting up a network bridge between a QEMU VM and its host on the command line&lt;br /&gt;A user of ArchLinux can follow relevant parts of the wiki articles &lt;a href=&quot;https://wiki.archlinux.org/index.php/QEMU&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;“QEMU”&lt;/a&gt; and &lt;a href=&quot;https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;“PCI passthrough via OVMF”&lt;/a&gt; for setting up other aspects of a QEMU VM, but these guides don&apos;t provide a short method suitable for people who are not network administrators and don&apos;t need ramified network topologies. The default network of a QEMU VM, so called “user networking”, frankly, is disconnected from its host. Below is the short method of setting up a VM such that it can communicate with other networks connected to its host like a wired channel to the internet or a home Wi-Fi network.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Enable packet forwarding on the host by setting the &lt;code&gt;net.ipv4.ip_forward&lt;/code&gt; kernel parameter to &lt;code&gt;1&lt;/code&gt; as described in &lt;a href=&quot;https://wiki.archlinux.org/index.php/Internet_sharing#Enable_packet_forwarding&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;“Internet sharing”&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Set up a bridge. You can follow &lt;a href=&quot;https://mike42.me/blog/2019-08-how-to-use-the-qemu-bridge-helper-on-debian-10&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;“How to use the qemu-bridge-helper on Debian 10”&lt;/a&gt; for this part.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Install &lt;code&gt;libvirt&lt;/code&gt; and start its service as described in &lt;a href=&quot;https://wiki.archlinux.org/index.php/Libvirt#Server&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;“libvirt”&lt;/a&gt;. This package provides a bridge network device for the host. The following &lt;code&gt;virsh&lt;/code&gt; commands must be executed under &lt;code&gt;root&lt;/code&gt; on the host so they are executed by the &lt;code&gt;qemu:///system&lt;/code&gt; instance of &lt;code&gt;libvirtd&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;A default bridge comes with &lt;code&gt;libvirt&lt;/code&gt;. You can see this bridge with &lt;code&gt;virsh net-list --all&lt;/code&gt;. Activate the bridge with &lt;code&gt;virsh net-start --network default&lt;/code&gt;. A network device &lt;code&gt;virbr0&lt;/code&gt; should appear on the host. You can deactivate the bridge with &lt;code&gt;virsh net-destroy --network default&lt;/code&gt;. In order to activate it automatically at boot, execute &lt;code&gt;virsh net-autostart --network default&lt;/code&gt;. I don&apos;t know how to disable autostart.&lt;/li&gt;&lt;li&gt;Grant a user running the VM access to the bridge. To this end, create a file &lt;code&gt;/etc/qemu/bridge.conf&lt;/code&gt; containing the line &lt;code&gt;allow virbr0&lt;/code&gt;. (I suppose this file may have any name.) Grant the user read access to this file. Probably, the most natural way to do this on ArchLinux is to add the user to the &lt;code&gt;kvm&lt;/code&gt; group and grant that group read access. The user will implicitly execute the &lt;code&gt;qemu-bridge-helper&lt;/code&gt; executable from the &lt;code&gt;qemu&lt;/code&gt; package when starting a VM. Check that this executable has &lt;code&gt;setuid&lt;/code&gt;. If the user doesn&apos;t have permissions, they&apos;ll see the message “failed to parse default acl file `/etc/qemu/bridge.conf&apos; qemu-system-x86_64: bridge helper failed” when they start a VM.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;When starting a VM, add the options &lt;code&gt;-netdev bridge,id=hn0,br=virbr0&lt;/code&gt; and &lt;code&gt;-device virtio-net-pci,netdev=hn0,id=nic1&lt;/code&gt; to the QEMU command, for example, to &lt;code&gt;qemu-system-x86_64&lt;/code&gt;. The &lt;code&gt;-device&lt;/code&gt; option creates a network device in the VM which is connected to a network backend in the host created by the &lt;code&gt;-netdev&lt;/code&gt; option. This network backend is visible as a &lt;code&gt;tap&lt;/code&gt; network device in the host.&lt;/li&gt;&lt;li&gt;If the host wants to talk to the VM, it should connect to the IP address of the network device in the VM. If the VM wants to talk to the host, it should connect to the IP address of the bridge in the host.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;In my case, iPerf2 measured network throughput of 23 Gb/s between the host and the VM. Much better than my internet connection ☺. The throughput depends on the model of the network device in the VM.&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>https://beroal.livejournal.com/81163.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>linux</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/80945.html</guid>
  <pubDate>Mon, 22 Mar 2021 18:44:08 GMT</pubDate>
  <title>Gparted corrupts F2FS partition</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/80945.html</link>
  <description>After I extended a partition containing F2FS with a recent version &lt;br /&gt;of Gparted, the partition no longer mounts. &lt;code&gt;mount&lt;/code&gt; reports an error, but &lt;code&gt;fsck.f2fs&lt;/code&gt; does not see any problem (well, except for “Invalid CP CRC offset: 0”) and does not fix the file system. A strange behavior for a file system.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;losetup /dev/loop0 arch-os.img&lt;br /&gt;mount -t f2fs -o ro /dev/loop0 /root/mnt/temp&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;[ 6890.647749] F2FS-fs (loop0): Wrong valid_user_blocks: 16040048, &lt;br /&gt;user_block_count: 10016768&lt;br /&gt;[ 6890.647808] F2FS-fs (loop0): Failed to get valid F2FS checkpoint&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;losetup -d /dev/loop0&lt;br /&gt;fsck.f2fs arch-os.img&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Info: Segments per section = 1&lt;br /&gt;Info: Sections per zone = 1&lt;br /&gt;Info: sector size = 512&lt;br /&gt;Info: total sectors = 162916352 (79549 MB)&lt;br /&gt;Info: MKFS version&lt;br /&gt;   &quot;Linux version 4.4.1-2-ARCH (builduser@...) (gcc version 5.3.0 &lt;br /&gt;(GCC) ) #1 SMP PREEMPT Wed Feb 3 13:12:33 UTC 2016&quot;&lt;br /&gt;Info: FSCK version&lt;br /&gt;   from &quot;Linux version 5.7.12-arch1-1 (linux@...) (gcc version &lt;br /&gt;10.1.0 (GCC), GNU ld (GNU Binutils) 2.34.0) #1 SMP PREEMPT Fri, 31 Jul &lt;br /&gt;2020 17:38:22 +0000&quot;&lt;br /&gt;     to &quot;Linux version 5.11.7-arch1-1 (linux@...) (gcc (GCC) &lt;br /&gt;10.2.0, GNU ld (GNU Binutils) 2.36.1) #1 SMP PREEMPT Wed, 17 Mar 2021 &lt;br /&gt;16:59:58 +0000&quot;&lt;br /&gt;Info: superblock features = 0 :&lt;br /&gt;Info: superblock encrypt level = 0, salt = 00000000000000000000000000000000&lt;br /&gt;Info: total FS sectors = 162916352 (79549 MB)&lt;br /&gt;     Invalid CP CRC offset: 0&lt;br /&gt;Info: CKPT version = a14d4c&lt;br /&gt;Info: Checked valid nat_bits in checkpoint&lt;br /&gt;Info: checkpoint state = 81 :  nat_bits unmount&lt;br /&gt;&lt;br /&gt;[FSCK] Unreachable nat entries                        [Ok..] [0x0]&lt;br /&gt;[FSCK] SIT valid block bitmap checking                [Ok..]&lt;br /&gt;[FSCK] Hard link checking for regular file            [Ok..] [0x719]&lt;br /&gt;[FSCK] valid_block_count matching with CP             [Ok..] [0xf4c070]&lt;br /&gt;[FSCK] valid_node_count matching with CP (de lookup)  [Ok..] [0xe242a]&lt;br /&gt;[FSCK] valid_node_count matching with CP (nat lookup) [Ok..] [0xe242a]&lt;br /&gt;[FSCK] valid_inode_count matched with CP              [Ok..] [0xe0470]&lt;br /&gt;[FSCK] free segment_count matched with CP             [Ok..] [0x1d6b]&lt;br /&gt;[FSCK] next block offset is free                      [Ok..]&lt;br /&gt;[FSCK] fixing SIT types&lt;br /&gt;[FSCK] other corrupted bugs                           [Ok..]&lt;br /&gt;&lt;br /&gt;Done: 14.100000 secs&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;f2fs-tools&lt;/code&gt; 1.14.0&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>https://beroal.livejournal.com/80945.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/80787.html</guid>
  <pubDate>Mon, 22 Mar 2021 18:34:25 GMT</pubDate>
  <title>cleaning kernel dumps from UEFI BIOS NVRAM</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/80787.html</link>
  <description>Trying to install Secure Boot certificates into UEFI BIOS NVRAM, I hit a problem that there is no free space left in the NVRAM. Most solutions recommend just to delete files starting with &lt;code&gt;dump&lt;/code&gt; in the directory &lt;code&gt;/sys/firmware/efi/efivars&lt;/code&gt;. A virtual filesystem exposing UEFI BIOS NVRAM variables is mounted to this directory. Indeed, these files accounted for 100 of 130 kB of used space. However, working with this file system directly is dangerous because you can accidentally delete another variable and brick your motherboard. Hence I read a little about these dump files. They are used as a backend to the so called “Linux persistent storage filesystem &lt;code&gt;pstore&lt;/code&gt;”. It can store kernel messages when a kernel panics. &lt;code&gt;pstore&lt;/code&gt; is exposed in the directory &lt;code&gt;/sys/fs/pstore&lt;/code&gt;. Hence a safe way to clean UEFI BIOS NVRAM would be through this directory. Also there is a &lt;code&gt;systemd-pstore.service&lt;/code&gt; that moves these messages to the systemd journal. When I started it, it emptied &lt;code&gt;/sys/fs/pstore&lt;/code&gt;, but dump files were not deleted from &lt;code&gt;/sys/firmware/efi/efivars&lt;/code&gt; for some reason. After a reboot, voilà, there is no kernel garbage in UEFI BIOS NVRAM and will never be if this service is enabled.</description>
  <comments>https://beroal.livejournal.com/80787.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>linux</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/80499.html</guid>
  <pubDate>Mon, 08 Mar 2021 18:04:52 GMT</pubDate>
  <title>Diceware</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/80499.html</link>
  <description>&lt;a href=&quot;https://theworld.com/~reinhold/diceware.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Diceware&lt;/a&gt; is a method of choosing a password (passphrase) that consists of several short words with good entropy. You can download a Diceware dictionary text file in different languages from the Diceware page. &lt;a href=&quot;https://theworld.com/%7Ereinhold/diceware.wordlist.asc&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Here is the direct link to the English file.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.beroal.in.ua/math/cryptography/diceware.py&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;This Python 3 program transforms a Diceware dictionary text file into 6 HTML pages.&lt;/a&gt; 6 pages are much more compact than 36-page printable document they offer. You can tune font size in a web browser print dialog. A program usage manual is embedded into the program. &lt;a href=&quot;http://www.beroal.in.ua/math/cryptography/diceware.zip&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;The result of applying this program to the English Diceware dictionary text file is in this Zip archive.&lt;/a&gt;</description>
  <comments>https://beroal.livejournal.com/80499.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>интерфейс пользователя</category>
  <category>linguistics</category>
  <category>information security</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/80155.html</guid>
  <pubDate>Mon, 08 Mar 2021 12:38:23 GMT</pubDate>
  <title>performance of cryptographic integrity checkers</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/80155.html</link>
  <description>In this article, I share performance results of cryptographic integrity checkers for full-disk encryption in Linux. Specifically, integrity checkers implemented by &lt;code&gt;dm-crypt/dm-integrity&lt;/code&gt;. Integrity checking may be combined with encryption into one algorithm called “authenticated encryption”; these are measured too.&lt;br /&gt;&lt;br /&gt;The AES cipher in the GCM mode and the ChaCha20 cipher with the Poly1305 authenticator are not measured. As Broz, Patocka, and Matyas and &lt;a href=&quot;https://archive.fosdem.org/2018/schedule/event/cryptsetup/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;this talk&lt;/a&gt; point out, the implementation of GCM in the Linux kernel is not usable because its nonces are short, and ChaCha20 has the same problem.&lt;br /&gt;&lt;br /&gt;The underlying device is &lt;code&gt;tmpfs&lt;/code&gt;, in other words, RAM. Hence the implementations of cryptographic algorithms are not constrained by a device; I do not intend to measure SSD performance.&lt;br /&gt;&lt;br /&gt;The file &lt;code&gt;/tmp/benchmark&lt;/code&gt; that is read and written by benchmarks is prepared with&lt;br /&gt;&lt;br /&gt;&lt;code&gt;dd bs=1048576 count=64 if=/dev/zero of=/tmp/benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;dd&lt;/code&gt; ensures that &lt;code&gt;/tmp/benchmark&lt;/code&gt; is not a sparse file. A key for encryption and integrity checking is produced with&lt;br /&gt;&lt;br /&gt;&lt;code&gt;dd bs=64 count=1 if=/dev/urandom of=/tmp/key&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;For I/O benchmarking, I use &lt;code&gt;fio&lt;/code&gt;. Since I do not measure file system, cache, or SSD performance, only the throughput of sequential reading and sequential writing is measured. The benchmark commands BENCHMARK_COMMANDS are&lt;br /&gt;&lt;br /&gt;&lt;code&gt;fio --rw write --filename $BLOCK_DEVICE a.fio&lt;br /&gt;fio --rw read --filename $BLOCK_DEVICE a.fio&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;where &lt;code&gt;a.fio&lt;/code&gt; contains&lt;br /&gt;&lt;br /&gt;&lt;code&gt;[global]&lt;br /&gt;bs=1M&lt;br /&gt;iodepth=64&lt;br /&gt;ioengine=libaio&lt;br /&gt;gtod_reduce=1&lt;br /&gt;numjobs=4&lt;br /&gt;group_reporting=1&lt;br /&gt;time_based&lt;br /&gt;runtime=10&lt;br /&gt;&lt;br /&gt;[job]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;BLOCK_DEVICE&lt;/code&gt; is &lt;code&gt;/tmp/benchmark&lt;/code&gt; when the raw performance is measured and &lt;code&gt;/dev/mapper/benchmark&lt;/code&gt; when the performance of integrity checking or encryption is measured.&lt;br /&gt;&lt;br /&gt;In measurement results, an encryption/authentication mode is labeled by a string of the form &lt;code&gt;&quot;$ENCRYPTION/$INTEGRITY/$JOURNALING&quot;&lt;/code&gt;. For example, the performance results of the AES cipher in the XTS mode and integrity checking with HMAC with SHA1 and journaling on are shown under the label “aes-xts-plain64/hmac-sha1/yes”. Below are specific commands for measuring performance in every mode. The raw mode shows a level at which RAM and CPU begin to constrain the performance.&lt;br /&gt;&lt;br /&gt;mode: //&lt;br /&gt;&lt;code&gt;$BENCHMARK_COMMANDS&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mode: cipher_null//&lt;br /&gt;&lt;code&gt;cryptsetup --type luks2 --sector-size 4096 --key-file /tmp/key --cipher cipher_null --iter-time 100 luksFormat /tmp/benchmark&lt;br /&gt;cryptsetup --key-file /tmp/key open /tmp/benchmark benchmark&lt;br /&gt;$BENCHMARK_COMMANDS&lt;br /&gt;cryptsetup close benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mode: /crc32c/no&lt;br /&gt;&lt;code&gt;integritysetup --sector-size 4096 --integrity crc32c --integrity-no-journal format /tmp/benchmark&lt;br /&gt;integritysetup --integrity crc32c --integrity-no-journal open /tmp/benchmark benchmark&lt;br /&gt;$BENCHMARK_COMMANDS&lt;br /&gt;integritysetup close benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mode: /hmac-sha1/no&lt;br /&gt;&lt;code&gt;integritysetup --sector-size 4096 --integrity-key-file /tmp/key --integrity-key-size 20 --integrity hmac-sha1 --integrity-no-journal format /tmp/benchmark&lt;br /&gt;integritysetup --integrity-key-file /tmp/key --integrity-key-size 20 --integrity hmac-sha1 --integrity-no-journal open /tmp/benchmark benchmark&lt;br /&gt;$BENCHMARK_COMMANDS&lt;br /&gt;integritysetup close benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mode: aes-xts-plain64//&lt;br /&gt;&lt;code&gt;cryptsetup --type luks2 --sector-size 4096 --key-file /tmp/key --cipher aes-xts-plain64 luksFormat /tmp/benchmark&lt;br /&gt;cryptsetup --key-file /tmp/key open /tmp/benchmark benchmark&lt;br /&gt;$BENCHMARK_COMMANDS&lt;br /&gt;cryptsetup close benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mode: aes-xts-plain64/hmac-sha1/no&lt;br /&gt;&lt;code&gt;cryptsetup --type luks2 --sector-size 4096 --key-file /tmp/key --cipher aes-xts-plain64 --integrity hmac-sha1 --integrity-no-journal --iter-time 100 luksFormat /tmp/benchmark&lt;br /&gt;cryptsetup --key-file /tmp/key --integrity-no-journal open /tmp/benchmark benchmark&lt;br /&gt;$BENCHMARK_COMMANDS&lt;br /&gt;cryptsetup close benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mode: aegis128-random/aead/no&lt;br /&gt;&lt;code&gt;cryptsetup --type luks2 --cipher aegis128-random --key-size 128 --integrity aead --sector-size 4096 --key-file /tmp/key --integrity-no-journal --iter-time 100 luksFormat /tmp/benchmark&lt;br /&gt;cryptsetup --key-file /tmp/key --integrity-no-journal open /tmp/benchmark benchmark&lt;br /&gt;$BENCHMARK_COMMANDS&lt;br /&gt;cryptsetup close benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mode: /crc32c/yes&lt;br /&gt;&lt;code&gt;integritysetup --sector-size 4096 --integrity crc32c format /tmp/benchmark&lt;br /&gt;integritysetup --integrity crc32c open /tmp/benchmark benchmark&lt;br /&gt;$BENCHMARK_COMMANDS&lt;br /&gt;integritysetup close benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mode: /hmac-sha1/yes&lt;br /&gt;&lt;code&gt;integritysetup --sector-size 4096 --integrity-key-file /tmp/key --integrity-key-size 20 --integrity hmac-sha1 format /tmp/benchmark&lt;br /&gt;integritysetup --integrity-key-file /tmp/key --integrity-key-size 20 --integrity hmac-sha1 open /tmp/benchmark benchmark&lt;br /&gt;$BENCHMARK_COMMANDS&lt;br /&gt;integritysetup close benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;mode: aes-xts-plain64/hmac-sha1/yes&lt;br /&gt;&lt;code&gt;cryptsetup --type luks2 --sector-size 4096 --key-file /tmp/key --cipher aes-xts-plain64 --integrity hmac-sha1 --iter-time 100 luksFormat /tmp/benchmark&lt;br /&gt;cryptsetup --key-file /tmp/key open /tmp/benchmark benchmark&lt;br /&gt;$BENCHMARK_COMMANDS&lt;br /&gt;cryptsetup close benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mode: aegis128-random/aead/yes&lt;br /&gt;&lt;code&gt;cryptsetup --type luks2 --cipher aegis128-random --key-size 128 --integrity aead --sector-size 4096 --key-file /tmp/key --iter-time 100 luksFormat /tmp/benchmark&lt;br /&gt;cryptsetup --key-file /tmp/key open /tmp/benchmark benchmark&lt;br /&gt;$BENCHMARK_COMMANDS&lt;br /&gt;cryptsetup close benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mode: /hmac-sha256/yes&lt;br /&gt;&lt;code&gt;integritysetup --sector-size 4096 --integrity-key-file /tmp/key --integrity-key-size 64 --integrity hmac-sha256 format /tmp/benchmark&lt;br /&gt;integritysetup --integrity-key-file /tmp/key --integrity-key-size 64 --integrity hmac-sha256 open /tmp/benchmark benchmark&lt;br /&gt;integritysetup close benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mode: /hmac-sha256/no&lt;br /&gt;&lt;code&gt;integritysetup --sector-size 4096 --integrity-key-file /tmp/key --integrity-key-size 64 --integrity hmac-sha256 --integrity-no-journal format /tmp/benchmark&lt;br /&gt;integritysetup --integrity-key-file /tmp/key --integrity-key-size 64 --integrity hmac-sha256 --integrity-no-journal open /tmp/benchmark benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mode: aes-xts-plain64/hmac-sha256/yes&lt;br /&gt;&lt;code&gt;cryptsetup --type luks2 --sector-size 4096 --key-file /tmp/key --cipher aes-xts-plain64 --integrity hmac-sha256 --iter-time 100 luksFormat /tmp/benchmark&lt;br /&gt;cryptsetup --key-file /tmp/key open /tmp/benchmark benchmark&lt;br /&gt;$BENCHMARK_COMMANDS&lt;br /&gt;cryptsetup close benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;mode: aes-xts-plain64/hmac-sha256/no&lt;br /&gt;&lt;code&gt;cryptsetup --type luks2 --sector-size 4096 --key-file /tmp/key --cipher aes-xts-plain64 --integrity hmac-sha256 --integrity-no-journal --iter-time 100 luksFormat /tmp/benchmark&lt;br /&gt;cryptsetup --integrity-no-journal --key-file /tmp/key open /tmp/benchmark benchmark&lt;br /&gt;$BENCHMARK_COMMANDS&lt;br /&gt;cryptsetup close benchmark&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Results in CSV:&lt;br /&gt;&lt;code&gt;encryption/integrity/journal,&quot;Sequential reading, MiB/s&quot;,&quot;Sequential writing, MiB/s&quot;&lt;br /&gt;//,12567.06,4934.57&lt;br /&gt;cipher_null//,7236.37,2762.62&lt;br /&gt;/crc32c/no,7156.80,3055.56&lt;br /&gt;/crc32c/yes,7182.00,533.24&lt;br /&gt;aegis128-random/aead/no,6206.72,906.96&lt;br /&gt;aegis128-random/aead/yes,6213.68,906.91&lt;br /&gt;aes-xts-plain64//,5296.00,2379.60&lt;br /&gt;/hmac-sha1/no,3175.20,1971.55&lt;br /&gt;/hmac-sha1/yes,3200.40,1140.30&lt;br /&gt;aes-xts-plain64/hmac-sha1/no,1974.03,1903.11&lt;br /&gt;aes-xts-plain64/hmac-sha1/yes,2030.40,1722.06&lt;br /&gt;/hmac-sha256/no,1486.8,1190.62&lt;br /&gt;/hmac-sha256/yes,1561.5,686.7&lt;br /&gt;aes-xts-plain64/hmac-sha256/no,883.6,1527.36&lt;br /&gt;aes-xts-plain64/hmac-sha256/yes,996.4,1451.72&lt;/code&gt;&lt;br /&gt;and &lt;a href=&quot;http://www.beroal.in.ua/comp/linux/crypt_benchmark/crypt_benchmark.ods&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;ODS&lt;/a&gt; with a &lt;a href=&quot;http://www.beroal.in.ua/comp/linux/crypt_benchmark/crypt_benchmark_graph.png&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;cute performance graph&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I can&apos;t declare a winner since the results are inconclusive and weird. The main issue is that writing with AEGIS-128 is considerably slower than writing with AES-XTS and SHA-1 while their relationship for reading is reverse. Reading with AEGIS-128 is 7 times faster than writing. This seems wrong. If it is correct, considering that NVMe SSDs in the price range from 100 to 150 USD offer a throughput at about 3 GiB/s, the throughput of a cipher at 1 GiB/s is disappointing. The writing performance of CRC32C with journaling is clearly wrong too. The writing performance of HMAC with AES-XTS is greater than HMAC without encryption while it should be the reverse. Maybe, I set up &lt;code&gt;dm-crypt/dm-integrity&lt;/code&gt; wrong? Can anybody replicate my results?&lt;br /&gt;&lt;br /&gt;System configuration is below.&lt;br /&gt;CPU: AMD Ryzen 3 2200G&lt;br /&gt;RAM: 2×8GB, DDR4, 3200 MHz, G.Skill Ripjaws V, Black, F4-3200C16D-16GVKB, 16-18-18-38&lt;br /&gt;motherboard: MSI B450-A Pro&lt;br /&gt;&lt;br /&gt;&lt;code&gt;uname -r&lt;br /&gt;5.11.2-arch1-1&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;pacman -Q fio&lt;br /&gt;fio 3.25-1&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;mount | grep /tmp&lt;br /&gt;tmpfs on /tmp type tmpfs (rw,nosuid,nodev,size=7154472k,nr_inodes=409600,inode64)&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Works Cited&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Broz, Milan, Mikulas Patocka, and Vashek Matyas. “Practical Cryptographic Data Integrity Protection with Full Disk Encryption Extended Version.” arXiv e-prints (2018): arXiv-1807.&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>https://beroal.livejournal.com/80155.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>linux</category>
  <category>information security</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/80104.html</guid>
  <pubDate>Mon, 04 Jan 2021 12:38:14 GMT</pubDate>
  <title>system-wide PulseAudio and pacmd</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/80104.html</link>
  <description>If the PulseAudio daemon is executed in the system-wide mode, &lt;code&gt;pacmd&lt;/code&gt; will not work even if started by &lt;code&gt;root&lt;/code&gt;. Instead, it will work if it is started by user &lt;code&gt;pulse&lt;/code&gt; with the environment variable &lt;code&gt;XDG_RUNTIME_DIR&lt;/code&gt; assigned to &lt;code&gt;/run/user/$UID&lt;/code&gt;. &lt;code&gt;$UID&lt;/code&gt; is the UID of user &lt;code&gt;pulse&lt;/code&gt;. Everything in one command for &lt;code&gt;root&lt;/code&gt;:&lt;br /&gt;&lt;code&gt;sudo -u pulse -- env XDG_RUNTIME_DIR=/run/user/$UID pacmd&lt;/code&gt;</description>
  <comments>https://beroal.livejournal.com/80104.html?view=comments#comments</comments>
  <category>linux</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/79816.html</guid>
  <pubDate>Mon, 03 Aug 2020 10:39:57 GMT</pubDate>
  <title>On when linear maps and matrices were introduced</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/79816.html</link>
  <description>&lt;blockquote&gt;One striking feature of Noether&apos;s 1929 paper occurred in a footnote: “As B. L. van der Waerden has communicated to me, one can obtain an invariant connection, independent of the specific choice of basis, by separating the concepts linear transformation and matrix. A linear transformation is a homomorphism of two modules of linear forms; a matrix is an expression (the representation) of this homomorphism by a definite choice of basis” [76,670]. Here we have the essential modern connection between the notions of linear transformation, matrix, and module (or vector space). Two years later, van der Waerden&apos;s insight about the proper way of viewing that connection was presented to a much wider audience in his textbook.&lt;/blockquote&gt;&lt;br /&gt;Moore, Gregory H. “The Axiomatization of Linear Algebra: 1875-1940.” &lt;em&gt;Historia Mathematica&lt;/em&gt;, volume 22, issue 3, 1995, pp. 262–303. &lt;em&gt;ScienceDirect&lt;/em&gt;, doi:10.1006/hmat.1995.1025.</description>
  <comments>https://beroal.livejournal.com/79816.html?view=comments#comments</comments>
  <category>mathematics</category>
  <category>термин</category>
  <category>education</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/79603.html</guid>
  <pubDate>Tue, 19 May 2020 10:02:54 GMT</pubDate>
  <title>brackets and quotation characters in Unicode</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/79603.html</link>
  <description>Recently I busied myself with finding a list of brackets and quotation characters and their correspondence in the Unicode Character Database. By “brackets” I mean all kinds of brackets: round, square, curly, etc. Though the database provides necessary information, it has some quirks.&lt;br /&gt;&lt;br /&gt;Using Bidi_Mirrored and Bidi_Mirroring_Glyph (character properties), as suggested somewhere on the web, is misguided. I suppose that these properties were created to aid text rendering. In a right-to-left text, a Bidi_Mirrored character X should be rendered as the character Bidi_Mirroring_Glyph of X is rendered in a left-to-right text. The glyph of Bidi_Mirroring_Glyph of X should be a reflection across the vertical axis of the glyph of X. Hence many characters like U+003C LESS-THAN SIGN and U+2208 ELEMENT OF (set membership) are Bidi_Mirrored. Even worse, Bidi_Mirroring_Glyph of some characters is the character itself, for example, for U+2260 NOT EQUAL TO and U+222B INTEGRAL.&lt;br /&gt;&lt;br /&gt;The property Quotation_Mark gives quotation characters. There is no surprises here. Beware that U+0022 QUOTATION MARK (straight double quotation character) and U+0027 APOSTROPHE are Quotation_Mark-s.&lt;br /&gt;&lt;br /&gt;The property Bidi_Paired_Bracket_Type has three values: Open, Close, and None. Open for open brackets, and Close for close brackets. Bidi_Paired_Bracket of X is the bracket which is the pair to X. No quotation characters here. For an unknown reason,&lt;br /&gt;&lt;ul&gt;&lt;li&gt;U+FD3E ORNATE LEFT PARENTHESIS and U+FD3F ORNATE RIGHT PARENTHESIS from the Arabic_Presentation_Forms_A block,&lt;/li&gt;&lt;li&gt;some rare forms of brackets like U+2E02 LEFT SUBSTITUTION BRACKET,&lt;/li&gt;&lt;li&gt;presentation forms for brackets like U+0E35 PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;are not included.&lt;br /&gt;&lt;br /&gt;The most abstruse way to find brackets and quotation characters is General_Category. The relevant values of this property are Open_Punctuation, Close_Punctuation, Initial_Punctuation, and Final_Punctuation.&lt;br /&gt;&lt;br /&gt;Initial_Punctuation and Final_Punctuation mark quotation characters. Classification of quotation characters is not clear-cut: U+0022 QUOTATION MARK is used as open and close characters, some quotation characters occur in more than one pair („…” and „…“), and guillemets are used with swapped meaning (»…«) sometimes. Hence not all quotation marks are Initial_Punctuation and Final_Punctuation, for example, U+0022 QUOTATION MARK is not. U+201E DOUBLE LOW-9 QUOTATION MARK is Open_Punctuation, again for an unknown reason. It is interesting that U+2E20 LEFT VERTICAL BAR WITH QUILL and U+2E21 RIGHT VERTICAL BAR WITH QUILL are considered Initial_Punctuation and Final_Punctuation respectively. Because they are similar to straight brackets (|…|)?&lt;br /&gt;&lt;br /&gt;Brackets and other similar characters are Open_Punctuation or Close_Punctuation. Here the items I listed for Bidi_Paired_Bracket_Type are included.&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>https://beroal.livejournal.com/79603.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>термин</category>
  <category>linguistics</category>
  <category>fun</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/79104.html</guid>
  <pubDate>Wed, 29 Apr 2020 07:47:08 GMT</pubDate>
  <title>Кобол</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/79104.html</link>
  <description>По-моему, никто не написал настоящую причину долгожительства Кобола. Причина не в том, что &lt;a href=&quot;https://stackoverflow.blog/2020/04/20/brush-up-your-cobol-why-is-a-60-year-old-language-suddenly-in-demand/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;существует много программного кода на Коболе&lt;/a&gt;. Программист нужен только для того, чтобы писать новый программный код. Даже если он «дорабатывает» программу, он выбрасывает кусок кода и вписывает на его место новый. Это крайность, скажем, пишет новую функцию. Для этого нужно знать только интерфейс существующего кода, через который функция с ним взаимодействует, что требует больше прикладных знаний, чем знаний япа. В общем, писать на Коболе не требуется.&lt;br /&gt;&lt;br /&gt;Настоящая проблема в том, что соединять программы, написанные на разных япах — это занятие для людей с крепкими нервами и свободным временем, и для одной функции просто не окупается. Ещё причина в том, что программы не модульны. Причём это истинно и практически для всех &lt;strong&gt;современных&lt;/strong&gt; япов. Ку-ку.</description>
  <comments>https://beroal.livejournal.com/79104.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>экономика</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/78966.html</guid>
  <pubDate>Thu, 27 Feb 2020 15:05:57 GMT</pubDate>
  <title>This is what you get for using PHP</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/78966.html</link>
  <description>I want to save this post for history. &lt;a href=&quot;https://cs.stackexchange.com/questions/118536/which-language-do-php-haters-actually-want-expect-me-to-use-and-why-do-they-d&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;This was a question on Computer Science Stack Exchange&lt;/a&gt;, and it was deleted, but it is still an opinion and experience of a living programmer.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;strong&gt;Which language do &quot;PHP haters&quot; actually want/expect me to use, and why do they dislike PHP so much? [closed]&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Using PHP for 20+ years has been a nightmare. Not because of the language itself, which is of course very far from perfect in itself (like everything else in this world), but because of the &lt;strong&gt;&lt;em&gt;constant harassments from holier-than-thou non-PHP programmers&lt;/em&gt;&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;When I say &quot;constant harassments&quot;, I&apos;m not making an exaggeration. Every single time I have asked for help, or even just mentioned PHP, I&apos;ve been instantly bombarded with insults from people who seem to ignore everything else I said and only see the string &quot;PHP&quot; in the question/message, which turns them into &quot;bulls that see red&quot; and attack me. This has even happened countless times &lt;strong&gt;in PHP forums/chat rooms&lt;/strong&gt;!&lt;br /&gt;&lt;br /&gt;I really &lt;em&gt;wish&lt;/em&gt; I were making this up.&lt;br /&gt;&lt;br /&gt;The stark contrast between my own actual experience of using the language, and these violently aggressive PHP haters&apos; apparent views of the language, has confused and frustrated me for many years. In later years, it has become so obnoxious that I just stop reading or block the people who do this instantly when I see it. I can&apos;t deal with hearing it over and over and over again.&lt;br /&gt;&lt;br /&gt;When I did ask them what they meant, they would always link to some blog posts by &quot;some dude&quot; which apparently is the &lt;em&gt;Ultimate Authority of Truth&lt;/em&gt;, talking about how PHP is a &quot;fractal of bad design&quot;.&lt;br /&gt;&lt;br /&gt;I&apos;ve countless times asked them in a very serious and kind manner to please give me at least one alternative which is better. Every time, they either go completely quiet, or mumble something bout Python, Perl, C, Ruby on Rails, Java or some .NET stuff.&lt;br /&gt;&lt;br /&gt;In the latter case, I always point out things like how Python has a huge internal &quot;civil war&quot; between generation 2 and 3, which break existing code completely. In fact, I&apos;ve heard from reliable sources that even sub-versions of Python &lt;strong&gt;&lt;em&gt;change the argument orders around&lt;/em&gt;&lt;/strong&gt;, which is (to me) something that would never be done in PHP or anywhere else, because it&apos;s obviously a massive security risk on top of breaking existing code.&lt;br /&gt;&lt;br /&gt;I have actually spent significant time trying to research and look into the other languages. Every time, I&apos;m annoyed by the awful documentation, lack of support/libraries, in-fighting, etc. The PHP website itself seems to have largely been designed in a manner compatible with me, even if many manual pages and user comments (not to mention the search feature) leave a lot to be desired. However, compared to the so-called &quot;alternatives&quot;, it&apos;s more than acceptable to deal with.&lt;br /&gt;&lt;br /&gt;I wouldn&apos;t dream of calling PHP perfect. I never interact directly with PHP&apos;s standard library functions, for example; I have them all wrapped into my own functions which abstract away everything which I consider madness, so that my application code looks beautiful according to my standards. &lt;strong&gt;&lt;em&gt;However&lt;/em&gt;&lt;/strong&gt;, this isn&apos;t about PHP being &quot;perfect&quot;. It&apos;s about how there&apos;s this massive hate for this particular programming language which, to me, seems almost completely unfounded if you consider the alternatives.&lt;br /&gt;&lt;br /&gt;Why aren&apos;t they doing the same about the other languages? That&apos;s what I don&apos;t get. Why specifically PHP?&lt;br /&gt;&lt;br /&gt;Even here on StackSites, I very often get surly, condescending comments on my questions saying things along the lines of:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Yeah, what do you expect when you&apos;re using PHP? You can&apos;t expect anything but trash libraries from a trash language.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Or:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Maybe you shouldn&apos;t be using a language known for being the worst on the planet if you expect security. Just saying.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Always the same thing. I wonder if they have actually used PHP themselves, and if they have, they probably are not using it correctly. Or maybe they assume that I&apos;m not using it correctly just because there are oceans of horrific PHP code online? But through that logic, everyone using the English language would be made fun of by the same people since there are a lot of stupid people in the world who use English (poorly) to communicate. Yet that doesn&apos;t ever happen. Nobody comments in Spanish:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Maybe you shouldn&apos;t be using English to ask questions if you expect to get intelligent answers. Just saying.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;There is clearly something I&apos;m missing. The PHP developers must have really pissed people off in the past or something. I guess there were early design decisions which weren&apos;t really thought through, but having semi-recently watched a video by the creator of the language, Rasmus, where he talks about how it evolved, it makes more than sense to me.&lt;br /&gt;&lt;br /&gt;Let&apos;s put it this way: in the year 2000, I could never have come up with a language as well designed/structured as PHP was at that point. And that&apos;s almost 20 years ago. Even today, I wouldn&apos;t have the faintest clue on how to make one, at least not in any meaningful sense. Nor do I have any desire to. It was clearly not made by a bunch of stupid people, that&apos;s for sure. Making a programming/scripting language at all takes a lot of knowledge.&lt;br /&gt;&lt;br /&gt;Either all these &quot;haters&quot; (I don&apos;t like that term, but it seems suitable in this case) are all true geniuses, or perhaps the exact opposite.&lt;br /&gt;&lt;br /&gt;I use PHP primarily in the &quot;CLI&quot; mode these days. I have coded what I consider a very neat little system which allows me to do just about anything I can imagine by launching sub-processes to do many things at once, etc. Maybe this is not the typical use of the language, but I have so far never had a single case where PHP &quot;calculated the wrong number&quot;, was &quot;too slow&quot;, &quot;leaked memory which crippled my machine&quot; or anything like that. In the cases where there are issues, it&apos;s almost always my own fault.&lt;br /&gt;&lt;br /&gt;A recent exception is that PHP 7.4.0 appears to have not been tested properly as it broke a couple of things (due to complex internal bugs -- not random changes of the user-facing functions), but that has happened in the past with versions ending with .0, so I&apos;m going to avoid those from now on. It&apos;s definitely not on par with Python&apos;s re-arrangements of argument orders, that&apos;s for sure!&lt;br /&gt;&lt;br /&gt;PHP is not the only language I&apos;ve ever dealt with. Compared to the alleged alternatives, it seems to me to be more than sane. Still, I would never dream of calling other languages &quot;absolute trash&quot; and whatnot. You are all extremely free to not use PHP, and in fact, I like that not everyone uses the exact same environment, for several reasons. But kindly stop harassing me for doing so, or at least use real arguments that correspond to some kind of logic/reality and not just the blind PHP hate based on (seemingly) nothing.&lt;br /&gt;&lt;br /&gt;This becomes even more problematic since I don&apos;t exactly &lt;strong&gt;&lt;em&gt;love&lt;/em&gt;&lt;/strong&gt; PHP myself; I&apos;m often annoyed by various things in it. I&apos;m not trying to be some sort of &quot;PHP cheerleader&quot;, but I&apos;ve slowly kind of turned into one simply due to all the blind hate towards it. It&apos;s like defending a bullied kid in school or something.&lt;br /&gt;&lt;br /&gt;I don&apos;t get it, and I don&apos;t think I&apos;ll ever understand why this particular language is so hated yet seems to be the most practical and supported one for a whole wide range of uses. Obviously I&apos;m not talking about native GUI software or highly embedded microcontrollers and stuff like that, but I would not hesitate to run my own PHP framework/library on the master computer in my huge company to perform all the important work and calculations, and I doubt that anyone could give a reason why that would be &quot;stupid&quot; or &quot;impossible&quot; other than possibly some kind of legal requirement of having to use certain &quot;certified&quot; languages.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;I hope that this is the right StackSite to ask this on.&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;My take on this follows. Not only PHP is not perfect, it is probably the &lt;strong&gt;least perfect&lt;/strong&gt;, so to speak, PL in the world. I thank God every day that I do not use PHP. It got its popularity due to a socio-economic reason: settling in a rapidly expanding niche. It is a flamboyant example of the degradation of IT industry. (Another one is Node.js.) No wonder it irritates people. This is what you get for making a wrong choice.&lt;br /&gt;&lt;br /&gt;A comparison of PLs and natural languages made me wonder. Will this “multiculturalism” thing be implemented in IT? I mean, critiquing a PL or “technology” will be frowned upon like critiquing a culture is. Just because it is a culture.&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>https://beroal.livejournal.com/78966.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>linguistics</category>
  <category>fun</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/78807.html</guid>
  <pubDate>Sat, 16 Nov 2019 13:35:48 GMT</pubDate>
  <title>Linux system call speedup</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/78807.html</link>
  <description>Trying to measure the overhead cost of Linux system calls, I got the following strange result:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&amp;gt;./syscall.x
getting time time, ns: 30
syscall time, ns: 740 180 170 170 160 160 160 160 160 160 170 160 160 160 160 160 170 160 160 160 170 160 160 160 170 160 160 160 170 160 160 160 160 160 160 160 160 160 160 160 160 170 160 160 160 170 160 160 160 170 160 160 160 160 160 160 170 160 160 160 170 160 160 160&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The source code of &lt;code&gt;syscall.x&lt;/code&gt; is below. First, the program measures the time cost of obtaining time with &lt;code&gt;get_time_number&lt;/code&gt;. If &lt;code&gt;clock_gettime&lt;/code&gt; reads time from a special memory page (which I am not sure about), this will also bring that page into caches. Before measuring, check with &lt;code&gt;strace -c ./syscall.x&lt;/code&gt; that the program indeed &lt;strong&gt;does not make any time-related system calls&lt;/strong&gt;. Time obtained with a system call would be too imprecise. So, “getting time time” is the time per one call to &lt;code&gt;get_time_number&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Then the program measures the time cost of the system call &lt;code&gt;close&lt;/code&gt; with a non-existent file descriptor. I guess that checking a file descriptor should not take much time, so most time is spent in switching kernel and user contexts. Every number on the line “syscall time” is the time per one system call. The strange thing is that the first system call takes 4 times more than subsequent system calls. Is it a processor optimization or a measurement error?&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;time.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;

#define CALL_TIME_N (1&amp;lt;&amp;lt;4)

unsigned long get_time_number(void) {
    struct timespec timespec0;
    if (clock_gettime(CLOCK_MONOTONIC, &amp;timespec0) != 0) exit(17);
    return 1000000000 * (unsigned long)timespec0.tv_sec
        + (unsigned long)timespec0.tv_nsec;
}

int main() {
    int i;
    {
        unsigned long t0 = get_time_number();
        for (i = CALL_TIME_N; i-- != 0;) {
            get_time_number();
            get_time_number();
            get_time_number();
            get_time_number();
            get_time_number();
            get_time_number();
            get_time_number();
            get_time_number();
        }
        printf(&quot;getting time time, ns: %lu\n&quot;,
               (get_time_number() - t0) / ((1&amp;lt;&amp;lt;3) * CALL_TIME_N));
    }
    printf(&quot;syscall time, ns:&quot;);
    for (i = 1&amp;lt;&amp;lt;6; i-- != 0;) {
        unsigned long t0 = get_time_number();
        close(7892098);
        printf(&quot; %lu&quot;, get_time_number() - t0);
    }
    printf(&quot;\n&quot;);
    return 0;
}&lt;/code&gt;&lt;/pre&gt;&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>https://beroal.livejournal.com/78807.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>linux</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/78353.html</guid>
  <pubDate>Mon, 14 Oct 2019 21:38:43 GMT</pubDate>
  <title>more medieval logic in contemporary education: Microsoft</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/78353.html</link>
  <description>In &lt;a href=&quot;https://www.edx.org/course/logic-and-computational-thinking-5&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;the course “DEV262x Logic and Computational Thinking”&lt;/a&gt; from Microsoft, students learn categorical syllogisms. How cute. I mean, Microsoft should know better.&lt;br /&gt;&lt;blockquote&gt;Forms of Categorical Syllogisms&lt;br /&gt;&lt;br /&gt;During the Middle Ages, logicians assigned Latin names to the fifteen forms of syllogism first proved valid by Aristotle. These syllogisms were arranged into four groups known as “figures.” The exact logical form for a syllogism is specified by giving the type (A, E, I, or O) for each sentence followed by the number of the syllogism’s figure.&lt;/blockquote&gt;</description>
  <comments>https://beroal.livejournal.com/78353.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>mathematics</category>
  <category>education</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/78295.html</guid>
  <pubDate>Fri, 23 Aug 2019 07:40:59 GMT</pubDate>
  <title>logic in France</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/78295.html</link>
  <description>&lt;blockquote&gt;In France, the discipline of logic has traditionally been ignored in university-level scientific studies. This follows, undoubtedly, from the recent history of mathe­matics in our country which was dominated, for a long while, by the Bourbaki school for whom logic was not, as we know, a strong point.&lt;/blockquote&gt;&lt;br /&gt;Krivine, Jean-Louis. Foreword. &lt;em&gt;Mathematical Logic: A Course with Exercises.&lt;/em&gt; By René Cori and Daniel Lascar. Trans. Donald H. Pelletier. Oxford: Oxford UP, 2000. Print.&lt;br /&gt;&lt;br /&gt;First published in French as &lt;em&gt;Logique mathématique&lt;/em&gt;&lt;br /&gt;© Masson, Editeur, Paris, 1993</description>
  <comments>https://beroal.livejournal.com/78295.html?view=comments#comments</comments>
  <category>mathematics</category>
  <category>education</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/77938.html</guid>
  <pubDate>Fri, 28 Jun 2019 18:26:49 GMT</pubDate>
  <title>An invitation to Secure Scuttlebutt (SSB)</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/77938.html</link>
  <description>I invite you to Secure Scuttlebutt (SSB), a serverless social network, where nobody can deprive you of the access to the network or delete your information and only you decide who to read and what to retransmit.&lt;br /&gt;&lt;br /&gt;Unfortunately, the part “only you decide who to read” works the opposite way: people will not read you until they know about you. This is the reason few people read novices in the network. I can help you: I will read you and retransmit your information. If you are interested, follow the guide below.&lt;br /&gt;&lt;br /&gt;Install a SSB program from the list on the &lt;a href=&quot;https://www.scuttlebutt.nz/applications&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Applications page&lt;/a&gt;. I use Patchbay. Many use Patchwork. Before using the program, I recommend to tune it as I describe below, though it is not required.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Decrease the option “friends.hops” in your configuration file “~/.ssb/config” to 2. (You can change the configuration file in Patchbay right after starting it by clicking “Edit config”. If the configuration file is absent or consist only of curly brackets, set its contents to “{&quot;friends&quot;: {&quot;hops&quot;: 2}}” without curved quotation marks.) If this number is greater than 2, you will download humongous amount of information right after following the first person and regularly thereafter. Such downloads can even make your SSB program unresponsive for minutes, not mentioning that nobody is able to read all that information.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Enable the option “Show my posts on public viewers” in your profile. An example of a public viewer is &lt;a href=&quot;https://viewer.scuttlebot.io/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;viewer.scuttlebot.io&lt;/a&gt; which shows information from SSB on the web. This way you will promote your SSB identity and SSB as a whole.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ask me via any private channel for an invite. You can ask via any of &lt;a href=&quot;http://www.beroal.in.ua/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;my accounts&lt;/a&gt;. An invite is a special text. Enter the invite into your SSB program. In  Patchbay, the field for invite is on the page “/network”. Or see how to enter an invite on the &lt;a href=&quot;https://www.scuttlebutt.nz/getting-started#remotely&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Getting Started page&lt;/a&gt;. After entering my invite, we will follow each other, you will receive posts from people followed by me, and I will receive your posts. Of course, you can also enter other people’s invites and more than one invite.&lt;br /&gt;&lt;br /&gt;Fill out your personal profile. In Patchbay, your profile is on the page “/profile”. Read more about SSB on &lt;a href=&quot;https://www.scuttlebutt.nz/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;their website&lt;/a&gt; or ask me or on SSB.&lt;a name=&apos;cutid1-end&apos;&gt;&lt;/a&gt;</description>
  <comments>https://beroal.livejournal.com/77938.html?view=comments#comments</comments>
  <category>english</category>
  <category>социальная сеть</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/77642.html</guid>
  <pubDate>Thu, 11 Oct 2018 11:39:06 GMT</pubDate>
  <title>Diaspora* опять</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/77642.html</link>
  <description>Некоторое время я использую Diaspora*, и активность там, похоже, растёт. Некоторые её фичи меня не устраивают, но на ближайшее время сойдёт. &lt;a href=&quot;https://freehuman.fr/people/348291c0f74c013372ea0074e6d24306&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;Мой профиль.&lt;/a&gt;</description>
  <comments>https://beroal.livejournal.com/77642.html?view=comments#comments</comments>
  <category>социальная сеть</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/77458.html</guid>
  <pubDate>Thu, 11 Oct 2018 11:34:59 GMT</pubDate>
  <title>МФА как международная письменность</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/77458.html</link>
  <description>Пример. Читаю про языки Индии в английской Википедии, и встречаю письменность под названием «Devanāgarī». Это название написано явно не на английском, потому что буквы «ā» в английском алфавите нет, да и «na» по правилам английского языка должно читаться «neɪ», а читается «nɑː». Имеем какой-то способ записи индийской речи на основе латиницы. Другой пример: ромадзи — способ записи японской речи на основе латиницы. Но у нас уже есть способ записи разной речи на основе латиницы — международный фонетический алфавит. ☺ Легче выучить один алфавит, чем по алфавиту для каждого языка. МФА также упростит транскрипцию иностранных слов. Сейчас для каждой пары языков X и Y выдумали или надо выдумать транскрипцию из X в Y. С МФА достаточно для каждого языка X выдумать транскрипцию из МФА в X. Транскрипцию из X в МФА выдумывать не надо, потому что МФА будет &lt;strong&gt;включать&lt;/strong&gt; X. Ну, а транскрипция из МФА в X нужна, к сожалению, так как носители языка X не все звуки способны произносить.&lt;br /&gt;&lt;br /&gt;Кто-то скажет: «Зачем нам ещё один язык, если у нас уже есть английский?» Извините, но английский на роль фонетической письменности совершенно не годится. Попытки записывать произношение на английском языке есть по понятным причинам, но они вызывают только смех сквозь слёзы. Например, в учебнике по Юникоду та же «Devanāgarī» называется «deh-vuh-NAH-guh-ree». Нах! ☺</description>
  <comments>https://beroal.livejournal.com/77458.html?view=comments#comments</comments>
  <category>linguistics</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/77083.html</guid>
  <pubDate>Mon, 03 Sep 2018 16:46:24 GMT</pubDate>
  <title>телефонный спам</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/77083.html</link>
  <description>Всё, что не модерируется, скоро зарастёт спамом. Включая телефонную связь. Как вы думаете, для телефонов сделают спам-фильтры, или люди просто перестанут пользоваться телефонами?</description>
  <comments>https://beroal.livejournal.com/77083.html?view=comments#comments</comments>
  <category>интерфейс пользователя</category>
  <category>экономика</category>
  <lj:security>public</lj:security>
  <lj:reply-count>8</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/77023.html</guid>
  <pubDate>Mon, 03 Sep 2018 03:42:23 GMT</pubDate>
  <title>information search</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/77023.html</link>
  <description>A little prediction. People will move information search from Google to social networks so they can filter search results according to their preferences. Google will be useful only for search queries that return a small number of results due to its big database. Consequently, Google will concentrate on information preservation and abandon complex rating algorithms.</description>
  <comments>https://beroal.livejournal.com/77023.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>экономика</category>
  <category>english</category>
  <category>социальная сеть</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/76579.html</guid>
  <pubDate>Sun, 22 Jul 2018 12:45:10 GMT</pubDate>
  <title>Java precisely</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/76579.html</link>
  <description>Вышло новое издание книги &lt;a href=&quot;https://www.itu.dk/~sestoft/javaprecisely/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;«Java precisely» by Sestoft&lt;/a&gt;. Теперь я могу быть свободен от невнятных объяснений на пальцах. ☺ &lt;a href=&quot;https://beroal.livejournal.com/53480.html&quot; target=&quot;_blank&quot;&gt;Предыдущий пост.&lt;/a&gt;</description>
  <comments>https://beroal.livejournal.com/76579.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>education</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/76471.html</guid>
  <pubDate>Tue, 17 Jul 2018 04:20:12 GMT</pubDate>
  <title>пожертвуй бизнесмену</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/76471.html</link>
  <description>Люди предлагают бесплатную услугу в интернете и просят пожертвовать на неё. Видимо, сейчас совсем плохо учат экономическую теорию. Не знают, что за услугу можно просто требовать деньги. ☺</description>
  <comments>https://beroal.livejournal.com/76471.html?view=comments#comments</comments>
  <category>экономика</category>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
  </item>
  <item>
  <guid isPermaLink='true'>https://beroal.livejournal.com/76225.html</guid>
  <pubDate>Tue, 03 Jul 2018 06:02:32 GMT</pubDate>
  <title>safe programming language</title>
  <author>beroal</author>
  <link>https://beroal.livejournal.com/76225.html</link>
  <description>Safe programming languages are gaining popularity. I wonder what is the &lt;strong&gt;formal definition&lt;/strong&gt; of safe PL. For example, C is not safe, but Java is safe. I suspect that the property “safe” should be applied to a PL implementation rather than to the PL itself. If so, let’s discuss a definition of safe PL implementation. My own attempts to formalize this notion led to a strange outcome, so I would like to hear other opinions. Please, do not say that every PL has unsafe commands. We can always take a safe subset.&lt;br /&gt;&lt;br /&gt;My definition of safe PL implementation refers to the notion of multithreading which I will not define here. Informally, a PL implementation is safe if it does not spoil the execution of other threads. A PL implementation &lt;code&gt;impl&lt;/code&gt; is safe iff for any two threads &lt;code&gt;thread_0&lt;/code&gt; and &lt;code&gt;thread_1&lt;/code&gt; such that &lt;code&gt;thread_0&lt;/code&gt; runs &lt;code&gt;impl&lt;/code&gt;, the real semantics of &lt;code&gt;thread_1&lt;/code&gt; is equal to its official semantics. By the official semantics of &lt;code&gt;thread_1&lt;/code&gt;, I mean the semantics of the program that &lt;code&gt;thread_1&lt;/code&gt; runs according to the semantics of the PL in which that program is written. By the real semantics, I mean the behavior of &lt;code&gt;thread_1&lt;/code&gt; as it runs along &lt;code&gt;thread_0&lt;/code&gt;. The real semantics may differ from the official semantics because of &lt;code&gt;thread_0&lt;/code&gt; interfering with &lt;code&gt;thread_1&lt;/code&gt;, for example, writing to the memory region belonging to &lt;code&gt;thread_1&lt;/code&gt;. As usual, semantics does not include running time or memory consumption.</description>
  <comments>https://beroal.livejournal.com/76225.html?view=comments#comments</comments>
  <category>computer science</category>
  <category>термин</category>
  <category>english</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
  </item>
</channel>
</rss>
