<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Shaka</title><link>https://shakaxi.github.io/posts/</link><description>Recent content in Posts on Shaka</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 06 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://shakaxi.github.io/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Installation of ArchLinux</title><link>https://shakaxi.github.io/posts/arch_inst/</link><pubDate>Tue, 06 Oct 2026 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/arch_inst/</guid><description>&lt;p&gt;&#10;This post aims to record the installation procedure of ArchLinux on my notebook, Thinkpad X1 Carbon (x1c) 2018, i.e., 6th generation.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Preparition&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Download the installation image from the nearest mirror.&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Burn the image into a USB stick.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dd &lt;span style="color:#cf222e"&gt;if&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;/path/to/image/ &lt;span style="color:#953800"&gt;of&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;/dev/sdb &lt;span style="color:#953800"&gt;status&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;progress &lt;span style="color:#953800"&gt;bs&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;10M&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;The notebook has Windows 10 installed with &lt;code class="verbatim"&gt;快速启动&lt;/code&gt; enabled. Therefore, it needs to be disabled before the installation. Uncheck the option of &lt;code class="verbatim"&gt;控制面板 -&amp;gt; 硬件和声音 -&amp;gt; 电源选项 -&amp;gt; 选择电源按钮的功能 -&amp;gt; 更改当前不可用的设置 -&amp;gt; 启用快速启动（推荐）&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Boot&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Power on the notebook.&lt;/li&gt;&#10;&lt;li&gt;Press &lt;code class="verbatim"&gt;Enter&lt;/code&gt; and &lt;code class="verbatim"&gt;F1&lt;/code&gt; to enter the BIOS configuration.&lt;/li&gt;&#10;&lt;li&gt;Disable the &lt;code class="verbatim"&gt;Security -&amp;gt; Secure Boot&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Enable &lt;code class="verbatim"&gt;Config -&amp;gt; Thunderbolt BIOS Assist Mode&lt;/code&gt;. This will significantly reduce the power consumption of CPU wakeups&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;&#10;&lt;li&gt;Insert the prepared USB and press &lt;code class="verbatim"&gt;F10&lt;/code&gt; to save the change and reboot the notebook.&lt;/li&gt;&#10;&lt;li&gt;Press &lt;code class="verbatim"&gt;Enter&lt;/code&gt; and &lt;code class="verbatim"&gt;F12&lt;/code&gt; to temporarily boot from the prepared USB stick.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Partition&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;For UEFI booting, a dedicated EFI system partition (ESP) is mandatory. EFI bootloaders, applications and drivers can be stored in an ESP and lauched by the UEFI firmware at the boot stage. In other words, it is completely independent of OS. Considering the potential support of dual-boot in the futher, I prepare a 1 GB partition for ESP. Accordingly, I created a primary partition (&lt;code class="verbatim"&gt;/dev/nvme0n1p1&lt;/code&gt;) of partion type &lt;code class="verbatim"&gt;EFI System&lt;/code&gt;. Taking &lt;code class="verbatim"&gt;fdisk&lt;/code&gt; for instance, the type can be selected by alias &lt;code class="verbatim"&gt;uefi&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;In addition, I created two &lt;code class="verbatim"&gt;ext4&lt;/code&gt; partitions for &lt;code class="verbatim"&gt;/&lt;/code&gt; and &lt;code class="verbatim"&gt;/home&lt;/code&gt; respectively.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Format the partitions&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mkfs.fat -F &lt;span style="color:#0550ae"&gt;32&lt;/span&gt; /dev/nvme0n1p1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mkfs.ext4 /dev/nvme0n1p2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mkfs.ext4 /dev/nvme0n1p3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;Mount the partitions&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mount /dev/nvme0n1p2 /mnt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mount --mkdir /dev/nvme0n1p1 /mnt/boot&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mount --mkdir /dev/nvme0n1p3 /mnt/home&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-3"&gt;&#10;&lt;h3 id="headline-7"&gt;&#10;Connect to the Internet&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; iwctl --passphrase PASSWORD station wlan0 connect-hidden SSID&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-3"&gt;&#10;&lt;h3 id="headline-8"&gt;&#10;Select the nearest mirror&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-3"&gt;&#10;&lt;p&gt;Edit &lt;code class="verbatim"&gt;/etc/pacman.d/mirrorlist&lt;/code&gt; as below.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Server&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; http://mirrors.aliyun.com/archlinux/&lt;span style="color:#953800"&gt;$repo&lt;/span&gt;/os/&lt;span style="color:#953800"&gt;$arch&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-3"&gt;&#10;&lt;h3 id="headline-9"&gt;&#10;Install the base system&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacstrap /mnt base&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-10" class="outline-3"&gt;&#10;&lt;h3 id="headline-10"&gt;&#10;Generate file system table&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-10" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;The resultant &lt;code class="verbatim"&gt;/etc/fstab&lt;/code&gt; looks&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Static information about the filesystems.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# See fstab(5) for details.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# &amp;lt;file system&amp;gt; &amp;lt;dir&amp;gt; &amp;lt;type&amp;gt; &amp;lt;options&amp;gt; &amp;lt;dump&amp;gt; &amp;lt;pass&amp;gt;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# /dev/nvme0n1p2 LABEL=OS&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;UUID&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;a2d1afa4-4a38-4849-a4e7-ab5a5c4dba8d&#9;/ &#9;ext4 &#9;rw,relatime&#9;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# /dev/nvme0n1p1 LABEL=ESP&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;UUID&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;019D-1686 &#9;/boot &#9;vfat &#9;rw,relatime,fmask&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;0022,dmask&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;0022,codepage&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;437,iocharset&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;ascii,shortname&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;mixed,utf8,errors&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;remount-ro&#9;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# /dev/nvme0n1p3 LABEL=DATA&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;UUID&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;386c4fbc-f1fd-4147-98bb-547867e762f5&#9;/home &#9;ext4 &#9;rw,relatime&#9;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-11" class="outline-3"&gt;&#10;&lt;h3 id="headline-11"&gt;&#10;Chroot into the newly installed system&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-11" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; arch-chroot -S /mnt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-12" class="outline-3"&gt;&#10;&lt;h3 id="headline-12"&gt;&#10;Host name&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-12" class="outline-text-3"&gt;&#10;&lt;p&gt;Create file &lt;code class="verbatim"&gt;/etc/hostname&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; notebook&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-13" class="outline-3"&gt;&#10;&lt;h3 id="headline-13"&gt;&#10;Time zone&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-13" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; hwclock --systohc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; systemctl &lt;span style="color:#6639ba"&gt;enable&lt;/span&gt; systemd-timesyncd.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-14" class="outline-3"&gt;&#10;&lt;h3 id="headline-14"&gt;&#10;Locale&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-14" class="outline-text-3"&gt;&#10;&lt;p&gt;Edit &lt;code class="verbatim"&gt;/etc/locale.gen&lt;/code&gt; and uncomment the following lines.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;en_US.UTF-8 UTF-8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;zh_CN.UTF-8 UTF-8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Generate and set locales.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;locale-gen&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#953800"&gt;LANG&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;en_US.UTF-8 &amp;gt; /etc/locale.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-15" class="outline-3"&gt;&#10;&lt;h3 id="headline-15"&gt;&#10;Kernel and microcode&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-15" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S linux linux-firmware intel-ucode&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-16" class="outline-3"&gt;&#10;&lt;h3 id="headline-16"&gt;&#10;Initramfs&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-16" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mkinitcpio -P&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-17" class="outline-3"&gt;&#10;&lt;h3 id="headline-17"&gt;&#10;CPU frequency scaling&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-17" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S cpupower&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; systemctl &lt;span style="color:#6639ba"&gt;enable&lt;/span&gt; cpupower.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-18" class="outline-3"&gt;&#10;&lt;h3 id="headline-18"&gt;&#10;Network&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-18" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S networkmanager&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; systemctl &lt;span style="color:#6639ba"&gt;enable&lt;/span&gt; NetworkManager.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-19" class="outline-3"&gt;&#10;&lt;h3 id="headline-19"&gt;&#10;Bootloader&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-19" class="outline-text-3"&gt;&#10;&lt;p&gt;I adopt &lt;code class="verbatim"&gt;systemd-boot&lt;/code&gt; as the UEFI boot manager, shipped with &lt;code class="verbatim"&gt;systemd&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-20" class="outline-4"&gt;&#10;&lt;h4 id="headline-20"&gt;&#10;Installation&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-20" class="outline-text-4"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bootctl install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-21" class="outline-4"&gt;&#10;&lt;h4 id="headline-21"&gt;&#10;Configuration&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-21" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;/boot/loader/loader.conf&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; default arch.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; timeout &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;/boot/loader/entries/arch.conf&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; title&#9;Arch Linux&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; linux&#9;/vmlinuz-linux&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; initrd&#9;/intel-ucode.img&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; initrd&#9;/initramfs-linux.img&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; options&#9;&lt;span style="color:#953800"&gt;root&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#953800"&gt;UUID&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;a2d1afa4-4a38-4849-a4e7-ab5a5c4dba8d rw&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;/boot/loader/entries/arch-fallback.conf&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; title&#9;Arch Linux &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;fallback&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; linux&#9;/vmlinuz-linux&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; initrd&#9;/intel-ucode.img&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; initrd&#9;/initramfs-linux-fallback.img&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; options&#9;&lt;span style="color:#953800"&gt;root&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#953800"&gt;UUID&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;a2d1afa4-4a38-4849-a4e7-ab5a5c4dba8d rw&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-22" class="outline-3"&gt;&#10;&lt;h3 id="headline-22"&gt;&#10;Password for root&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-22" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; passwd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-23" class="outline-3"&gt;&#10;&lt;h3 id="headline-23"&gt;&#10;Unmount and reboot&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-23" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;exit&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; umount -R /mnt&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; reboot&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Python - UV</title><link>https://shakaxi.github.io/posts/python_uv/</link><pubDate>Sat, 15 Aug 2026 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_uv/</guid><description>&lt;p&gt;&#10;As another tool for Python, &lt;code class="verbatim"&gt;uv&lt;/code&gt; is written by rust and provides integrated experience, e.g.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;interpretor management (by &lt;code class="verbatim"&gt;uv python&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;virtual environment manangement (by &lt;code class="verbatim"&gt;uv venv&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;package management (by &lt;code class="verbatim"&gt;uv pip&lt;/code&gt;)&lt;/li&gt;&#10;&lt;li&gt;project management (by &lt;code class="verbatim"&gt;uv init/add/lock/sync&lt;/code&gt;)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;In Archlinux, &lt;code class="verbatim"&gt;uv&lt;/code&gt; can be easily installed by pacman, i.e.,&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S uv&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Its usage can be summarized as follows. Note that, if a virtual environment has already activated, then the argument &lt;code class="verbatim"&gt;--python /PATH/TO/ENVIRONMENT&lt;/code&gt; below can be omitted.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Python interpretor management&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;List the interpretors.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; uv python list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Install an interpretor.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; uv python install x.y&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;.z&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Linux - Hyprland</title><link>https://shakaxi.github.io/posts/hyprland/</link><pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/hyprland/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;a href="https://hyprland.org"&gt;Hyprland&lt;/a&gt; is a dynamic tiling compositor based on wlroot. Compared to &lt;a href="sway.html"&gt;sway&lt;/a&gt;, hyprland provides better experience and easy configuration. What is exciting, its development is much active.&lt;/p&gt;&#10;&lt;p&gt;&#10;Hyprland&amp;#39;s core components and necessary applications can be simply installed and configured, e.g.,&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;hyprland&lt;/code&gt;: core components&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;foot&lt;/code&gt;: a native terminal in wayland&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;fuzzel&lt;/code&gt;: an application launcher&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;light&lt;/code&gt;: a backlight controller&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;swaync&lt;/code&gt;: a notification utility&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;grim&lt;/code&gt;: a screenshot utility&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;slurp&lt;/code&gt;: a region selection utility in wayland&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;swaybg&lt;/code&gt;: a background setting utility&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;swaylock&lt;/code&gt;: a utility to lock screen&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;wdisplays&lt;/code&gt;: an arandr counterpart in wayland&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;waybar&lt;/code&gt;: a bar utility in wayland&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;ttf-font-awesome&lt;/code&gt;: a font to display icons in waybar&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;xdg-desktop-portal-hyprland&lt;/code&gt;: XDG desktop handler enabling D-Bus based communication for other applications&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;qt5-wayland/qt6-wayland&lt;/code&gt;: Wayland support for QT&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S hyprland waybar foot fuzzel swaybg swaylock light grim slurp ttf-font-awesome qt5-wayland qt6-wayland blueman network-manager-applet pipewire wireplumber xdg-desktop-portal-hyprland xdg-desktop-portal-gtk&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;p&gt;By default, all the configuration files are stored in directory &lt;code class="verbatim"&gt;~/.config/hypr&lt;/code&gt;.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;~/.config/hypr/hyprland.conf&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;########################################################################################&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; AUTOGENERATED HYPR CONFIG.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;########################################################################################&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Please note not all available settings / options are set here.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# For a full list, see the wiki&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# autogenerated = 1 # remove this line to remove the warning&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# See https://wiki.hyprland.org/Configuring/Monitors/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# monitor=name,resolution,position,scale&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;monitor&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;eDP-1,disable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;monitor&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;DP-1,preferred,auto,2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# See https://wiki.hyprland.org/Configuring/Keywords/ for more&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Execute your favorite apps at launch&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; exec-once &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; waybar --config ~/.config/hypr/waybar/config --style ~/.config/hypr/waybar/style.css&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; exec-once &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; swaybg -i /usr/share/backgrounds/archlinux/small.png&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; exec-once &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; swaync --config ~/.config/hypr/swaync.json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; exec-once &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; fcitx5 -D&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; exec-once &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; nm-applet&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; exec-once &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; blueman-applet&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; exec-once &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; /usr/lib/polkit-kde-authentication-agent-1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Source a file (multi-file configs)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;source&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; ~/.config/hypr/bind.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;source&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; ~/.config/hypr/env.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Window rules&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;windowrulev2&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; opacity 0.3, floating:1, class:foot&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; misc &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;disable_hyprland_logo&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;disable_splash_rendering&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;focus_on_activate&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# For all categories, see https://wiki.hyprland.org/Configuring/Variables/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; input &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;kb_layout&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; us&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;kb_variant&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;kb_model&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;kb_options&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; caps:ctrl_modifier&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;kb_rules&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;repeat_rate&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;60&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;repeat_delay&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;300&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;follow_mouse&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; touchpad &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;natural_scroll&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;disable_while_typing&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;sensitivity&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#57606a"&gt;# -1.0 - 1.0, 0 means no modification.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; general &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# See https://wiki.hyprland.org/Configuring/Variables/ for more&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;gaps_in&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;gaps_out&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;border_size&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; col.active_border &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; rgba&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;33ccffee&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; rgba&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;00ff99ee&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; 45deg&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; col.inactive_border &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; rgba&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;595959aa&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;layout&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; dwindle&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; decoration &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# See https://wiki.hyprland.org/Configuring/Variables/ for more&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;rounding&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;9&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;drop_shadow&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;shadow_range&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;shadow_render_power&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; col.shadow &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; rgba&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;1a1a1aee&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; animations &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;enabled&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;bezier&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; myBezier, 0.05, 0.9, 0.1, 1.05&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;animation&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; windows, 1, 8, default&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;animation&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; windowsOut, 1, 8, default, slide&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;animation&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; border, 1, 10, default&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;animation&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; borderangle, 1, 8, default&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;animation&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; fade, 1, 8, default&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;animation&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; workspaces, 1, 8, default, fade&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dwindle &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;pseudotile&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; yes &lt;span style="color:#57606a"&gt;# master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;preserve_split&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; yes &lt;span style="color:#57606a"&gt;# you probably want this&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; master &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;new_is_master&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; gestures &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# See https://wiki.hyprland.org/Configuring/Variables/ for more&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;workspace_swipe&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; off&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Example per-device config&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; device:epic-mouse-v1 &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;sensitivity&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; -0.5&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;~/.config/hypr/bind.conf&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# See https://wiki.hyprland.org/Configuring/Keywords/ for more&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; SUPER&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, Q, killactive&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt; SHIFT, SPACE, togglefloating&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, E, togglesplit &lt;span style="color:#57606a"&gt;# dwindle&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, T, toggleopaque&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, F, fullscreen&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, Return, exec, foot --config ~/.config/hypr/foot.ini&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, D, exec, fuzzel --config ~/.config/hypr/fuzzel.ini&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , Print, exec, grim &lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;date +&lt;span style="color:#0a3069"&gt;&amp;#39;%Y%m%d-%H%M%S.png&amp;#39;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; SHIFT, Print, exec, grim -g &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;slurp&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;date +&lt;span style="color:#0a3069"&gt;&amp;#39;%Y%m%d-%H%M%S.png&amp;#39;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Move focus&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, O, cyclenext&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, left, movefocus, l&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, right, movefocus, r&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, up, movefocus, u&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, down, movefocus, d&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Switch workspaces&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, 1, workspace, &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, 2, workspace, &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, 3, workspace, &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, 4, workspace, &lt;span style="color:#0550ae"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, 5, workspace, &lt;span style="color:#0550ae"&gt;5&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, 6, workspace, &lt;span style="color:#0550ae"&gt;6&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, 7, workspace, &lt;span style="color:#0550ae"&gt;7&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, 8, workspace, &lt;span style="color:#0550ae"&gt;8&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, 9, workspace, &lt;span style="color:#0550ae"&gt;9&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Move active window to a workspace&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt; SHIFT, 1, movetoworkspacesilent, &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt; SHIFT, 2, movetoworkspacesilent, &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt; SHIFT, 3, movetoworkspacesilent, &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt; SHIFT, 4, movetoworkspacesilent, &lt;span style="color:#0550ae"&gt;4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt; SHIFT, 5, movetoworkspacesilent, &lt;span style="color:#0550ae"&gt;5&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt; SHIFT, 6, movetoworkspacesilent, &lt;span style="color:#0550ae"&gt;6&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt; SHIFT, 7, movetoworkspacesilent, &lt;span style="color:#0550ae"&gt;7&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt; SHIFT, 8, movetoworkspacesilent, &lt;span style="color:#0550ae"&gt;8&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt; SHIFT, 9, movetoworkspacesilent, &lt;span style="color:#0550ae"&gt;9&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Move/resize windows&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt; SHIFT, R, submap, resize_window&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;submap&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; resize_window&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;binde&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , right, resizeactive, &lt;span style="color:#0550ae"&gt;10&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;binde&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , left, resizeactive, -10 &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;binde&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , up, resizeactive, &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; -10&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;binde&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , down, resizeactive, &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#0550ae"&gt;10&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , escape, submap, reset&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;submap&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; reset&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;bindm&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, mouse:272, movewindow&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;bindm&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt;, mouse:273, resizewindow&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Adjust volume&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;bindle&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5%&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;bindle&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5%&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;bindle&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;bindle&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Adjust Brightness&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;bindle&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , XF86MonBrightnessUp, exec, sudo light -A &lt;span style="color:#0550ae"&gt;5&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;bindle&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , XF86MonBrightnessDown, exec, sudo light -U &lt;span style="color:#0550ae"&gt;5&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# System submap: (E)xit, (H)alt, (R)eboot.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$mainMod&lt;/span&gt; SHIFT, E, submap, system&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;submap&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; system&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , E, &lt;span style="color:#6639ba"&gt;exit&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , L, exec, swaylock -i /usr/share/backgrounds/archlinux/small.png&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , H, exec, systemctl poweroff&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , R, exec, systemctl reboot&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;bind&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; , escape, submap, reset&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;submap&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; reset&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;~/.config/hypr/env.conf&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;env&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; LANG,en_US.UTF-8&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;env&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; XCURSOR_SIZE,32&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;env&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; GTK_IM_MODULE,fcitx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;env&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; QT_IM_MODULE,fcitx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;env&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; XMODIFIERS,@im&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;fcitx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;env&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; QT_QPA_PLATFORM,wayland&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;env&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; MOZ_ENABLE_WAYLAND,1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;env&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; XAPIAN_CJK_NGRAM,1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;env&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; EDITOR,/usr/bin/emacsclient -a &lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&lt;/span&gt; -t&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;env&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; LIBSEAT_BACKEND,logind&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;~/.config/hypr/foot.ini&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;main&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;font&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;JetBrains Mono:size&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;18&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;~/.config/hypr/fuzzel.ini&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;font&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;JetBrains Mono&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dpi-aware&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;auto&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;prompt&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34; &amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; icon-theme&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;Arc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; icons-enabled&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;fuzzy&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; show-actions&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;lines&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;9&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;width&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;60&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; vertical-pad&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; line-height&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;32&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;colors&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;background&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;fbf1c7ff&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;text&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;32302fff&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;match&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;ae6962ff&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;selection&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;d5c4a1ff&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; selection-text&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;282828ff&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;border&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;width&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;radius&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;12&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;~/.config/hypr/swaync.json&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#953800"&gt;$schema&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;/etc/xdg/swaync/configSchema.json&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;positionX&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;right&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;positionY&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;top&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;layer&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;overlay&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;control-center-layer&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;top&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;layer-shell&amp;#34;&lt;/span&gt;: true,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;cssPriority&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;application&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;control-center-margin-top&amp;#34;&lt;/span&gt;: 0,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;control-center-margin-bottom&amp;#34;&lt;/span&gt;: 0,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;control-center-margin-right&amp;#34;&lt;/span&gt;: 0,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;control-center-margin-left&amp;#34;&lt;/span&gt;: 0,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;notification-2fa-action&amp;#34;&lt;/span&gt;: true,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;notification-inline-replies&amp;#34;&lt;/span&gt;: false,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;notification-icon-size&amp;#34;&lt;/span&gt;: 64,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;notification-body-image-height&amp;#34;&lt;/span&gt;: 100,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;notification-body-image-width&amp;#34;&lt;/span&gt;: 200,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;timeout&amp;#34;&lt;/span&gt;: 10,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;timeout-low&amp;#34;&lt;/span&gt;: 5,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;timeout-critical&amp;#34;&lt;/span&gt;: 0,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;fit-to-screen&amp;#34;&lt;/span&gt;: true,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;control-center-width&amp;#34;&lt;/span&gt;: 500,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;control-center-height&amp;#34;&lt;/span&gt;: 600,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;notification-window-width&amp;#34;&lt;/span&gt;: 300,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;keyboard-shortcuts&amp;#34;&lt;/span&gt;: true,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;image-visibility&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;when-available&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;transition-time&amp;#34;&lt;/span&gt;: 200,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;hide-on-clear&amp;#34;&lt;/span&gt;: false,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;hide-on-action&amp;#34;&lt;/span&gt;: true,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;script-fail-notify&amp;#34;&lt;/span&gt;: true,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;scripts&amp;#34;&lt;/span&gt;: &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;example-script&amp;#34;&lt;/span&gt;: &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;exec&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;echo &amp;#39;Do something...&amp;#39;&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;urgency&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;Normal&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;example-action-script&amp;#34;&lt;/span&gt;: &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;exec&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;echo &amp;#39;Do something actionable!&amp;#39;&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;urgency&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;Normal&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;run-on&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;action&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;notification-visibility&amp;#34;&lt;/span&gt;: &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;example-name&amp;#34;&lt;/span&gt;: &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;state&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;muted&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;urgency&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;Low&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;app-name&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;Spotify&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;widgets&amp;#34;&lt;/span&gt;: &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;inhibitors&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;dnd&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;notifications&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;]&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;widget-config&amp;#34;&lt;/span&gt;: &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;inhibitors&amp;#34;&lt;/span&gt;: &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;Inhibitors&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;button-text&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;Clear All&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;clear-all-button&amp;#34;&lt;/span&gt;: &lt;span style="color:#6639ba"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;: &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;Notifications&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;clear-all-button&amp;#34;&lt;/span&gt;: true,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;button-text&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;Clear All&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;dnd&amp;#34;&lt;/span&gt;: &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;Do Not Disturb&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;label&amp;#34;&lt;/span&gt;: &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;max-lines&amp;#34;&lt;/span&gt;: 5,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;text&amp;#34;&lt;/span&gt;: &lt;span style="color:#0a3069"&gt;&amp;#34;Label Text&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;mpris&amp;#34;&lt;/span&gt;: &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;image-size&amp;#34;&lt;/span&gt;: 96,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;image-radius&amp;#34;&lt;/span&gt;: &lt;span style="color:#0550ae"&gt;12&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;~/.config/hypr/waybar/config&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-css"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;layer&amp;#34;:&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;top&amp;#34;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;modules-left&amp;#34;:&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;[&amp;#34;hyprland/workspaces&amp;#34;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;modules-center&amp;#34;:&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;[],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;modules-right&amp;#34;:&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;[&amp;#34;cpu&amp;#34;,&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;memory&amp;#34;,&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;temperature&amp;#34;,&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;backlight&amp;#34;,&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;battery&amp;#34;,&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;pulseaudio&amp;#34;,&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;clock&amp;#34;,&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;tray&amp;#34;,&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;notification&amp;#34;],&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;//&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;Modules&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;configuration&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;hyprland/workspaces&amp;#34;:&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;format&amp;#34;:&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;{name&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;icon&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;on-click&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;activate&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;sort-by-number&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: true&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;tray&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;spacing&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: 10,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;icon-size&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: 30&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;clock&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;:&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;%Y-%m-%d&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;%a&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;%&lt;/span&gt;H&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt;M&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;tooltip&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: false&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;cpu&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;usage&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;tooltip&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: false&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;memory&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;tooltip&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: true&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;temperature&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;critical-threshold&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: 80,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;temperatureC&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;°&lt;/span&gt;&lt;span style="color:#0550ae"&gt;C&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;icon&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-icons&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: [&amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;backlight&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;percent&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;icon&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; // &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-icons&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: [&amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-icons&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: [&amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;battery&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;states&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; // &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;good&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: 95,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;warning&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: 30,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;critical&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: 15&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;capacity&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;icon&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-charging&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;capacity&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-plugged&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;capacity&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-alt&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;time&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;icon&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;tooltip&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: false,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-icons&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: [&amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;network&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-wifi&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;essid&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;signalStrength&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;%)&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-ethernet&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;ifname&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;ipaddr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;cidr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-linked&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;ifname&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;No&lt;/span&gt; &lt;span style="color:#0550ae"&gt;IP&lt;/span&gt;&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-disconnected&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;Disconnected&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;⚠&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-alt&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;ifname&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;ipaddr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;cidr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;tooltip&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: false&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;pulseaudio&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;scroll-step&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: 10, // %, can be a float&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;volume&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;icon&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;format_source&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-bluetooth&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;volume&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;icon&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;format_source&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-muted&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;volume&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;format_source&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-source&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;volume&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-source-muted&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;volume&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0550ae"&gt;%&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format-icons&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;headphones&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;handsfree&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;headset&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;phone&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;portable&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;car&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;default&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: [&amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;, &amp;#34;&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;on-click&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;pavucontrol&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;notification&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;tooltip&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: false,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;icon&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;format&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;icons&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;notification&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;U&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;F0A2&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;span&lt;/span&gt; &lt;span style="color:#0550ae"&gt;foreground&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;’&lt;/span&gt;&lt;span style="color:#0550ae"&gt;red&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;’&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;sup&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;U&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;F444&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#0550ae"&gt;sup&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#0550ae"&gt;span&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;none&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;U&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;F0A2&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;dnd&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;notification&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;U&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;F1F7&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;span&lt;/span&gt; &lt;span style="color:#0550ae"&gt;foreground&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;’&lt;/span&gt;&lt;span style="color:#0550ae"&gt;red&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;’&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;sup&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;U&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;F444&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#0550ae"&gt;sup&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#0550ae"&gt;span&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;dnd&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;none&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;U&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;F1F7&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;inhibited&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;notification&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;U&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;F0A2&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;span&lt;/span&gt; &lt;span style="color:#0550ae"&gt;foreground&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;’&lt;/span&gt;&lt;span style="color:#0550ae"&gt;red&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;’&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;sup&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;U&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;F444&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#0550ae"&gt;sup&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#0550ae"&gt;span&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;inhibited&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;none&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;U&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;F0A2&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;dnd&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;inhibited&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;notification&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;U&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;F1F7&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;span&lt;/span&gt; &lt;span style="color:#0550ae"&gt;foreground&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;’&lt;/span&gt;&lt;span style="color:#0550ae"&gt;red&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;’&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;sup&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;U&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;F444&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#0550ae"&gt;sup&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#0550ae"&gt;span&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;dnd&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;inhibited&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;none&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;U&lt;/span&gt;&lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;F1F7&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;return&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;type&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;json&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;exec&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;if&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;which&lt;/span&gt; &lt;span style="color:#0550ae"&gt;swaync&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;client&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;exec&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;swaync&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;client&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;swb&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;on&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;click&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;swaync&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;client&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;t&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;sw&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;on&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;click&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;right&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;: &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;swaync&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;client&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;d&lt;/span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;‐&lt;/span&gt;&lt;span style="color:#0550ae"&gt;sw&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;escape&lt;/span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;~/.config/hypr/waybar/style.css&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-css"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;,*&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;border&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#cf222e"&gt;none&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;border-radius&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;font-family&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; JetBrains Mono&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;font-size&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;16&lt;/span&gt;&lt;span style="color:#cf222e"&gt;px&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;min-height&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;window&lt;/span&gt;&lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;waybar&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#cf222e"&gt;transparent&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;window&lt;/span&gt;&lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;waybar&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;hidden&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;opacity&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0.3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/*&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; window#waybar.empty {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; background-color: transparent;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; window#waybar.solo {&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; background-color: #FFFFFF;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; ,*/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;window&lt;/span&gt;&lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;waybar&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;termite&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#3F3F3F&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;window&lt;/span&gt;&lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;waybar&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;chromium&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#000000&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;border&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#cf222e"&gt;none&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;workspaces&lt;/span&gt; &lt;span style="color:#0550ae"&gt;button&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;padding&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#0550ae"&gt;5&lt;/span&gt;&lt;span style="color:#cf222e"&gt;px&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#cf222e"&gt;transparent&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#ffffff&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;border-bottom&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#cf222e"&gt;px&lt;/span&gt; &lt;span style="color:#cf222e"&gt;solid&lt;/span&gt; &lt;span style="color:#cf222e"&gt;transparent&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;workspaces&lt;/span&gt; &lt;span style="color:#0550ae"&gt;button&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#0550ae"&gt;hover&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;rgba&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0.2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;box-shadow&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#cf222e"&gt;inherit&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;border-bottom&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#cf222e"&gt;px&lt;/span&gt; &lt;span style="color:#cf222e"&gt;solid&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#ffffff&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;workspaces&lt;/span&gt; &lt;span style="color:#0550ae"&gt;button&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;active&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#64727D&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;border-bottom&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#cf222e"&gt;px&lt;/span&gt; &lt;span style="color:#cf222e"&gt;solid&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#ffffff&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;workspaces&lt;/span&gt; &lt;span style="color:#0550ae"&gt;button&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;urgent&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#eb4d4b&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;mode&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#64727D&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;border-bottom&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#cf222e"&gt;px&lt;/span&gt; &lt;span style="color:#cf222e"&gt;solid&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#ffffff&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;clock&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;battery&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;cpu&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;memory&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;temperature&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;backlight&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;network&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;pulseaudio&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;custom-media&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;tray&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;mode&lt;/span&gt;&lt;span style="color:#0550ae"&gt;,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;idle_inhibitor&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;padding&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#0550ae"&gt;10&lt;/span&gt;&lt;span style="color:#cf222e"&gt;px&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;margin&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#cf222e"&gt;px&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#ffffff&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;clock&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#64727D&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;battery&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#ffffff&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#000000&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;battery&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;charging&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#ffffff&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#26A65B&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;@&lt;/span&gt;&lt;span style="color:#cf222e"&gt;keyframes&lt;/span&gt; &lt;span style="color:#0550ae"&gt;blink&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;to&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#ffffff&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#000000&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;battery&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;critical&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#0550ae"&gt;not&lt;/span&gt;&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;charging&lt;/span&gt;&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#f53c3c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#ffffff&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;animation-name&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#cf222e"&gt;blink&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;animation-duration&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0.5&lt;/span&gt;&lt;span style="color:#cf222e"&gt;s&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;animation-timing-function&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#cf222e"&gt;linear&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;animation-iteration-count&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#cf222e"&gt;infinite&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;animation-direction&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#cf222e"&gt;alternate&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;label&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&lt;span style="color:#0550ae"&gt;focus&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#000000&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;cpu&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#2ecc71&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#000000&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;memory&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#9b59b6&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;backlight&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#90b1b1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;network&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#2980b9&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;network&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;disconnected&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#f53c3c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;pulseaudio&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#f1c40f&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#000000&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;pulseaudio&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;muted&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#90b1b1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#2a5c45&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;custom-media&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#66cc99&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#2a5c45&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;min-width&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;100&lt;/span&gt;&lt;span style="color:#cf222e"&gt;px&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;custom-media&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;custom-spotify&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#66cc99&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;custom-media&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;custom-vlc&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#ffa000&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;temperature&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#f0932b&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;temperature&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;critical&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#eb4d4b&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;tray&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#2980b9&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;idle_inhibitor&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#2d3436&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;idle_inhibitor&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;activated&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#ecf0f1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#2d3436&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;mpd&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#66cc99&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#2a5c45&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;mpd&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;disconnected&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#f53c3c&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;mpd&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;stopped&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#90b1b1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;#&lt;/span&gt;&lt;span style="color:#24292e"&gt;mpd&lt;/span&gt;&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;&lt;span style="color:#1f2328"&gt;paused&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;background-color&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;#51a37a&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>C++ - Span</title><link>https://shakaxi.github.io/posts/cpp_span/</link><pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/cpp_span/</guid><description>&lt;p&gt;&#10;&lt;em&gt;std::span&lt;/em&gt; is a class template introduced in C++ 20. As one of the most paramount features, span is essentially a non-owning view of a sequence of objects, which is contiguously distributed in memory and can consequently be iterated and indexed, e.g., &lt;code class="verbatim"&gt;std::array&lt;/code&gt;, &lt;code class="verbatim"&gt;std::vector&lt;/code&gt;, &lt;code class="verbatim"&gt;std::string&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Constructors&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;span(ptr)&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;span(ptr, len)&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;span(starting_ptr, ending_ptr)&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Member functions&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;first(num)&lt;/code&gt; returns a new span comprising the first &lt;code class="verbatim"&gt;num&lt;/code&gt; elements.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;last(num)&lt;/code&gt; returns a new span comprising the last &lt;code class="verbatim"&gt;num&lt;/code&gt; elements.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;front()&lt;/code&gt; / &lt;code class="verbatim"&gt;data()&lt;/code&gt; returns a reference to the first element.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;back()&lt;/code&gt; returns a reference to the last element.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;at(idx)&lt;/code&gt; / &lt;code class="verbatim"&gt;operator[idx]&lt;/code&gt; returns a reference to the &lt;code class="verbatim"&gt;idx&lt;/code&gt; th element.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;subspan(starting_idx, len)&lt;/code&gt; returns a new span of length &lt;code class="verbatim"&gt;len&lt;/code&gt; starting from &lt;code class="verbatim"&gt;starting_idx&lt;/code&gt; th element.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;size()&lt;/code&gt; returns the number of elements in the span.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;empty()&lt;/code&gt; returns a boolean indicator whether the span is empty.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;begin()&lt;/code&gt; returns the iterator to the beginning of the span.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;end()&lt;/code&gt; returns the iterator to the ending (sentinel) of the span.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>RIME Input Method Engine (RIME)</title><link>https://shakaxi.github.io/posts/rime/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/rime/</guid><description>&lt;p&gt;&#10;&lt;a href="https://rime.im"&gt;Rime input method engine (RIME)&lt;/a&gt; is an excellent input method application, which can be run on a variety of platforms, e.g., Linux, MacOS, and Windows.&lt;/p&gt;&#10;&lt;p&gt;&#10;RIME does not come with a frontend. Therefore, RIME as well as its frontend (e.g., &lt;code class="verbatim"&gt;fcitx5&lt;/code&gt; or &lt;code class="verbatim"&gt;ibus&lt;/code&gt;) can be installed together.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S librime fcitx5-im&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Among the RIME solutions, &lt;code class="verbatim"&gt;wanxiang&lt;/code&gt; is a good choice. On ArchLinux, it can be easily installed by&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; yay -S rime-wanxiang-updater&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;After the installation, run &lt;code class="verbatim"&gt;rime-wanxiang-updater&lt;/code&gt; to update the data and complete the configuration.&lt;/p&gt;</description></item><item><title>Linux - Network Bonding</title><link>https://shakaxi.github.io/posts/linux_net_bond/</link><pubDate>Sat, 24 Jan 2026 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/linux_net_bond/</guid><description>&lt;p&gt;&#10;Just as its name indicates, &lt;em&gt;network bonding&lt;/em&gt; is a technique to bond a plurality of network interface together for load balance and a wider bandwidth.&lt;/p&gt;&#10;&lt;p&gt;&#10;The configuration of network bonding is simple. Taking ArchLinux for instance, the network bonding of 2 network interfaces (e.g., &lt;code class="verbatim"&gt;eth0&lt;/code&gt; and &lt;code class="verbatim"&gt;eth1&lt;/code&gt;) can be configured as follows.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;/etc/systemd/network/10-bond0-eth0.network&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;Match&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Name&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;eth0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;Network&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Bond&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;bond0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;/etc/systemd/network/10-bond0-eth1.network&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;Match&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Name&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;eth1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;Network&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Bond&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;bond0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;/etc/systemd/network/10-bond0.netdev&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;NetDev&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Name&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;bond0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Kind&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;bond&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;Bond&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Mode&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;802.3ad&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;LACPTransmitRate&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;fast&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;MIIMonitorSec&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;100ms&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;/etc/systemd/network/10-bond0.network&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;Match&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Name&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;bond0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;Network&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Address&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;xxx.xxx.xxx.xxx/24&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Gateway&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;xxx.xxx.xxx.xxx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;DNS&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;xxx.xxx.xxx.xxx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Mermaid</title><link>https://shakaxi.github.io/posts/mermaid/</link><pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/mermaid/</guid><description>&lt;p&gt;&#10;Mermaid is a JavaScript-based software to draw a wide variety of diagrams and charts, e.g., flowchart, sequence, state, block, class, mindmap, Gantt, git, pie, etc.&lt;/p&gt;&#10;&lt;p&gt;&#10;In Linux, mermaid can be directly installed via package manager. Taking ArchLinux for instance, it can be installed via pacman, i.e.,&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S mermaid-cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Then, the mermaid utility &lt;code class="verbatim"&gt;mmdc&lt;/code&gt; is available which takes a mermaid file (with a &lt;code class="verbatim"&gt;.mmd&lt;/code&gt; extension) as input and outputs a diagram.&lt;/p&gt;</description></item><item><title>Slurm</title><link>https://shakaxi.github.io/posts/slurm/</link><pubDate>Sun, 18 Jan 2026 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/slurm/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;a href="https://slurm.schedmd.com"&gt;Slurm&lt;/a&gt; is the most popular open-source workload manager for Linux clusters released under GNU GPL v2. As a cluster manager, slurm is widely used all over the world, from academic circles to industrial areas. On one hand, it virtualizes the physically individual computing nodes as a supercomputer whereby the procedure and method of visiting resources can be greatly simplified. On other hand, it provides automatic job submission/queuing/scheduling/executing, as well as results collection.&lt;/p&gt;&#10;&lt;p&gt;&#10;Slurm is comprised of 3 daemons.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;slurmctld&lt;/code&gt; is the controller daemon running on server.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;slurmdbd&lt;/code&gt; is an optional but recommended daemon for database-based storage and statistics running on server. E.g., &lt;code class="verbatim"&gt;MySQL/mariadb&lt;/code&gt; can be installed.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;slurmd&lt;/code&gt; is a client daemon running on each computing node.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Mathematics</title><link>https://shakaxi.github.io/posts/math/</link><pubDate>Sat, 29 Nov 2025 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/math/</guid><description>&lt;p&gt;&#10;As the titile indicates, this post is written to summarize the basic of mathematics.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Special functions&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Gamma function&lt;/p&gt;&#10;\begin{align*}&#10; \Gamma(x) \triangleq \int_0^{+\infty} e^{-t} t^{x - 1} dt&#10;\end{align*}&#10;&lt;p&gt;Particularly, $\forall x \in \mathbb{Z}^+$, $\Gamma(x) = (x-1)!$.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Bessel functions&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;First kind&lt;/p&gt;&#10;\begin{align*}&#10; J_n(x) \triangleq \frac{1}{2\pi}\int_{-\pi}^{\pi} e^{j(x\sin\theta-n\theta)}d\theta&#10;\end{align*}&#10;&lt;p&gt;Particularly, $\forall \phi \in [0, 2\pi)$, $J_0(x) = \dfrac{1}{2\pi} \int_\phi^{2\pi + \phi}e^{\pm jx\cos\theta}d\theta = \dfrac{1}{2\pi} \int_\phi^{2\pi + \phi}e^{\pm jx\sin\theta}d\theta$.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Second kind&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Q-function&lt;/p&gt;&#10;\begin{align*}&#10; Q(x) &amp;amp;\triangleq \frac{1}{\sqrt{2\pi}}\int_x^{+\infty}e^{-\frac{t^2}{2}} dt \\&#10; &amp;amp;= 1 - Q(-x)&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Error function and complementary error function&lt;/p&gt;&#10;\begin{align*}&#10; erf(x) &amp;amp;= \frac{2}{\sqrt{\pi}}\int_0^x e^{-t^2} dt \\&#10; &amp;amp;= 2Q(\sqrt{2}x) \\&#10; erfc(x)&amp;amp;= \frac{2}{\sqrt{\pi}}\int_x^{+\infty} e^{-t^2} dt \\&#10; &amp;amp;= 1 - erf(x) \\&#10; &amp;amp;= 1 - 2Q(\sqrt{2}x)&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Euler&lt;/p&gt;&#10;\begin{align*}&#10; e^{j\theta} &amp;amp;= \cos\theta + j\sin\theta \\&#10; \cos\theta &amp;amp;= \frac{e^{j\theta} + e^{-j\theta}}{2} \\&#10; \sin\theta &amp;amp;= \frac{e^{j\theta} - e^{-j\theta}}{2j}&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Linux - Add User in a Batch Way</title><link>https://shakaxi.github.io/posts/linux_usr_batch/</link><pubDate>Tue, 28 Oct 2025 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/linux_usr_batch/</guid><description>&lt;p&gt;&#10;Following script can be used to add users in a batch way.&lt;/p&gt;&#10;&lt;div class="src src-bash"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#!/bin/bash&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; u in &lt;span style="color:#0a3069"&gt;`&lt;/span&gt;seq 9&lt;span style="color:#0a3069"&gt;`&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;do&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; useradd -m -G GROUP &lt;span style="color:#953800"&gt;$u&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;echo&lt;/span&gt; &lt;span style="color:#953800"&gt;$u&lt;/span&gt; &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; passwd -s &lt;span style="color:#953800"&gt;$u&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>PBS and Maui</title><link>https://shakaxi.github.io/posts/pbs_maui/</link><pubDate>Tue, 21 Oct 2025 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/pbs_maui/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Portable batch system (PBS) was originally developed by NASA, which is comprised of a &lt;em&gt;resource manager&lt;/em&gt;, a &lt;em&gt;scheduler&lt;/em&gt; and a &lt;em&gt;client&lt;/em&gt;. What is different, a resource manager and a scheduler are usually running on server side, while clients running on computing nodes. For the softwares, both commercial &lt;em&gt;PBS Pro&lt;/em&gt; and open-source &lt;em&gt;Torque&lt;/em&gt; are available. But herein, we consider the open-source Torque only.&lt;/p&gt;&#10;&lt;p&gt;&#10;Just as their names indicate, a resource manager targets for resource management and configuration, responsible for checking the availability of resource, e.g. CPU, memory, etc., and resource assignment; a scheduler accept jobs from subscribers and maintains one or more queues.&lt;/p&gt;&#10;&lt;p&gt;&#10;The built-in scheduler is a simple FIFO scheduler. However, other schedulers can be adopted instead. For instance, &lt;em&gt;Maui&lt;/em&gt; is a very popular and powerful scheduler, based on which advanced and complex strategies can be realized and customized.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>C++ - Armadillo</title><link>https://shakaxi.github.io/posts/cpp_armadillo/</link><pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/cpp_armadillo/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;em&gt;Armadillo&lt;/em&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt; is an excellent C++ library, which provides efficient linear algebra related operations, based on a series of classes, e.g., for vectors, matrices, etc. Thanks to its friendly interfaces, similar to &lt;em&gt;MATLAB&lt;/em&gt;, the library is very easy to use.&lt;/p&gt;&#10;&lt;p&gt;&#10;Armadillo is developped by Conrad Sanderson and Ryan Curtin, and released under &lt;a href="https://tldrlegal.com/license/apache-license-2.0-(apache-2.0)"&gt;Apache 2.0 license&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation &amp;amp; configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Installation&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;Above all, several third-party open source libraries (including &lt;a href="https://github.com/xianyi/OpenBLAS.git"&gt;OpenBLAS&lt;/a&gt;, &lt;a href="http://www.netlib.org/lapack"&gt;LAPACK&lt;/a&gt;, &lt;a href="https://www.arpack.org"&gt;ARPACK&lt;/a&gt;, &lt;a href="https://github.com/xiaoyeli/superlu.git"&gt;SuperLU&lt;/a&gt;) should be installed as necessary dependencies. Taking ArchLinux for instance, these libraries can be simply installed by&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S openblas lapack arpack superlu&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;Then, armadillo can be installed by executing following commands.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; git clone --depth &lt;span style="color:#0550ae"&gt;1&lt;/span&gt; https://gitlab.com/conradsnicta/armadillo-code.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;cd&lt;/span&gt; armadillo-code&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; cmake . -DCMAKE_INSTALL_PREFIX:PATH&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;/opt/armadillo&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; make&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Configuration&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Create file &lt;code class="verbatim"&gt;/etc/ld.so.conf.d/arma.conf&lt;/code&gt; with its content as follows.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; /opt/armadillo/lib&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Then, fresh the cache accordingly.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ldconfig&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Create a soft link for headers.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ln -s /opt/armadillo/include/* /usr/local/include/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Building &amp;amp; linking&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Due to the soft links in &lt;code class="verbatim"&gt;/usr/local/include&lt;/code&gt;, the headers can already be found.&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Due to &lt;code class="verbatim"&gt;/etc/ld.so.conf.d/arma.conf&lt;/code&gt;, the object files in the library can be directly linked by option &lt;code class="verbatim"&gt;-larmadillo&lt;/code&gt;, e.g.,&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; g++ main.cpp -o main -O2 -std&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;c++14 -larmadillo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>K - Means Clustering</title><link>https://shakaxi.github.io/posts/k_means/</link><pubDate>Sat, 27 Sep 2025 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/k_means/</guid><description>&lt;p&gt;&#10;K - Means is a classical clustering algorithm, targeting intra-cluster close resemblance and inter-cluster difference.&lt;/p&gt;&#10;&lt;p&gt;&#10;Without loss of generality, the procedure of assigning $n$ samples to $k$ clusters can be listed as follows.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Initialize the cluster centers: Randomly select $k$ different samples as cluster centers.&lt;/li&gt;&#10;&lt;li&gt;Assign samples: For each sample, compute its distance to each cluster center, and assign the sample to its closest cluster.&lt;/li&gt;&#10;&lt;li&gt;Update cluster centers: For each cluster, update the mean value of intra-cluster samples as the new cluster center.&lt;/li&gt;&#10;&lt;li&gt;Repeat steps 2 and 3 until cluster centers do not change anymore or a maximum/expected number of iterations are reached.&lt;/li&gt;&#10;&lt;/ol&gt;</description></item><item><title>English Study</title><link>https://shakaxi.github.io/posts/english/</link><pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/english/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;发音&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;元音字母和辅音字母&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;p&gt;在英文的26个字母中，有5个元音字母，分别为 &lt;code class="verbatim"&gt;a&lt;/code&gt;, &lt;code class="verbatim"&gt;e&lt;/code&gt;, &lt;code class="verbatim"&gt;i&lt;/code&gt;, &lt;code class="verbatim"&gt;o&lt;/code&gt;, &lt;code class="verbatim"&gt;u&lt;/code&gt;; 剩下的21个字母为辅音字母。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;开音节和闭音节&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;开音节单词: 以元音字母结尾的单词&lt;/li&gt;&#10;&lt;li&gt;闭音节单词: 以辅音字母结尾的单词&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;通常，辅音字母的发音较单一，而元音字母的发音相对复杂。元音字母的发音有长音(也即字母本身的音)和短音，通常在开音节单词中发长音，在闭音节单词中发短音。&lt;/p&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;元音字母&lt;/th&gt;&#10;&lt;th&gt;&lt;code class="verbatim"&gt;a&lt;/code&gt;&lt;/th&gt;&#10;&lt;th&gt;&lt;code class="verbatim"&gt;e&lt;/code&gt;&lt;/th&gt;&#10;&lt;th&gt;&lt;code class="verbatim"&gt;i&lt;/code&gt;&lt;/th&gt;&#10;&lt;th&gt;&lt;code class="verbatim"&gt;o&lt;/code&gt;&lt;/th&gt;&#10;&lt;th&gt;&lt;code class="verbatim"&gt;u&lt;/code&gt;&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;开音节&lt;/td&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[ei]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[i:]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[ai]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[əʊ]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[ju:]&lt;/code&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;闭音节&lt;/td&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[æ]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[e]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[ɪ]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[ɒ]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[ʌ]&lt;/code&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;音标&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;爆破音: &lt;code class="verbatim"&gt;[p]&lt;/code&gt;, &lt;code class="verbatim"&gt;[b]&lt;/code&gt;, &lt;code class="verbatim"&gt;[t]&lt;/code&gt;, &lt;code class="verbatim"&gt;[d]&lt;/code&gt;, &lt;code class="verbatim"&gt;[k]&lt;/code&gt;, &lt;code class="verbatim"&gt;[g]&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Misc.&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;I can&amp;#39;t do it 中的 &lt;code class="verbatim"&gt;&amp;#39;t&lt;/code&gt; 不发音，所以这句话读起来和I can do it相似，区别仅仅在于后者中的can弱读。&lt;/li&gt;&#10;&lt;li&gt;字母组合 &lt;code class="verbatim"&gt;ee&lt;/code&gt; 和 &lt;code class="verbatim"&gt;ea&lt;/code&gt; 均发 &lt;code class="verbatim"&gt;[i:]&lt;/code&gt; 音。不同在于， &lt;code class="verbatim"&gt;ee&lt;/code&gt; 喜欢和字母 &lt;code class="verbatim"&gt;b&lt;/code&gt; 和字母 &lt;code class="verbatim"&gt;p&lt;/code&gt; 在一起；而 &lt;code class="verbatim"&gt;ea&lt;/code&gt; 喜欢和字母 &lt;code class="verbatim"&gt;d&lt;/code&gt; 和字母 &lt;code class="verbatim"&gt;t&lt;/code&gt; 在一起。&lt;/li&gt;&#10;&lt;li&gt;字母组合 &lt;code class="verbatim"&gt;ai&lt;/code&gt; 和 &lt;code class="verbatim"&gt;ay&lt;/code&gt; 均发 &lt;code class="verbatim"&gt;[ei]&lt;/code&gt; 音。不同在于， &lt;code class="verbatim"&gt;ai&lt;/code&gt; 一般位于单词中间；而 &lt;code class="verbatim"&gt;ay&lt;/code&gt; 位于单词尾部。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-2"&gt;&#10;&lt;h2 id="headline-6"&gt;&#10;单词&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;appointment: 预约&lt;/li&gt;&#10;&lt;li&gt;beverage: 饮料&lt;/li&gt;&#10;&lt;li&gt;classy: 优等的, 上等的, 有品味的.&lt;/li&gt;&#10;&lt;li&gt;disrupt：使瓦解&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;mind&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;in one&amp;#39;s mind: 表达某人记得某事，在某人的记忆里。&lt;/li&gt;&#10;&lt;li&gt;on one&amp;#39;s mind: 表达困扰某人的问题或事情，某人心里挂念担心的问题或事情。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;pantsuit：衣裤套装&lt;/li&gt;&#10;&lt;li&gt;sale: 促销&lt;/li&gt;&#10;&lt;li&gt;stereotype：模式化形象，刻板印象。&lt;/li&gt;&#10;&lt;li&gt;stingy: 吝啬的, 小气的.&lt;/li&gt;&#10;&lt;li&gt;trendy: 流行的，时髦的，时尚的。&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;变化&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;get: 逐渐变&lt;/li&gt;&#10;&lt;li&gt;turn: 颜色变&lt;/li&gt;&#10;&lt;li&gt;grow: 成长变&lt;/li&gt;&#10;&lt;li&gt;become: 身份变&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;看&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;look: 看的时间短&lt;/li&gt;&#10;&lt;li&gt;watch: 看的时间长&lt;/li&gt;&#10;&lt;li&gt;see: 强调看的结果&lt;/li&gt;&#10;&lt;li&gt;read: 强调安静读&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;意识&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;conscious/consciously: 有意识的/有意识地&lt;/li&gt;&#10;&lt;li&gt;subconscious/subconsciously: 潜意识的/潜意识地&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;真&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;very: 只能修饰形容词或副词。&lt;/li&gt;&#10;&lt;li&gt;really: 能修饰动词、形容词、或副词。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;动物&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;mosquito: 蚊子&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;超市&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;查看促销活动: check promotions&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;自动扶梯: escalator&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;乘坐扶梯: take the escalator&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;蔬菜&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;香菜: coriander&lt;/li&gt;&#10;&lt;li&gt;麻薯: mochi&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;水果&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;榴莲: durian&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;瑞士卷: Swiss roll&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;盖子&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;cap: 通常指紧密贴合的盖子，需要拧上或者扣上才能固定。一般用于瓶子、小容器、笔、牙膏等。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;打开: unscrew the cap, twist off the cap.&lt;/li&gt;&#10;&lt;li&gt;关上: screw the cap, tighten the cap.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;lid: 通常是可以拿起来的盖子，盖在容器顶部。一般用于锅、盒子、罐子、垃圾桶等较大的容器。例如：垃圾桶盖子: trash can lid.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;打开/关上盖子: open/close the lid&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;租房&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;合同: contract&lt;/li&gt;&#10;&lt;li&gt;房东: landlord&lt;/li&gt;&#10;&lt;li&gt;押金: deposit&lt;/li&gt;&#10;&lt;li&gt;中介: broker&lt;/li&gt;&#10;&lt;li&gt;转租: sublet&lt;/li&gt;&#10;&lt;li&gt;租户: tenant&lt;/li&gt;&#10;&lt;li&gt;水电费: utilities&lt;/li&gt;&#10;&lt;li&gt;设施: amenities&lt;/li&gt;&#10;&lt;li&gt;租金: rent&lt;/li&gt;&#10;&lt;li&gt;带家具的: furnished&lt;/li&gt;&#10;&lt;li&gt;租期: tenancy period&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Electromagnetic Field (EMF)</title><link>https://shakaxi.github.io/posts/em_field/</link><pubDate>Sat, 24 May 2025 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/em_field/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Maxwell&amp;#39;s equations without free charge&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;\begin{align*}&#10; \nabla \times \mathbf{E} &amp;amp;= -\mu \frac{\partial \mathbf{H}}{\partial t} \\&#10; \nabla \times \mathbf{H} &amp;amp;= \epsilon \frac{\partial \mathbf{E}}{\partial t} \\&#10; \nabla \cdot \epsilon\mathbf{E} &amp;amp;= 0 \\&#10; \nabla \cdot \mu\mathbf{H} &amp;amp;= 0&#10;\end{align*}&#10;&lt;p&gt;where&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;$\mathbf{E}$ and $\mathbf{H}$ are strengths of electric and magnetic fields respectively;&lt;/li&gt;&#10;&lt;li&gt;$\epsilon$ and $\mu$ are permittivity and permeability respectively.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Wave equation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;Both $\mathbf{E}$ and $\mathbf{H}$ fulfill wave equation in vector format, i.e.,&lt;/p&gt;&#10;\begin{align*}&#10; \nabla^2 \mathbf{E} - \frac{n^2}{c^2} \frac{\partial^2 \mathbf{E}}{\partial t^2} &amp;amp;= 0\\&#10; \nabla^2 \mathbf{H} - \frac{n^2}{c^2} \frac{\partial^2 \mathbf{H}}{\partial t^2} &amp;amp;= 0&#10;\end{align*}&#10;&lt;p&gt;where&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;$n$ is the &lt;em&gt;refractive index&lt;/em&gt; of the medium;&lt;/li&gt;&#10;&lt;li&gt;$c = \dfrac{1}{\sqrt{\epsilon_0 \mu_0}}$ is the propagation speed of wave in vacuum, with $\epsilon_0$ and $\mu_0$ the permittivity and permeability in vacuum respectively.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;For any individual component, the wave equation in scalar format applies, i.e.,&lt;/p&gt;&#10;\begin{align}&#10; \nabla^2 u(\mathbf{p}, t) - \frac{n^2}{c^2} \frac{\partial^2 u(\mathbf{p}, t)}{\partial t^2} = 0, \label{eq:wave-eq}&#10;\end{align}&#10;&lt;p&gt;where $u(\mathbf{p},t)$ can be $\mathbf{E}_x$, $\mathbf{E}_y$, $\mathbf{E}_z$, $\mathbf{H}_x$, $\mathbf{H}_y$, or $\mathbf{H}_z$.&lt;/p&gt;&#10;&lt;p&gt;&#10;For &lt;em&gt;monochromatic&lt;/em&gt; wave, a scalar-field can be written as&lt;/p&gt;&#10;\begin{align}&#10; u(\mathbf{r}, t) &amp;amp;= a(\mathbf{r}) \cos[2\pi ft + \phi(\mathbf{r})] \nonumber \\&#10; &amp;amp;= \mathcal{R}\left[U(\mathbf{r}, t) \right] \nonumber \\&#10; &amp;amp;= \mathcal{R}\left[U(\mathbf{r}) e^{j2\pi ft}\right] \label{eq:separable}&#10;\end{align}&#10;&lt;p&gt;where&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;$U(\mathbf{r}) \triangleq a(\mathbf{r}) e^{j \phi(\mathbf{r})}$, $a(\mathbf{r})$ and $\phi(\mathbf{r})$ are respectively the amplitude and phase at point $\mathbf{r}$;&lt;/li&gt;&#10;&lt;li&gt;$U(\mathbf{r},t) \triangleq U(\mathbf{r})e^{j2\pi ft}$.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>LaTeX - Beamer</title><link>https://shakaxi.github.io/posts/latex_beamer/</link><pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/latex_beamer/</guid><description>&lt;p&gt;&#10;&lt;em&gt;Beamer&lt;/em&gt; is a convenient \LaTeX package for high quality slides. A template can be shown as follows.&lt;/p&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\documentclass&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[t, compress, red, 10pt, aspectratio=169, allowframebreaks]&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;beamer&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;hyperref&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\hypersetup&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;pdfpagemode=FullScreen,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; colorlinks=true,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pdfauthor=&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;Shaka&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pdftitle=&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;TITLE&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pdfcreator=&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;GNU Emacs&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pdflang=&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;English&lt;span style="color:#6639ba"&gt;}}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;tikz&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;pgfplots&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;circuitikz&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usetikzlibrary&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;arrows, cd, shapes&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\tikzstyle&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;every picture&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;+=[remember picture]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;amsmath, amssymb, amsfonts&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;caption, subcaption&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;fontawesome5&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;enumerate&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;cite&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;tabularx&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;fancybox&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;booktabs&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;biblatex&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\addbibresource&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;~/ref/ref.bib&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\newcounter&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;eg&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\newcounter&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;prop&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% \usepackage{xeCJK}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% \setCJKsansfont{WenQuanYi Micro Hei}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% \usepackage{helvet}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% \usepackage{charter}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% \usepackage{fourier}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% \usepackage{Minion Pro}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% \usepackage{mathdesign}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% \usepackage{mathpazo}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% \usepackage{newcent}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% \usepackage{avant}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% \usepackage{bookman}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\DeclareMathOperator&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\diag&lt;/span&gt;&lt;span style="color:#6639ba"&gt;}{&lt;/span&gt;diag&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\renewcommand&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\emph&lt;/span&gt;&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;[1]&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\textit&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\textcolor&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;blue&lt;span style="color:#6639ba"&gt;}{&lt;/span&gt;#1&lt;span style="color:#6639ba"&gt;}}}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;%% Insert logo at top right corner of each slide&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% LaTeX&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\logo&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\pgfputat&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\pgfxy&lt;/span&gt;(0, 8.2)&lt;span style="color:#6639ba"&gt;}{&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\pgfbox&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[right,bottom]&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\includegraphics&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[height=0.8cm]&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;logo.png&lt;span style="color:#6639ba"&gt;}}}}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% XeLaTeX&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% \logo{\pgfputat{\pgfxy(0, 8.2)}{\includegraphics[height=0.7cm]{logo.jpg}}}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;%% Custom footer&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usefoottemplate&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\rightline&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\textbf&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\insertframenumber&lt;/span&gt;&lt;span style="color:#6639ba"&gt;}}}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;%% Theme setting&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% \setbeamercolor{frametitle}{fg=black}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usetheme&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;default&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\useinnertheme&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;circles&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\useoutertheme&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;default&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\setbeamercovered&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;transparent&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\setbeamertemplate&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;caption&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;[numbered]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usefonttheme&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;professionalfonts&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\setbeamerfont&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;title&lt;span style="color:#6639ba"&gt;}{&lt;/span&gt;shape=&lt;span style="color:#cf222e"&gt;\scshape&lt;/span&gt;,series=&lt;span style="color:#cf222e"&gt;\bfseries&lt;/span&gt;&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\setbeamerfont&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;frametitle&lt;span style="color:#6639ba"&gt;}{&lt;/span&gt;shape=&lt;span style="color:#cf222e"&gt;\scshape&lt;/span&gt;,series=&lt;span style="color:#cf222e"&gt;\bfseries&lt;/span&gt;&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\begin&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;document&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\title&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;TITLE&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\author&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;AUTHOR&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\date&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\today&lt;/span&gt;&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\institute&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;INSTITUTE&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\titlepage&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\begin&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;frame&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\frametitle&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;Outline&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\tableofcontents&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\end&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;frame&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\AtBeginSection&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\begin&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;frame&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\frametitle&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;Outline&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\tableofcontents&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[currentsection, hideallsubsections]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\end&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;frame&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\begin&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;frame&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\frametitle&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;References&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\printbibliography&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\end&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;frame&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\begin&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;frame&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\frametitle&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;FRAME&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\begin&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;itemize&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\item&lt;/span&gt; Proposal&lt;span style="color:#cf222e"&gt;\refstepcounter&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;prop&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\theprop\label&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;prop:1&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;: xxx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\item&lt;/span&gt; Example&lt;span style="color:#cf222e"&gt;\refstepcounter&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;eg&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&lt;span style="color:#cf222e"&gt;\theeg\label&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;eg:1&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;: xxx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\item&lt;/span&gt; Proposal &lt;span style="color:#cf222e"&gt;\ref&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;prop:1&lt;span style="color:#6639ba"&gt;}&lt;/span&gt; and Example&lt;span style="color:#cf222e"&gt;\ref&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;eg:1&lt;span style="color:#6639ba"&gt;}&lt;/span&gt; xxx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\end&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;itemize&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\end&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;frame&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\end&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;document&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>MMSE-based Channel Estimation</title><link>https://shakaxi.github.io/posts/mmse_ce/</link><pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/mmse_ce/</guid><description>&lt;p&gt;&#10;Regarding channel estimation, &lt;em&gt;minimum mean square error (MMSE)&lt;/em&gt; is a popular algorithm widely utilized in a variety of applications. This short document is just written to reveal the rationale between the algorithm.&lt;/p&gt;&#10;&lt;p&gt;&#10;Without loss of generality, we take an OFDM system for instance. The received signals on pilot, a.k.a. &lt;em&gt;reference signal (RS)&lt;/em&gt; &lt;em&gt;resource elements (RE)&lt;/em&gt; can be written as $\mathbf{y}_p = \mathbf{X}_p \mathbf{h}_{p} + \mathbf{n}_p$, where&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;$\mathbf{X}_p \in \mathbb{C}^{P \times P}$ is a diagonal matrix with pilot symbols as its diagonal elements, $P \in \mathbb{Z}^+$ the number of pilot in the pattern.&lt;/li&gt;&#10;&lt;li&gt;$\mathbf{h}_p \in \mathbb{C}^P$ is the &lt;em&gt;channel frequency response (CFR)&lt;/em&gt; on the pilot REs.&lt;/li&gt;&#10;&lt;li&gt;$\mathbf{n}_p \in \mathbb{C}^P \sim \mathcal{CN}(\mathbf{0}, \sigma^2\mathbf{I}_P)$ is the additive Gaussian white noise.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The CFR of the target RE can be denoted by $\tilde{\mathbf{h}} = \mathbf{G} \mathbf{y}_p$,&#10;where $\mathbf{h}$ is the target CFR and $\mathbf{G}$ is the MMSE channel estimator.&lt;/p&gt;</description></item><item><title>Orgmode - Beamer</title><link>https://shakaxi.github.io/posts/org_beamer/</link><pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/org_beamer/</guid><description>&lt;p&gt;&#10;Emacs&amp;#39;s builtin utility, orgmode can export an orgmode file to beamer slides. A &lt;a href="latex_beamer.html"&gt;template&lt;/a&gt; for beamer can be used directly.&lt;/p&gt;&#10;&lt;p&gt;&#10;In the export, text between a pair of stars will not be exported to boldface stuff as expected by default. Instead, it is colored by red as alert. Following settings can be placed in preamble to correct the behavior.&lt;/p&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\setbeamercolor&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;alerted text&lt;span style="color:#6639ba"&gt;}{&lt;/span&gt;fg=black&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\setbeamerfont&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;alerted text&lt;span style="color:#6639ba"&gt;}{&lt;/span&gt;series=&lt;span style="color:#cf222e"&gt;\bfseries&lt;/span&gt;&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Python - Argument Parser</title><link>https://shakaxi.github.io/posts/python_argparse/</link><pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_argparse/</guid><description>&lt;p&gt;&#10;Package &lt;code class="verbatim"&gt;argparse&lt;/code&gt; is a convenient utility for argument parsing, in which class &lt;code class="verbatim"&gt;ArgumentParser&lt;/code&gt; is defined. Concerning its usage, a simple example can be given as follows.&lt;/p&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;from&lt;/span&gt; &lt;span style="color:#24292e"&gt;argparse&lt;/span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; ArgumentParser&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; ArgumentDefaultsHelpFormatter&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; args &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; ArgumentParser&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;formatter_class&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;ArgumentDefaultsHelpFormatter&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; conflict_handler&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;resolve&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Arguments in the root&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; args&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;add_argument&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;--ARGUMENT1&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;type&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; metavar&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; help&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;DESCRIPTION OF ARGUMENT1&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; default&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Arguments in groups&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grp1 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; args&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;add_argument_group&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;GROUP1&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;DESCRIPTION OF GROUP1&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grp1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;add_argument&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;--ARGUMENT1INGROUP1&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;type&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;float&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; metavar&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; help&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;DESCRIPTION OF ARGUMENT1 IN GROUP1&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; default&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grp1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;add_argument&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;--ARGUMENT2INGROUP1&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;type&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; nargs&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; metavar&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; help&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;DESCRIPTION OF ARGUMENT2 IN GROUP1&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; default&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grp1&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;add_argument&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;--ENABLEFEATURE1&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; help&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;DESCRIPTION OF ENABLEFEATURE1 IN GROUP1&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; action&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;store_true&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;...&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; grp2 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; args&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;add_argument_group&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;GROUP2&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;DESCRIPTION OF GROUP2&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;...&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Parse the arguments&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; para &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; args&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;parse_args&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Use the arguments parsed&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; arg1 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; para&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;ARGUMENT1 &lt;span style="color:#57606a"&gt;# arg1 is an integer&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; arg1_grp1 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; para&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;ARGUMENT1INGROUP1 &lt;span style="color:#57606a"&gt;# arg1_grp1 is a float&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; arg2_grp1 &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; para&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;ARGUMENT2INGROUP1 &lt;span style="color:#57606a"&gt;# arg2_grp2 is a list comprising of 2 integers&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;...&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; feature1_enabler &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; para&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;ENABLEFEATURE1 &lt;span style="color:#57606a"&gt;# feature1_enabler is a boolean&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Python - Concurrent</title><link>https://shakaxi.github.io/posts/python_concurrent/</link><pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_concurrent/</guid><description>&lt;p&gt;&#10;Python has 2 builtin concurrent utilities which is widely utilized, i.e., process pool and thread pool, dedicated to CPU intensity and I/O intensity respectively.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Due to &lt;em&gt;global interpreter lock (GIL)&lt;/em&gt;, a process pool should be used for a CPU intensive task. In this case, each CPU involved (e.g., all the CPU by default) can be fully utilized.&lt;/li&gt;&#10;&lt;li&gt;While for a I/O intensive task, a thread pool should be used instead.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;A simple example can be found below.&lt;/p&gt;</description></item><item><title>Python - Virtual Environment</title><link>https://shakaxi.github.io/posts/python_virtualenv/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_virtualenv/</guid><description>&lt;p&gt;&#10;Python的虚拟环境（virtual environment）是一个独立的Python运行环境。在一个独立的环境中，可以正常安装所需要的数据包（如使用pip等）。既不受系统环境的影响，也不会对系统环境产生影响。具体地，创建虚拟环境就是把系统Python环境复制到所创建的独立环境中。当进入一个虚拟环境时，virtualenv会修改相关的环境变量，让python和pip指向当前的独立环境。&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;创建独立的环境&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; python &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;m venv ENV_NAME&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;进入环境&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; source ENV_NAME&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#6639ba"&gt;bin&lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;activate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;安装/升级pip&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; python &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;m ensurepip &lt;span style="color:#0550ae"&gt;--&lt;/span&gt;upgrade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-2"&gt;&#10;&lt;h2 id="headline-4"&gt;&#10;退出环境&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-2"&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; deactivate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-2"&gt;&#10;&lt;h2 id="headline-5"&gt;&#10;删除环境&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-2"&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rm &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;fr ENV_NAME&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - Doxygen</title><link>https://shakaxi.github.io/posts/doxygen/</link><pubDate>Wed, 27 Nov 2024 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/doxygen/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;em&gt;Doxygen&lt;/em&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt; is a powerful tool to document the source codes. In principle, it parses the specially formated comments from the source codes and then produces very professional documents. Up to now, it is able to support almost all the popular programming languages, e.g. C/C++, Java, Python, and etc.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Syntax&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Comment block&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&#10;Multi-line comment blocks&#10;&lt;/dt&gt;&#10;&lt;dd&gt;Begin with &lt;code class="verbatim"&gt;/**&lt;/code&gt; or &lt;code class="verbatim"&gt;/*!&lt;/code&gt;, and end with &lt;code class="verbatim"&gt;*/&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Single-line comment blocks&#10;&lt;/dt&gt;&#10;&lt;dd&gt;delimiters &lt;code class="verbatim"&gt;///&lt;/code&gt; or &lt;code class="verbatim"&gt;//!&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Special command&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;Within code blocks, &lt;em&gt;special commands&lt;/em&gt; can be used. They begin with a prefix &lt;code class="verbatim"&gt;@&lt;/code&gt; or &lt;code class="verbatim"&gt;\&lt;/code&gt; and optionally have arguments enclosed in braces. Moreover, different braces mean different scopes.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Angle braces &lt;code class="verbatim"&gt;&amp;lt; &amp;gt;&lt;/code&gt; mean the argument is a single word.&lt;/li&gt;&#10;&lt;li&gt;Round braces &lt;code class="verbatim"&gt;( )&lt;/code&gt; mean the argument extends to end of line.&lt;/li&gt;&#10;&lt;li&gt;Curly braces &lt;code class="verbatim"&gt;{ }&lt;/code&gt; mean the argument extends to next paragraph.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-4"&gt;&#10;&lt;h4 id="headline-5"&gt;&#10;List&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Column aligned &lt;code class="verbatim"&gt;-&lt;/code&gt; → a unsorted/bulleted list item.&lt;/li&gt;&#10;&lt;li&gt;Column aligned &lt;code class="verbatim"&gt;-#&lt;/code&gt; → a sorted list item.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Hierachical lists can be created by using different indents for different levels.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-4"&gt;&#10;&lt;h4 id="headline-6"&gt;&#10;Group&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-4"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/** &lt;span style="color:#0a3069"&gt;\d&lt;/span&gt;efgroup &amp;lt;label&amp;gt; &lt;span style="color:#0a3069"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&amp;lt;title&amp;gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&amp;#39;&lt;/span&gt; */&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/* @&lt;span style="color:#0550ae"&gt;{&lt;/span&gt; */&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; // group memebers here ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/* @&lt;span style="color:#0550ae"&gt;}&lt;/span&gt; */&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;or&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/** &lt;span style="color:#0a3069"&gt;\d&lt;/span&gt;efgroup &amp;lt;label&amp;gt; &lt;span style="color:#0a3069"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&amp;lt;title&amp;gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&amp;#39;&lt;/span&gt; */&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;// @&lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; // group memebers here ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;// @&lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;where the &lt;code class="verbatim"&gt;title&lt;/code&gt; is optional while the &lt;code class="verbatim"&gt;label&lt;/code&gt; is mandatory and can be used for reference by&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt;\r&lt;/span&gt;ef &amp;lt;label&amp;gt; &lt;span style="color:#0a3069"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&amp;lt;link&amp;gt;&lt;span style="color:#0a3069"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-4"&gt;&#10;&lt;h4 id="headline-7"&gt;&#10;Formula&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Inline formula&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt;\f&lt;/span&gt;$ ... &lt;span style="color:#0a3069"&gt;\f&lt;/span&gt;$&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Centered formula&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt;\f&lt;/span&gt;&lt;span style="color:#0550ae"&gt;[&lt;/span&gt; ... &lt;span style="color:#0a3069"&gt;\f&lt;/span&gt;&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-4"&gt;&#10;&lt;h4 id="headline-8"&gt;&#10;Graph&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-4"&gt;&#10;&lt;p&gt;Doxygen can automatically generate graphs by &lt;a href="./dot.html"&gt;&lt;em&gt;dot&lt;/em&gt;&lt;/a&gt; from Graphviz&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-2" href="#footnote-2"&gt;2&lt;/a&gt;&lt;/sup&gt;. Additionally, mannual dot commands are enclosed between &lt;code class="verbatim"&gt;\dot&lt;/code&gt; and &lt;code class="verbatim"&gt;\enddot&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-4"&gt;&#10;&lt;h4 id="headline-9"&gt;&#10;Text&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\a/\e &amp;lt;word&amp;gt;&lt;/code&gt;: &lt;em&gt;word&lt;/em&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\b &amp;lt;word&amp;gt;&lt;/code&gt;: &lt;strong&gt;word&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\c &amp;lt;word&amp;gt;&lt;/code&gt;: &lt;code class="verbatim"&gt;word&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-10" class="outline-4"&gt;&#10;&lt;h4 id="headline-10"&gt;&#10;Section&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-10" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\attention {...}&lt;/code&gt;: an &lt;strong&gt;Attention&lt;/strong&gt; paragraph&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\author {...}&lt;/code&gt;: author list&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\brief {...}&lt;/code&gt;: a brief description&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\bug {...}&lt;/code&gt;: a bug description&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\date {...}&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\deprecated {...}&lt;/code&gt;: a &lt;strong&gt;Deprecated&lt;/strong&gt; paragraph&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\note {...}&lt;/code&gt;: a &lt;strong&gt;Note&lt;/strong&gt; paragraph&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\par (title) {...}&lt;/code&gt;: a paragraph with a optional title&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\param &amp;lt;p&amp;gt; {...}&lt;/code&gt;: a description of &lt;strong&gt;parameter&lt;/strong&gt; &lt;code class="verbatim"&gt;p&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\return {...}&lt;/code&gt;: a description of &lt;strong&gt;return&lt;/strong&gt; values&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\remarks {...}&lt;/code&gt;: a &lt;strong&gt;Remarks&lt;/strong&gt; paragraph&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\sa/\see {ref}&lt;/code&gt;: a &lt;strong&gt;See Also&lt;/strong&gt; paragraph&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\todo {...}&lt;/code&gt;: a &lt;strong&gt;To Do&lt;/strong&gt; paragraph&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\version {...}&lt;/code&gt;: a paragraph including the version string&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\warning {...}&lt;/code&gt;: a paragraph for warning messages&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Python - TDoc</title><link>https://shakaxi.github.io/posts/python_tdoc/</link><pubDate>Sat, 07 Sep 2024 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_tdoc/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;In order to facilitate the tdoc. related processing, I wrote a simple module using Python, termed &lt;code class="verbatim"&gt;tdoc&lt;/code&gt;, based on&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Builtin modules, &lt;code class="verbatim"&gt;os&lt;/code&gt;, &lt;code class="verbatim"&gt;functools&lt;/code&gt;, &lt;code class="verbatim"&gt;multiprocessing&lt;/code&gt;, &lt;code class="verbatim"&gt;argparse&lt;/code&gt;; and&lt;/li&gt;&#10;&lt;li&gt;3rd party libraries, &lt;code class="verbatim"&gt;pandas&lt;/code&gt;, &lt;code class="verbatim"&gt;pybtex&lt;/code&gt;, &lt;code class="verbatim"&gt;urllib&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Features&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;It takes a tdoc. list file, usually has a &lt;code class="verbatim"&gt;xlsx&lt;/code&gt; extension name, as input.&lt;/li&gt;&#10;&lt;li&gt;It optionally filters the target tdocs. with agenda item, title, and/or author (e.g., company).&lt;/li&gt;&#10;&lt;li&gt;It can download tdocs. interested from &lt;a href="https://www.3gpp.org/ftp"&gt;3GPP&lt;/a&gt; using multithreading (with configurable thread number) to a specified directory.&lt;/li&gt;&#10;&lt;li&gt;It can build a database based on the tdocs. after necessary filtering, and export it to a &lt;code class="verbatim"&gt;bib&lt;/code&gt; file.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Syntax&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;p&gt;Its syntax can be listed as follows by run &lt;code class="verbatim"&gt;python tdoc.py --help&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; usage: tdoc.py &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;-h&lt;span style="color:#0550ae"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;--remote_dir REMOTE_DIR&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;--output_dir OUTPUT_DIR&lt;span style="color:#0550ae"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;--agenda_item AGENDA&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;--title TITLE&lt;span style="color:#0550ae"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;--author AUTHOR&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;--bibtex_file BIBTEX_FILE&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;--thread_num THREAD_NUM&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tdoc_list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; positional arguments:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tdoc_list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; options:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -h, --help show this &lt;span style="color:#6639ba"&gt;help&lt;/span&gt; message and &lt;span style="color:#6639ba"&gt;exit&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --remote_dir REMOTE_DIR&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --output_dir OUTPUT_DIR&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --agenda_item AGENDA&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --title TITLE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --author AUTHOR&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --bibtex_file BIBTEX_FILE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --thread_num THREAD_NUM&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Orthogonal Matching Pursuit (OMP)</title><link>https://shakaxi.github.io/posts/omp/</link><pubDate>Fri, 06 Sep 2024 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/omp/</guid><description>&lt;p&gt;&#10;&lt;em&gt;Matching pursuit (MP)&lt;/em&gt; and its improvement &lt;em&gt;orthogonal matching pursuit (OMP)&lt;/em&gt; are both popular algorithms in &lt;em&gt;compressive sensing (CS)&lt;/em&gt;. Compared to MP, OMP can offer better performance, e.g. in respects of higher precision and faster convergency. This post aims to summarize the detailed procedure of OMP.&lt;/p&gt;&#10;&lt;p&gt;&#10;Given a NP-hard problem&lt;/p&gt;&#10;\begin{align*}&#10; \mathcal{L}:\quad &amp;amp;\arg\min_{\mathbf{x}}\|\mathbf{x}\|_0 \\&#10; \mathrm{subject~to}\quad &amp;amp; \mathbf{Ax} = \mathbf{b}&#10;\end{align*}&#10;&lt;p&gt;where&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;$\mathbf{A} \in \mathbb{C}^{m \times n}$ is a &lt;em&gt;short-fat&lt;/em&gt; matrix, i.e., $n \gg m$.&lt;/li&gt;&#10;&lt;li&gt;$\mathbf{b}\in\mathbb{C}^m$.&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;$\mathbf{x}\in\mathbb{C}^n$.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;$\|\mathbf{x}\|_0$ is $\ell_0$ norm of $\mathbf{x}$, i.e., the number of non-zero elements of $\mathbf{x}$, a.k.a. the &lt;em&gt;sparsity&lt;/em&gt; of $\mathbf{x}$;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;The set comprising the indices of all non-zero elements in $\mathbf{x}$ is termed the &lt;em&gt;support&lt;/em&gt; of $\mathbf{x}$, denoted by&lt;/p&gt;&#10;\begin{align*}&#10; \mathrm{supp}(\mathbf{x}) \triangleq \{i \mid [\mathbf{x}]_i \neq 0\}.&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Linux - Makefile</title><link>https://shakaxi.github.io/posts/makefile/</link><pubDate>Sat, 03 Aug 2024 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/makefile/</guid><description>&lt;p&gt;&#10;As is well-known, &lt;code class="verbatim"&gt;makefile&lt;/code&gt; is a text file which specifies the behavior of &lt;code class="verbatim"&gt;make&lt;/code&gt;. According to the rules in makefile, a project can be automatically built in a fairly smart way.&lt;/p&gt;&#10;&lt;p&gt;&#10;Given a project, different from Windows platform, where the required makefile is implicitly generated by the IDE in use; in Unix/Linux, it is of the most importance to compose a makefile. Only in this way, we can control the building and linking of the given project to maximum extent.&lt;/p&gt;</description></item><item><title>Least Square and Its Iterative Approach (RLS)</title><link>https://shakaxi.github.io/posts/rls/</link><pubDate>Wed, 29 May 2024 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/rls/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;As is well-known, &lt;em&gt;least square (LS)&lt;/em&gt; is the optimal linear unbiased estimator, which plays an extremely important role in the classic estimation theory. This document motivates to illustrate the fundamental of LS algorithm. However, LS algorithm suffers rather high complexity, especially for the operation of matrix inversion, which greatly limits its application in practice. In order to reduce the computational complexity, an iterative approach, a.k.a. &lt;em&gt;recursive LS (RLS)&lt;/em&gt;, has been proposed.&lt;/p&gt;&#10;&lt;p&gt;&#10;The remainder part of the document is structured as follows. In Section &lt;a href="#sec:ls"&gt;#sec:ls&lt;/a&gt;, the principle of LS algorithm is derived in detail. Then its iterative solution, i.e., RLS algorithm, follows in Section &lt;a href="#sec:rls"&gt;#sec:rls&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Fourier Transform</title><link>https://shakaxi.github.io/posts/fourier/</link><pubDate>Thu, 02 May 2024 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/fourier/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Fourier Series&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;Continuous Fourier Series&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;\begin{align*}&#10; \tilde{x}(t) &amp;amp;= \frac{1}{T} \sum_{k=-\infty}^{\infty}X_a \left( k\frac{2\pi}{T} \right) e^{j\frac{2\pi}{T}kt} \\&#10;X_a \left( k\frac{2\pi}{T} \right) &amp;amp;= \int_{-\frac{T}{2}}^{\frac{T}{2}} \tilde{x}(t) e^{-j\frac{2\pi}{T}kt} dt&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Discrete Fourier Series&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;\begin{align*}&#10; \tilde{x}(n) &amp;amp;= \frac{1}{N} \sum_{k=0}^{N-1} \tilde{X}(k)e^{j\frac{2\pi}{N}kn} \\&#10; \tilde{X}(k) &amp;amp;= \sum_{n=0}^{N-1} \tilde{x}(n) e^{-j\frac{2\pi}{N}nk}&#10;\end{align*}&#10;&lt;div id="outline-container-headline-4" class="outline-4"&gt;&#10;&lt;h4 id="headline-4"&gt;&#10;Properties&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-4"&gt;&#10;\begin{align*}&#10; \tilde{x}(n+m) &amp;amp;\leftrightarrow \tilde{X}(k)e^{j\frac{2\pi}{N}km} \\&#10; \tilde{x}^{*}(n) &amp;amp;\leftrightarrow \tilde{X}^{*}(-k) \\&#10; \tilde{x}(-n) &amp;amp;\leftrightarrow \tilde{X}(-k) \\&#10; \sum_{m=0}^{N-1} \tilde{x}_1(m) \tilde{x}_2(n-m) &amp;amp;\leftrightarrow \tilde{X}_1(k) \tilde{X}_2(k) \\&#10; \tilde{x}_1(n) \tilde{x}_2(n) &amp;amp;\leftrightarrow \frac{1}{N} \sum_{\ell=0}^{N-1} \tilde{X}_1(\ell) \tilde{X}_2(k-\ell) \\&#10; \tilde{x}_e(n) &amp;amp;\leftrightarrow \tilde{X}_r(k) \\&#10; \tilde{x}_o(n) &amp;amp;\leftrightarrow j\tilde{X}_i(k) \\&#10; \tilde{x}_r(n) &amp;amp;\leftrightarrow \tilde{X}_e(k) \\&#10; j\tilde{x}_i(n) &amp;amp;\leftrightarrow \tilde{X}_o(k)&#10;\end{align*}&#10;&lt;p&gt;where subscript $r$, $i$, $e$, and $o$ mean the real, imagnary, even, and odd parts of an expression, respectively, i.e,&lt;/p&gt;&#10;\begin{align*}&#10; \tilde{x}(n) &amp;amp;= \tilde{x}_e(n) + \tilde{x}_o(n) \\&#10; &amp;amp;= \tilde{x}_r(n) + j \tilde{x}_i(n) \\&#10; \tilde{x}_e(n) &amp;amp;= \frac{\tilde{x}(n) + \tilde{x}(-n)}{2} \\&#10; \tilde{x}_o(n) &amp;amp;= \frac{\tilde{x}(n) - \tilde{x}(-n)}{2} \\&#10; \tilde{X}(k) &amp;amp;= \tilde{X}_e(k) + \tilde{X}_o(k) \\&#10; &amp;amp;= \tilde{X}_r(k) + j \tilde{X}_i(k) \\&#10; \tilde{X}_e(k) &amp;amp;= \frac{\tilde{X}(k) + \tilde{X}(-k)}{2} \\&#10; \tilde{X}_o(k) &amp;amp;= \frac{\tilde{X}(k) - \tilde{X}(-k)}{2}.&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Wide Sense Fourier Series&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-4"&gt;&#10;&lt;h4 id="headline-6"&gt;&#10;Continuous&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-4"&gt;&#10;&lt;p&gt;Given a continuous time signal space $\mathcal{S}$ defined in range $(t_1, t_2)$, if $\{\phi_i(t) \mid i=1, 2, \ldots, N\}$ is a complete orthogonal basis in $\mathcal{S}$, $\forall x(t) \in \mathcal{S}$, it can be represented as a linear combination of the basis, i.e.,&lt;/p&gt;&#10;\begin{align*}&#10; x(t) = \sum_{i=1}^N a_i \phi_i(t),&#10;\end{align*}&#10;&lt;p&gt;where&lt;/p&gt;&#10;\begin{align*}&#10; a_i = \dfrac{\int_{t_1}^{t_2} x(t) \phi_i^{*}(t) dt}{\int_{t_1}^{t_2}|\phi_i(t)|^2dt}, \quad i = 1, 2, \ldots, N.&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-4"&gt;&#10;&lt;h4 id="headline-7"&gt;&#10;Discrete&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-4"&gt;&#10;&lt;p&gt;Given a discrete time signal space $\mathcal{S}$ defined in range $(n_1, n_2)$, if $\{\phi_i[n] \mid i=1, 2, \ldots, N\}$ is a complete orthogonal basis in $\mathcal{S}$, $\forall x[n] \in \mathcal{S}$, it can be represented as a linear combination of the basis, i.e.,&lt;/p&gt;&#10;\begin{align*}&#10; x[n] = \sum_{i=1}^N a_i \phi_i[n],&#10;\end{align*}&#10;&lt;p&gt;where&lt;/p&gt;&#10;\begin{align*}&#10; a_i = \dfrac{\sum_{n=n_1}^{n_2} x[n] \phi_i^{*}[n]}{\sum_{n=n_1}^{n_2}|\phi_i[n]|^2}, \quad i = 1, 2, \ldots, N.&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>LaTeX - Pgf/Tikz</title><link>https://shakaxi.github.io/posts/latex_tikz/</link><pubDate>Sun, 25 Feb 2024 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/latex_tikz/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;em&gt;Pgf/tikz&lt;/em&gt; is an excellent &lt;em&gt;LaTeX&lt;/em&gt; package to plot high quality graphs. This post just summaries its basic usages.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;Pgf/Tikz is a built-in package in the &lt;a href="http://tug.org"&gt;texlive&lt;/a&gt;. As long as texlive is ready, pgf/tikz is out-of-the-box.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Basic usage&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Setting&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;tikz&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\tikz&lt;/span&gt; ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\begin&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;tikzpicture&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\end&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;tikzpicture&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Style&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-4"&gt;&#10;&lt;h4 id="headline-6"&gt;&#10;Create a new style&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-4"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\tikzstyle&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;newstylename&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;=[option1=value1, option2=value2, ...]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;For example, following &lt;a href="https://www.overleaf.com/learn/latex/LaTeX_Graphics_using_TikZ%3A_A_Tutorial_for_Beginners_(Part_3)%E2%80%94Creating_Flowcharts"&gt;styles&lt;/a&gt; can be defined for nodes in a flowchart.&lt;/p&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\tikzstyle&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;startstop&lt;span style="color:#6639ba"&gt;}&lt;/span&gt; = [rectangle, rounded corners, minimum width=3cm, minimum height=1cm, text centered, text width=5cm, draw=black, fill=red!30]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\tikzstyle&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;io&lt;span style="color:#6639ba"&gt;}&lt;/span&gt; = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=3cm, minimum height=1cm, text centered, text width=5cm, draw=black, fill=blue!30]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\tikzstyle&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;process&lt;span style="color:#6639ba"&gt;}&lt;/span&gt; = [rectangle, minimum width=3cm, minimum height=1cm, text centered, text width=5cm, draw=black, fill=orange!30]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\tikzstyle&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;decision&lt;span style="color:#6639ba"&gt;}&lt;/span&gt; = [diamond, minimum width=3cm, minimum height=1cm, text centered, text width=5cm, draw=black, fill=green!30]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\tikzstyle&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;arrow&lt;span style="color:#6639ba"&gt;}&lt;/span&gt; = [thick, -&amp;gt;, &amp;gt;=stealth]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-4"&gt;&#10;&lt;h4 id="headline-7"&gt;&#10;Modify an existing style&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-4"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\tikzstyle&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;existingstylename&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;+=[option1=value1, option2=value2, ...]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-3"&gt;&#10;&lt;h3 id="headline-8"&gt;&#10;Coordinate&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;(x, y)&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;(angle: radius)&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-3"&gt;&#10;&lt;h3 id="headline-9"&gt;&#10;List&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-3"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;% step length = 1&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;a, ..., b&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;% step length = d&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;a, a + d, ..., b&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-10" class="outline-3"&gt;&#10;&lt;h3 id="headline-10"&gt;&#10;Arrow&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-10" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;-&amp;gt;&lt;/li&gt;&#10;&lt;li&gt;&amp;lt;-&lt;/li&gt;&#10;&lt;li&gt;&amp;lt;-&amp;gt;&lt;/li&gt;&#10;&lt;li&gt;-&amp;gt;&amp;gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-11" class="outline-3"&gt;&#10;&lt;h3 id="headline-11"&gt;&#10;Draw&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-11" class="outline-text-3"&gt;&#10;&lt;div id="outline-container-headline-12" class="outline-4"&gt;&#10;&lt;h4 id="headline-12"&gt;&#10;Line&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-12" class="outline-text-4"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; (x1, y1) -- (x2, y2) -- (x3, y3) -- cycle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-13" class="outline-4"&gt;&#10;&lt;h4 id="headline-13"&gt;&#10;Curve&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-13" class="outline-text-4"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; (x1, y1) .. controls (x2, y2) and (x3, y3) .. (x4, y4);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; (x1, y1) .. controls (x2, y2) .. (x3, y3);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-14" class="outline-4"&gt;&#10;&lt;h4 id="headline-14"&gt;&#10;Grid&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-14" class="outline-text-4"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; [step=s] (x1, y1) grid (x2, y2);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; [xstep=x&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;s, ystep=y&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;s] (x1, y1) grid (x2, y2);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-15" class="outline-4"&gt;&#10;&lt;h4 id="headline-15"&gt;&#10;Arc&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-15" class="outline-text-4"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; (x1, y1) arc (start&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;angle: end&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;angle: radius);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-16" class="outline-4"&gt;&#10;&lt;h4 id="headline-16"&gt;&#10;Rectangle&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-16" class="outline-text-4"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; (x1, y1) rectangle (x2, y2);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\fill&lt;/span&gt; [color] (x1, y1) rectangle (x2, y2);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\filldraw&lt;/span&gt; [fill=color1, draw=color2] (x1, y1) rectangle (x2, y2);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\shade&lt;/span&gt; [inner/top/left color=color1, outer/bottom/right color=color2] (x1, y1) rectangle (x2, y2);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\shadedraw&lt;/span&gt; [inner/top/left color=color1, outer/bottom/right color=color2, draw=color3] (x1, y1) rectangle (x2, y2);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\clip&lt;/span&gt; (x1, y1) rectangle (x2, y2);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-17" class="outline-4"&gt;&#10;&lt;h4 id="headline-17"&gt;&#10;Circle&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-17" class="outline-text-4"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; (x1, y1) circle (radius);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\fill&lt;/span&gt; [color] (x1, y1) circle (radius);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\filldraw&lt;/span&gt; [fill=color1, draw=color2] (x1, y1) circle (radius);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\shade&lt;/span&gt; [inner/top/left color=color1, outer/bottom/right color=color2] (x1, y1) circle (radius);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\shadedraw&lt;/span&gt; [inner/top/left color=color1, outer/bottom/right color=color2, draw=color3] (x1, y1) circle (radius);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\clip&lt;/span&gt; (x1, y1) circle (radius);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-18" class="outline-4"&gt;&#10;&lt;h4 id="headline-18"&gt;&#10;Ellipse&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-18" class="outline-text-4"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; (x1, y1) ellipse (x&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;radius and y&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;radius);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\fill&lt;/span&gt; [color] (x1, y1) ellipse (x&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;radius and y&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;radius);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\filldraw&lt;/span&gt; [fill=color1, draw=color2] (x1, y1) ellipse (x&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;radius and y&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;radius);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\shade&lt;/span&gt; [inner/top/left color=color1, outer/bottom/right color=color2] (x1, y1) ellipse (x&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;radius and y&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;radius);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\shadedraw&lt;/span&gt; [inner/top/left color=color1, outer/bottom/right color=color2, draw=color3] (x1, y1) ellipse (x&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;radius and y&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;radius);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\clip&lt;/span&gt; (x1, y1) ellipse (x&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;radius and y&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;radius);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-19" class="outline-4"&gt;&#10;&lt;h4 id="headline-19"&gt;&#10;Node&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-19" class="outline-text-4"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;(x0, y0) node [anchor=north/south/east/west, shape=circle/rectangle/ellipse, draw=color1, fill=color2, label=angle:node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;label&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;angle] (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name) &lt;span style="color:#6639ba"&gt;{&lt;/span&gt;node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;label&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\node&lt;/span&gt; at (x0, y0) (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name) &lt;span style="color:#6639ba"&gt;{&lt;/span&gt;node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;label&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-20" class="outline-5"&gt;&#10;&lt;h5 id="headline-20"&gt;&#10;Connecting nodes with&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-20" class="outline-text-5"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Lines&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; [arrow] (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;A) to (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;B);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;A) edge [arrow, color] (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;B);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Curves&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; [arrow] (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;A) to [bend left/right=30] (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;B);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; [arrow] (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;A) to [in=30, out=60] (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;B);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;A) edge [arrow, color, in=30, out=60] (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;B);&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\draw&lt;/span&gt; (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;A) edge [arrow, color, bend left/right=30] (node&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;name&lt;span style="color:#6639ba"&gt;_&lt;/span&gt;B);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-21" class="outline-3"&gt;&#10;&lt;h3 id="headline-21"&gt;&#10;Refer to nodes outside current picture&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-21" class="outline-text-3"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\tikzstyle&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;every picture&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;+=[remember picture]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\tikz&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[overlay]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\begin&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;tikzpicture&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;[overlay]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\end&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;tikzpicture&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-22" class="outline-3"&gt;&#10;&lt;h3 id="headline-22"&gt;&#10;Mix tikz command with LaTeX&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-22" class="outline-text-3"&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\tikz&lt;/span&gt; [baseline] ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Cramer-Rao Bound</title><link>https://shakaxi.github.io/posts/crb/</link><pubDate>Mon, 19 Feb 2024 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/crb/</guid><description>&lt;p&gt;&#10;In parameter estimation, the performance of an estimator is usually evaluated in the respects of &lt;em&gt;unbiasedness&lt;/em&gt;, &lt;em&gt;efficiency&lt;/em&gt;, and &lt;em&gt;consistency&lt;/em&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;Take the estimation of parameter $\alpha$ for instance,&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;For an estimator $\hat{\alpha}$, if $\mathrm{E}[\hat{\alpha}] = \alpha$, then the estimator $\hat{\alpha}$ is unbiased.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;If $\lim\limits_{n\to\infty}\mathrm{E}[\hat{\alpha}] = \alpha$, then the estimator $\hat{\alpha}$ is progressively unbiased.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;For two estimators $\hat{\alpha}_1$ and $\hat{\alpha}_2$, if $\mathrm{Var}[\hat{\alpha}_1] &amp;lt; \mathrm{Var}[\hat{\alpha}_2]$, then $\hat{\alpha}_1$ is more efficient than $\hat{\alpha}_2$.&lt;/li&gt;&#10;&lt;li&gt;For an estimator $\hat{\alpha}$, if $\forall \epsilon &amp;gt; 0$, $\exists N \in \mathbb{Z}^+$, when $n &amp;gt; N$, $\mathrm{Prob}[\|\hat{\alpha} - \alpha\| &amp;lt; \epsilon] = 1$; or equivalently $\lim\limits_{n\to\infty}\mathrm{Prob}[\|\hat{\alpha} - \alpha\| &amp;lt; \epsilon] = 1$ holds, then the estimator $\hat{\alpha}$ is consistent.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;An unbiased estimator with minimal variance is termed &lt;em&gt;minimal variance unbiased (MVU)&lt;/em&gt; estimator.&lt;/p&gt;</description></item><item><title>Emacs - RefTeX</title><link>https://shakaxi.github.io/posts/emacs_reftex/</link><pubDate>Mon, 19 Feb 2024 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_reftex/</guid><description>&lt;p&gt;&#10;&lt;em&gt;RefTeX&lt;/em&gt; is a Emacs package dedicated for label, reference, citation, and index related operations in \LaTeX. What is exciting, RefTeX has been integrated into Emacs since version 20.2.&lt;/p&gt;&#10;&lt;p&gt;&#10;RefTeX is easy to use by providing 4 macros, &lt;code class="verbatim"&gt;\label&lt;/code&gt;, &lt;code class="verbatim"&gt;\ref&lt;/code&gt;, &lt;code class="verbatim"&gt;\cite&lt;/code&gt;, and &lt;code class="verbatim"&gt;\index&lt;/code&gt;. It can be configured as follows.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Loading the package&lt;/p&gt;&#10;&lt;div class="src src-elisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-elisp" data-lang="elisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;require&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;reftex&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Turning on the mode&lt;/p&gt;&#10;&lt;div class="src src-elisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-elisp" data-lang="elisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;LaTeX-mode-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;turn-on-reftex&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#57606a"&gt;; with AUCTeX LaTeX mode&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;latex-mode-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;turn-on-reftex&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#57606a"&gt;; with Emacs latex mode&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Integrating with &lt;code class="verbatim"&gt;AUCTeX&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-elisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-elisp" data-lang="elisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;reftex-plug-into-AUCTeX&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Targeting for quick operations, following keybindings are binded by default.&lt;/p&gt;</description></item><item><title>LaTeX - Biblatex</title><link>https://shakaxi.github.io/posts/latex_biblatex/</link><pubDate>Mon, 19 Feb 2024 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/latex_biblatex/</guid><description>&lt;p&gt;&#10;&lt;code class="verbatim"&gt;Biblatex&lt;/code&gt; is a new LaTeX package for bibliography management taking &lt;code class="verbatim"&gt;biber&lt;/code&gt; as backend, and more powerful than &lt;code class="verbatim"&gt;bibtex&lt;/code&gt;. For TeXLive users, &lt;code class="verbatim"&gt;biblatex&lt;/code&gt; is out-of-box.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;LaTeX&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div class="verse-block"&gt;&#10;&lt;p&gt;…&#10;\usepackage[backend=biber, style=numeric]{biblatex}&#10;\addbibresource{PATH/TO/REF.bib}&#10;…&#10;\printbibliography&#10;…&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Org&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;In orgmode, command &lt;code class="verbatim"&gt;org-cite-insert&lt;/code&gt;, binded to &lt;code class="verbatim"&gt;C-c C-x @&lt;/code&gt; by default, is used to insert citation entries.&lt;/p&gt;&#10;&lt;div class="verse-block"&gt;&#10;&lt;p&gt;…&lt;/p&gt;&#10;&lt;p&gt;…&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Python - QAM</title><link>https://shakaxi.github.io/posts/python_qam/</link><pubDate>Mon, 19 Feb 2024 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_qam/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;In order to structure the utility relating to constellation modulation, I wrote a class &lt;code class="verbatim"&gt;Quadrature_Amplitude_Modulation&lt;/code&gt; in Python.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Source code&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;numpy&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; &lt;span style="color:#24292e"&gt;np&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; &lt;span style="color:#24292e"&gt;plt&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;Quadrature_Amplitude_Modulation&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;__init__&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; mod_order&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;None&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&amp;#34;! Constructor for quadrature amplitude modulation (QAM)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; @param mod_order Modulation order, e.g., 4 for QPSK.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;mod_order &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; mod_order&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;bit_num_sym &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;log2&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;mod_order&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; m &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;sqrt&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;mod_order&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;linspace&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; m&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; m &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;m&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; x&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; y &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;meshgrid&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;v&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; v&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;const &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;reshape&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;x &lt;span style="color:#0550ae"&gt;+&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;j &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; y&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;sqrt&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;mod_order &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt; &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;name &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;QPSK&amp;#34;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; mod_order &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#0550ae"&gt;4&lt;/span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; &lt;span style="color:#0a3069"&gt;f&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#0a3069"&gt;{&lt;/span&gt;mod_order&lt;span style="color:#0a3069"&gt;}&lt;/span&gt;&lt;span style="color:#0a3069"&gt;QAM&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;calc_mi&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; sinr&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;float&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; sample_num&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1000&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;float&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&amp;#34;! Calculate the per-symbol mutual information, a.k.a. RBIR, for the specified SINR.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; @param sinr SINR in dB&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; @param sample_num Number of random samples&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; @return Per-bit information&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n_pwr &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;power&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;10&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0.1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; sinr&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;random&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;randn&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;sample_num&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;+&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;j &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;random&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;randn&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;sample_num&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; n &lt;span style="color:#0550ae"&gt;*=&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;sqrt&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;n_pwr &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; si &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;zeros&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;mod_order&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; sample_num&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; sym_idx &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; &lt;span style="color:#6639ba"&gt;range&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;mod_order&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; sample_idx &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; &lt;span style="color:#6639ba"&gt;range&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;sample_num&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; x &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;power&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;abs&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;const &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;const&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;sym_idx&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;+&lt;/span&gt; n&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;sample_idx&lt;span style="color:#1f2328"&gt;]),&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;power&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;abs&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;n&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;sample_idx&lt;span style="color:#1f2328"&gt;]),&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; si&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;sym_idx&lt;span style="color:#1f2328"&gt;][&lt;/span&gt;sample_idx&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;sum&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;exp&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt; x &lt;span style="color:#0550ae"&gt;/&lt;/span&gt; n_pwr&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;bit_num_sym &lt;span style="color:#0550ae"&gt;-&lt;/span&gt; np&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;log2&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;si&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;mean&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;visualize&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; ax&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; plt&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;Axes &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#cf222e"&gt;None&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;**&lt;/span&gt;kwargs&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;None&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;&amp;#34;&amp;#34;! Visualize the constellation&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; @param ax An axis object&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; @param kwargs Keyword argument for further customization&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0a3069"&gt; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; ax &lt;span style="color:#0550ae"&gt;is&lt;/span&gt; &lt;span style="color:#cf222e"&gt;None&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; _&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; ax &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; plt&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;subplots&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ax&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;scatter&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;const&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;real&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;const&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;imag&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;**&lt;/span&gt;kwargs&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ax&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;set_xlabel&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;In-phase&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ax&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;set_ylabel&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;Quadrature&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ax&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;set_title&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;name&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ax&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;set_aspect&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;equal&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ax&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;grid&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;True&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>TR38.901</title><link>https://shakaxi.github.io/posts/tr38901/</link><pubDate>Mon, 19 Feb 2024 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/tr38901/</guid><description>&lt;p&gt;&#10;3GPP TR38.901 offers the guidance and methodology of channel modelling, including both system-level simulation (SLS) and link-level simulation (LLS).&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Coordinate systems&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;em&gt;Global coordinate system (GCS)&lt;/em&gt; and &lt;em&gt;local coordinate system (LCS)&lt;/em&gt; are linked by a rotational matrix $\mathbf{R}$, which can be decomposed as 3 successive primary rotations around Z/Y/X axes respectively. Accordingly, the composite rotational matrix $\mathbf{R}$ can be expressed as the product of 3 Givens rotation matrices.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Large-scale fading&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;In SLS, large scale attenuation needs to be modelled. &lt;em&gt;Coupling loss&lt;/em&gt; is defined as the combination of distance-dependent path loss, shadow fading, antenna gain at the transmitter and receiver, &lt;em&gt;outdoor-to-indoor (O2I)&lt;/em&gt; penetration loss&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Path loss is usually dependent on propagation types, i.e. &lt;em&gt;line-of-sight (LOS)&lt;/em&gt; or &lt;em&gt;non-line-of-sight (NLOS)&lt;/em&gt;.&lt;/li&gt;&#10;&lt;li&gt;Propagation type, LOS/NLOS, is per site&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-2" href="#footnote-2"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;&#10;&lt;li&gt;Location type, i.e. indoor or outdoor, is per user&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-3" href="#footnote-3"&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;&#10;&lt;li&gt;Shadow fading is per site&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-4" href="#footnote-4"&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;&#10;&lt;li&gt;O2I penetration loss is per user&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-5" href="#footnote-5"&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Kalman Filter</title><link>https://shakaxi.github.io/posts/kalman_filter/</link><pubDate>Sat, 17 Feb 2024 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/kalman_filter/</guid><description>&lt;p&gt;&#10;Without loss of generality, the &lt;em&gt;probability density function (pdf)&lt;/em&gt; of Gaussian distribution can be denoted by function&lt;/p&gt;&#10;\begin{align*}&#10;N(x, \mu, \sigma) = \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{(x-\mu)^2}{2\sigma^2}},&#10;\end{align*}&#10;&lt;p&gt;where $\mu$ and $\sigma$ are the mean and standard deviation repectively. Then, we have&lt;/p&gt;&#10;\begin{align*}&#10;N(x, \mu_1, \sigma_1) N(x, \mu_2, \sigma_2) = \frac{e^{-\cfrac{(\mu_1-\mu_2)^2}{2(\sigma_1^2+\sigma_2^2)}}}{\sqrt{2\pi(\sigma_1^2+\sigma_2^2)}} N\left(x, \frac{\mu_1\sigma_2^2 + \mu_2\sigma_1^2}{\sigma_1^2 + \sigma_2^2}, \frac{\sigma_1^2\sigma_2^2}{\sigma_1^2+\sigma_2^2}\right)&#10;\end{align*}</description></item><item><title>Matplotlib</title><link>https://shakaxi.github.io/posts/matplotlib/</link><pubDate>Sun, 03 Sep 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/matplotlib/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Background&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;a href="https://matplotlib.org"&gt;Matplotlib&lt;/a&gt; is a popular python package for figure plot and data visualization.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pip install matplotlib&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Submodules&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;p&gt;Matplotlib comes with a series of submodules, e.g.,&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;matplotlib.pyplot&lt;/code&gt; is the counterpart of Matlab in matplotlib, which is essentially a collection of functions similar to Matlab.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;matplotlib.pylab&lt;/code&gt; is a convenience module which imports &lt;code class="verbatim"&gt;matplotlib.pyplot&lt;/code&gt; (for plotting) and &lt;code class="verbatim"&gt;numpy&lt;/code&gt; (for array related operations) in a single name space.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-2"&gt;&#10;&lt;h2 id="headline-4"&gt;&#10;General Concepts&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-2"&gt;&#10;&lt;p&gt;In Matplotlib, there are some important concepts which can be illustrated below.&lt;/p&gt;&#10;&lt;figure&gt;&#10;&lt;img src="./matplotlib_concept.png" alt="./matplotlib_concept.png" title="./matplotlib_concept.png" width="300px"/&gt;&#10;&lt;figcaption&gt;&#10;Concepts in a figure in Matplotlib (from &lt;a href="https://matplotlib.org/1.5.1/faq/usage_faq.html)"&gt;https://matplotlib.org/1.5.1/faq/usage_faq.html)&lt;/a&gt;&#10;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&#10;A typical matplotlib &lt;code class="verbatim"&gt;Figure&lt;/code&gt; is comprised of a variety of components, as show below.&lt;/p&gt;&#10;&lt;figure&gt;&#10;&lt;img src="./matplotlib_component.png" alt="./matplotlib_component.png" title="./matplotlib_component.png" width="300px"/&gt;&#10;&lt;figcaption&gt;&#10;Components of a figure in Matplotlib (from &lt;a href="https://matplotlib.org/stable/tutorials/introductory/usage.html)"&gt;https://matplotlib.org/stable/tutorials/introductory/usage.html)&lt;/a&gt;&#10;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;&lt;code class="verbatim"&gt;Figure&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;A &lt;code class="verbatim"&gt;Figure&lt;/code&gt; object is essentially a canvas on which plot operations are performed. Clearly, it consists of one or more &lt;code class="verbatim"&gt;Axes&lt;/code&gt; objects.&lt;/p&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; &lt;span style="color:#24292e"&gt;plt&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Create an empty Figure object without any Axes.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fig &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; plt&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;figure&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fig &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; plt&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;figure&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;figsize&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;WIDTH&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; HEIGHT&lt;span style="color:#1f2328"&gt;),&lt;/span&gt; dpi&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;DPI&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Create a Figure object including one Axes.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fig&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; ax &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; plt&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;subplots&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Create a Figure object including 2 x 3 Axes.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; fig&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; ax &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; plt&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;subplots&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;matplotlib.pyplot.gcf()&lt;/code&gt; can get the current &lt;code class="verbatim"&gt;Figure&lt;/code&gt; object.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;&lt;code class="verbatim"&gt;Axes&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Create &lt;code class="verbatim"&gt;Axes&lt;/code&gt; objects.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;matplotlib.pyplot.subplots&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;figure.add_axes&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;A &lt;code class="verbatim"&gt;Axes&lt;/code&gt; object consists of a multiplicity &lt;code class="verbatim"&gt;Axis&lt;/code&gt; objects, e.g.,&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;2 &lt;code class="verbatim"&gt;Axis&lt;/code&gt; objects in a 2-dimension plot, e.g.., X-axis and Y-axis.&lt;/li&gt;&#10;&lt;li&gt;3 &lt;code class="verbatim"&gt;Axis&lt;/code&gt; objects in a 3-dimension plot, e.g.., X-axis, Y-axis, and Z-axis.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;A &lt;code class="verbatim"&gt;Figure&lt;/code&gt; object&amp;#39;s member function &lt;code class="verbatim"&gt;gca()&lt;/code&gt; can get the current &lt;code class="verbatim"&gt;Axes&lt;/code&gt; object.&lt;/li&gt;&#10;&lt;li&gt;A &lt;code class="verbatim"&gt;Figure&lt;/code&gt; object&amp;#39;s member function &lt;code class="verbatim"&gt;subplots&lt;/code&gt; can create one or more &lt;code class="verbatim"&gt;Axes&lt;/code&gt; objects. &lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Member functions&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;plot(X, Y)&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;set_xlabel(&amp;#34;XLABEL&amp;#34;)&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;set_ylabel(&amp;#34;YLABEL&amp;#34;)&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;set_title(&amp;#34;TITLE&amp;#34;)&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;set_xticks(&amp;#34;XTICKS&amp;#34;)&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;set_yticks(&amp;#34;YTICKS&amp;#34;)&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;set_xlim([XMIN, XMAX])&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;set_ylim([YMIN, YMAX])&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;legend()&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;set_prop_cycle()&lt;/code&gt; : Set the random seed of colors, e.g., &lt;code class="verbatim"&gt;None&lt;/code&gt; for reset to the default.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-3"&gt;&#10;&lt;h3 id="headline-7"&gt;&#10;&lt;code class="verbatim"&gt;Axis&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-3"&gt;&#10;&lt;p&gt;Just as its name indicates, a &lt;code class="verbatim"&gt;Axis&lt;/code&gt; object defines the properties and attributes of a axis, e.g., limits, ticks, and ticklabels.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>C++ - Basic</title><link>https://shakaxi.github.io/posts/cpp_basic/</link><pubDate>Sat, 08 Jul 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/cpp_basic/</guid><description>&lt;p&gt;&#10;本文是阅读 &lt;em&gt;Professional C++, third edition&lt;/em&gt; 中文版&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;的读书笔记.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;预处理指令&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;预处理指令以 &lt;code class="verbatim"&gt;#&lt;/code&gt; 字符开始. 如 &lt;code class="verbatim"&gt;#pragma once&lt;/code&gt; 可以防止文件被包含多次.&lt;/li&gt;&#10;&lt;li&gt;头文件最常见的用途是声明在其他地方定义的函数.&lt;/li&gt;&#10;&lt;li&gt;宏是C遗留下来的, 类似于内联函数, 但不执行类型检测, 在调用宏时, 预处理器会自动用扩展式替换, 并不会真正地应用函数调用语义, 这一行为可能导致无法预测的结果. 应该全部用内联函数替代宏.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;头文件&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;头文件是为子系统或者代码段提供抽象接口的一种机制. 使用头文件需要注意两个方面&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;避免循环引用. 使用前置声明(forward declarations).&lt;/li&gt;&#10;&lt;li&gt;避免多次引用同一个头文件. 使用头文件保护(include guards), 如 &lt;code class="verbatim"&gt;#ifndef&lt;/code&gt; 机制或者 &lt;code class="verbatim"&gt;#pragma once&lt;/code&gt; 指令.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;建议尽可能使用前置声明, 而不是包含其他头文件. 这可以减少编译和重编译时间, 因为它破坏了一个头文件对其他头文件的依赖. 当然, 实现文件需要包含前置声明的类型的正确头文件, 否则无法编译.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;函数&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;函数声明通常称为&amp;#34;函数原型&amp;#34;或&amp;#34;签名&amp;#34;, 以强调其代表函数的访问方式, 而不是具体的代码.&lt;/li&gt;&#10;&lt;li&gt;函数参数的默认值只能存在于函数声明中, 不能放在函数定义中.&lt;/li&gt;&#10;&lt;li&gt;与C不同, 在C++中没有形参的函数仅需要一个空的圆括号, 不需要使用 &lt;code class="verbatim"&gt;void&lt;/code&gt; 指出此处没有形参. 然而, 如果没有返回值, 仍需要使用 &lt;code class="verbatim"&gt;void&lt;/code&gt; 来指明这一点.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;main()&lt;/code&gt; 函数是程序的入口. &lt;code class="verbatim"&gt;main()&lt;/code&gt; 函数返回一个 &lt;code class="verbatim"&gt;int&lt;/code&gt; 值以指示程序的最终执行状态. &lt;code class="verbatim"&gt;main()&lt;/code&gt; 函数或者没有参数, 或者具有两个参数.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; main&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; argc&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt;&lt;span style="color:#0550ae"&gt;*&lt;/span&gt; argv&lt;span style="color:#1f2328"&gt;[])&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;自C++11以来, C++通过拖尾返回类型(trailing return type)支持一种替代的函数语法. 函数的返回类型不再位于开头, 而放在行尾的箭头 &lt;code class="verbatim"&gt;-&amp;gt;&lt;/code&gt; 后面. 这在指定模板函数的返回类型时非常有用.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;auto&lt;/span&gt; &lt;span style="color:#6639ba"&gt;func&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; i&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; i &lt;span style="color:#0550ae"&gt;+&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;C++14允许要求编译器自动推断出函数的返回类型. 为此, 需要指定返回类型为 &lt;code class="verbatim"&gt;auto&lt;/code&gt;, 并忽略所有拖尾返回类型.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-2"&gt;&#10;&lt;h2 id="headline-4"&gt;&#10;类型&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;&lt;code class="verbatim"&gt;typedef&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;typedef&lt;/code&gt; 为已有的类型声明提供一个新名称. 可将 &lt;code class="verbatim"&gt;typedef&lt;/code&gt; 看成已有类型声明的同义词, &lt;code class="verbatim"&gt;typedef&lt;/code&gt; 不会创建新的类型.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;typedef&lt;/code&gt; 的最常见用法是当实际类型的声明过于笨拙时, 提供易于管理的名称, 这一情形通常出现在模板中. STL广泛使用 &lt;code class="verbatim"&gt;typedef&lt;/code&gt; 提供类型的简短名称. 如 &lt;code class="verbatim"&gt;string&lt;/code&gt; 实际上是一个 &lt;code class="verbatim"&gt;typedef&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;typedef&lt;/span&gt; basic_string&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;char&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; char_traits&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;char&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; allocator&lt;span style="color:#0550ae"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;char&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;gt;&amp;gt;&lt;/span&gt; string&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;typedef&lt;/code&gt; 可以包括作用域限定符.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;类型别名&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;p&gt;某些情况下, 类型别名比 &lt;code class="verbatim"&gt;typedef&lt;/code&gt; 更容易理解. 例如,&lt;/p&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;typedef&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; my_int&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;可以重写为&lt;/p&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;using&lt;/span&gt; my_int &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>NR - Cell Search</title><link>https://shakaxi.github.io/posts/nr_cell_search/</link><pubDate>Tue, 04 Jul 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/nr_cell_search/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Synchronization signals&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;In NR, synchronization signals consist of &lt;em&gt;primary synchronization signal (PSS)&lt;/em&gt; and &lt;em&gt;secondary synchronization signal (SSS)&lt;/em&gt;. Together with &lt;em&gt;physical broadcast channel (PBCH)&lt;/em&gt;, PSS and SSS are jointly termed &lt;em&gt;synchronization signal block (SSB&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;)&lt;/em&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;A SSB spans 4 OFDM symbols in the time domain and 240 subcarriers in the frequency domain. Within a SSB, the PSS and SSS lie in the 1st and 3rd symbol, respectively. The PBCH situates in the 2nd and 4th symbols, as well as the 48 subcarriers on the each side of the SSS (in the 3rd symbol), as shown in the figure below. Therefore, within a SSB, there are totally $240 + 48 \times 2 + 240 = 576$ RE&amp;#39;s for PBCH transmission&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-2" href="#footnote-2"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#10;&lt;figure&gt;&#10;&lt;img src="./fig/nr_ssb.png" alt="./fig/nr_ssb.png" title="./fig/nr_ssb.png" width="100px"/&gt;&#10;&lt;figcaption&gt;&#10;SSB&#10;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&#10;It should be noted that 60kHz numerology cannot be used for SSB transmission.&lt;/p&gt;&#10;&lt;p&gt;&#10;The SSB is periodically transmitted and the periodicity can be 5/10/20/40/80/160ms. But a UE always assumes that a SSB is repeated at least once every 20ms no matter whether it is the truth.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;PSS&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;p&gt;Similar to LTE, there are 3 PSS sequences, including a basic m-sequence of length 127, and its two cyclically shifted versions&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-3" href="#footnote-3"&gt;3&lt;/a&gt;&lt;/sup&gt;. The initial values of the basic sequence are {0, 1, 1, 0, 1, 1, 1}. The subsequent values can be derived according to&lt;/p&gt;&#10;\begin{align*}&#10;x_0(n) = x_0(n - 7) \oplus x_0(n - 3).&#10;\end{align*}&#10;&lt;p&gt;Then, the cyclically shifted sequences can be obtained by&lt;/p&gt;&#10;\begin{align*}&#10; x_1(n) = x_0(n + 43 \mod 127), \\&#10; x_2(n) = x_0(n + 86 \mod 127).&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;SSS&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;There are 336 SSS sequences which are the sums of two m-sequences with different shifts, i.e.,&lt;/p&gt;&#10;\begin{align*}&#10;x_{m_1, m_2}(n) = x(n + m_1) + y(n + m_2),&#10;\end{align*}&#10;&lt;p&gt;where the two m-sequences can be obtained according to&lt;/p&gt;&#10;\begin{align*}&#10; x(n) = x(n - 7) \oplus x(n - 3), \\&#10; y(n) = y(n - 7) \oplus y(n - 6).&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>NR - Demodulation Reference Signal (DMRS)</title><link>https://shakaxi.github.io/posts/nr_dmrs/</link><pubDate>Mon, 03 Jul 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/nr_dmrs/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Conceptions&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Just as its name indicates, &lt;em&gt;demodulation reference signal (DMRS)&lt;/em&gt; is the reference signal dedicated for demodulation. Different from LTE system, the DMRS in NR system is comprised of a &lt;em&gt;frontloaded DMRS&lt;/em&gt; and a few optional &lt;em&gt;additional DMRS&lt;/em&gt;.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;Frontloaded DMRS&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;p&gt;Frontloaded DMRS aims to reduce the duration of demodulation and decoding. There are a couple of mapping schemes.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;em&gt;Mapping type A&lt;/em&gt;: it lies the symbol second to the PDCCH region, e.g., in normal-slot-based transmission.&lt;/li&gt;&#10;&lt;li&gt;&lt;em&gt;Mapping type B&lt;/em&gt;: it begins with the first data symbol scheduled, e.g., in mini-slot-based transmission.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Additional DMRS&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;Additional DMRS is proposed to support high speed mobility, e.g., 500km/h. Each additional DMRS is a simple repetition of the corresponding frontloaded DMRS, e.g., identical subcarriers and equal OFDM symbol number.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;For single-symbol frontloaded DMRS, up to 3 additional DMRS can be supported.&lt;/li&gt;&#10;&lt;li&gt;For double-symbol frontloaded DMRS, at most 1 additional DMRS is supported.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Channel State Information Reference Signal (CSI-RS)</title><link>https://shakaxi.github.io/posts/nr_csirs/</link><pubDate>Sun, 02 Jul 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/nr_csirs/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;In NR system, &lt;em&gt;channel state information reference signal (CSI-RS)&lt;/em&gt; plays a variety of roles, including&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;CSI measurement&lt;/li&gt;&#10;&lt;li&gt;Beam management&lt;/li&gt;&#10;&lt;li&gt;Tracking&lt;/li&gt;&#10;&lt;li&gt;Mobility management&lt;/li&gt;&#10;&lt;li&gt;Rate match&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Generally, there are two types of CSI-RS, termed &lt;em&gt;non-zero-power (NZP)&lt;/em&gt; CSI-RS and &lt;em&gt;zero-power (ZP)&lt;/em&gt; CSI-RS, respectively. The former is configured by .&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Sequence Generation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;CSI-RS symbols are a sequence of QPSK-modulated Gold sequence, which is initialized with&lt;/p&gt;&#10;\begin{align*}&#10; c_{\text{init}} = \left[ 2^{10}(N_{\text{symb}}^{\text{slot}}n_{s,f}^{\mu} + \ell + 1)(2n_{\text{ID}}+1) + n_{\text{ID}} \right] \mod 2^{31}&#10;\end{align*}&#10;&lt;p&gt;where&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;$N_{\text{symb}}^{\text{slot}}$ is the number of symbols in a slot.&lt;/li&gt;&#10;&lt;li&gt;$n_{s,f}^{\mu}$ is the index of the slot within a frame.&lt;/li&gt;&#10;&lt;li&gt;$\ell$ is the index of the symbol within a slot.&lt;/li&gt;&#10;&lt;li&gt;$n_{\text{ID}}$ is configured by .&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>NR - Downlink Codebook</title><link>https://shakaxi.github.io/posts/nr_dl_cb/</link><pubDate>Sun, 02 Jul 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/nr_dl_cb/</guid><description>&lt;p&gt;&#10;In NR release 15, there are roughly two types of codebooks for spatial-domain CSI acquisition, termed &lt;em&gt;type I&lt;/em&gt; and &lt;em&gt;type II&lt;/em&gt;, respectively. The former is comprised of a finite set of vectors or matrices, as the same as the codebook in LTE systems. While for the type II codebook, each precoding vector is represented as a linear weighted sum of an incomplete orthogonal basis vectors. Further, frequency-domain compression is introduced in NR release 16 for enhancement, which is expected to remarkably reduce the feedback overhead. Note that this section aims to reveal the rationale behind the codebook design, in lieu of covering everything detail related in the specifications.&lt;/p&gt;</description></item><item><title>Git</title><link>https://shakaxi.github.io/posts/git/</link><pubDate>Sat, 01 Jul 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/git/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;em&gt;Git&lt;/em&gt; is a famous and powerful open-source software for version control and management. It was developed by Linus Torvalds with C programing language. What is different from &lt;em&gt;subversion&lt;/em&gt;, git adopts a completely distributed manner. Regarding its utilization, besides its built-in manual, there is also an excellent book, &lt;em&gt;Pro Git&lt;/em&gt;, which can be obtained for free&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;. This post just summarizes the preliminary usage of git, which is referred from the book.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;Objects&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;p&gt;In git, there are 3 types of objects defined, &lt;em&gt;blob&lt;/em&gt;, &lt;em&gt;tree&lt;/em&gt;, and &lt;em&gt;commit&lt;/em&gt;. In order to view its properties, a dedicated command &lt;code class="verbatim"&gt;git cat-file&lt;/code&gt; is provided. Its type and content can be returned with option &lt;code class="verbatim"&gt;-t&lt;/code&gt; and &lt;code class="verbatim"&gt;-p&lt;/code&gt; respectively.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;A blob keeps the content of a binary compressed file.&lt;/li&gt;&#10;&lt;li&gt;A tree represents a directory, including its hierarchy, permission, and the names of its componential files.&lt;/li&gt;&#10;&lt;li&gt;A commit is essentially a SHA-1 hash.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;A branch or a tag is nothing but a pointer pointing at the SHA-1 hash of a commit. Moreover, &lt;code class="verbatim"&gt;HEAD&lt;/code&gt; is also a pointer, which always points the active branch at the time.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Areas&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;In the utilization of git, there are four important areas for storage, &lt;em&gt;workspace&lt;/em&gt;, &lt;em&gt;index&lt;/em&gt; (or &lt;em&gt;stage&lt;/em&gt;), &lt;em&gt;repository&lt;/em&gt; and &lt;em&gt;remote&lt;/em&gt;. Their relationship can be illustrated by the figure below.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="./git.png" alt="./git.png" title="./git.png" /&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>LTE - PCFICH</title><link>https://shakaxi.github.io/posts/lte_pcfich/</link><pubDate>Sat, 01 Jul 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/lte_pcfich/</guid><description>&lt;p&gt;&#10;As its name implies, &lt;em&gt;physical control format indicator channel (PCFICH)&lt;/em&gt; indicates the size of the control region, or equivalently the position where data region starts, of the instant subframe in terms of the number of OFDM symbols.&lt;/p&gt;&#10;&lt;p&gt;&#10;There are totally 2 bits for PCFICH corresponding to the three candidate control region sizes. As illustrated in Figure &lt;a href="fig:lte-pcfich"&gt;fig:lte-pcfich&lt;/a&gt;, the 2-bit payload is first coded into a 32-bit codeword, i.e. the code rate is 1/16, and then scrambled by a cell-specific and subframe-specific sequence to randomize and whiten the &lt;em&gt;inter-cell interference (ICI)&lt;/em&gt;. After that, the codeword is modulated as 16 QPSK symbols and mapped to 4 &lt;em&gt;resource element groups (REG&amp;#39;s)&lt;/em&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt; in the first OFDM symbol of each subframe. Targetting for frequency diversity, the spacing between each two adjacent REG&amp;#39;s is 1/4 of the bandwidth.&lt;/p&gt;</description></item><item><title>NR - Phase Tracking Reference Signal (PTRS)</title><link>https://shakaxi.github.io/posts/nr_ptrs/</link><pubDate>Sat, 01 Jul 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/nr_ptrs/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Targetting for the great goal of the 5th generation (5G) system, the &lt;em&gt;new radio (NR)&lt;/em&gt; system, proposed by the 3rd generation partner project (3GPP), has employed a variety of cutting-edge technologies, including advanced channel coding schemes, e.g., low density parity code (LDPC) and polar code, higher-order modulation schemes, e.g., 256QAM, etc. Considering the fact that the lower frequency spectrum has already been so crowded and overutilized, NR decided to explore higher frequency band, e.g., million meter wave (mmWave). After all, much richer spectrum resources are available at higher frequency bands than lower frequency spectrum.&lt;/p&gt;&#10;&lt;p&gt;&#10;As is well-known, high frequency transmission suffers severe attenuation loss in the propagation, which remarkably limits the effective coverage and transmission distance. Fortunately, higher frequency spectrum has shorter wave length. Given an aperture size, much more antennas can be equipped in higher frequency transmission than those in lower frequency transmission. In this way, more antennas can yield larger beamforming gain and complement the attenuation loss in the transmission over the higher frequency bands. In a word, higher frequency enables the dense deployment of antennas, i.e., &lt;em&gt;massive multi-input multi-output (M-MIMO)&lt;/em&gt;, or equivalently &lt;em&gt;large-scale MIMO (LS-MIMO)&lt;/em&gt;; while M-MIMO extends the transmission distance and coverage of the higher frequency bands. Therefore, M-MIMO and higher frequency transmission are usually jointly utilized and have been the focus of the research and discussion in the 3GPP standardization.&lt;/p&gt;&#10;&lt;p&gt;&#10;Generally, an oscillator always produces phase noise, which is essentially an impairment of the oscillator. Nevertheless, the phase noise soars as the operation frequency grows. In the NR system, which operates on higher frequency spectrum, the impact of phase noise cannot be ignored. Instead, the phase noise must be accurately estimated and complemented before data detection. To this end, a dedicated reference signal, termed &lt;em&gt;phase tracking reference signal (PTRS)&lt;/em&gt; has been proposed to track the fluctuation of the phase noise.&lt;/p&gt;&#10;&lt;p&gt;&#10;This report intends to cover the detail relating to PTRS. The remaining of this report is structured as follows. Section &lt;a href="#sec:pn-model"&gt;#sec:pn-model&lt;/a&gt; briefly introduces the models of phase noise, and Section &lt;a href="#sec:presence-density"&gt;#sec:presence-density&lt;/a&gt; provides the configuration of PTRS, including its presence and density in the time and frequency domain. The number of PTRS supported is given in Section &lt;a href="#sec:port-num"&gt;#sec:port-num&lt;/a&gt;. The PTRS port association follows in Section &lt;a href="#sec:port-association"&gt;#sec:port-association&lt;/a&gt;. Then, resource mapping and sequence generation are presented in Sections &lt;a href="#sec:res-map"&gt;#sec:res-map&lt;/a&gt; and &lt;a href="#sec:seq-gen"&gt;#sec:seq-gen&lt;/a&gt; respectively. In Section &lt;a href="#sec:pn-estim-compl"&gt;#sec:pn-estim-compl&lt;/a&gt;, the methodology of phase noise estimation and complementation are described in details. Finally, Section &lt;a href="#sec:summary"&gt;#sec:summary&lt;/a&gt; summarizes the report.&lt;/p&gt;&#10;&lt;p&gt;&#10;For clear description, following denotation conventions are adopted throughout the document. $\otimes$ is the operator of circular convolution. $\mathcal{F}_N \left\{ \cdot \right\} $ is the $N$-point fast Fourier transformation (FFT) operator. &lt;em&gt;Radio resource control (RRC)&lt;/em&gt; signaling and &lt;em&gt;downlink control indicator (DCI)&lt;/em&gt; parameters are illustrated as blue and orange phrases, respectively.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Linux - WiFi6</title><link>https://shakaxi.github.io/posts/linux_wifi6/</link><pubDate>Tue, 09 May 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/linux_wifi6/</guid><description>&lt;p&gt;&#10;Today, I found the wireless network card (Intel Corporation Wi-Fi 6 AX201) is suffering random disconnection. Maybe there is something wrong with the driver in Linux.&lt;/p&gt;&#10;&lt;p&gt;&#10;After several rounds of searching and trying, the problem can be solved by disabling the 11n and 11ac modes, as well as power saving.&lt;/p&gt;&#10;&lt;p&gt;&#10;For ArchLinux, following two lines can be inserted in file &lt;code class="verbatim"&gt;/etc/modprobe.d/iwlwifi.conf&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; options iwlwifi &lt;span style="color:#953800"&gt;power_save&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; options iwlwifi &lt;span style="color:#953800"&gt;11n_disable&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt; &lt;span style="color:#953800"&gt;11ac_disable&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>NR - Multi-TRP Transmission</title><link>https://shakaxi.github.io/posts/nr_mtrp/</link><pubDate>Tue, 09 May 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/nr_mtrp/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Recently, multi-TRP transmission is one of the most remarkable features of NR and consequently the focus of discussion in the standardization of 3GPP, since it is able to efficiently improve the reliability or the efficiency of the transmission.&lt;/p&gt;&#10;&lt;p&gt;&#10;This document tries to provide an in-depth analysis and reveal the rationale behind the technology.&lt;/p&gt;&#10;&lt;p&gt;&#10;For clear description, following denotation conventions have been adopted throughout the document. Scalars, vectors, and matrices are respectively denoted by plain, lower-case boldfaced, and upper-case boldfaced letters. For a complex scalar, $(\cdot)^{*}$ means its conjugate, and $|\cdot|$ gets its absolute value. Given a matrix $\mathbf{A}$, $\mathbf{A}^H$ is its conjugate transposition, and $|\mathbf{A}|$ returns its determinant. Particularly, $\mathbf{I}$ stands for the entity matrix. $\mathbb{C}^{m \times n}$ represents the complex space of dimension $m \times n$. $\mathcal{E}(\cdot)$ is the expectation operator.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>SLNR-based Beamforming</title><link>https://shakaxi.github.io/posts/slnr_bf/</link><pubDate>Tue, 09 May 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/slnr_bf/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;In coordinatd scheduling and beamforming (CS/CB), one of coordinatd multipoint (CoMP) transmission schemes, signal leakage noise power ratio (SLNR)-based beamforming is widely used.&lt;/p&gt;&#10;&lt;p&gt;&#10;Just as its name indicates, SLNR aims to maximize the ratio of desired signal power to the undesired leakage power and noise power.&lt;/p&gt;&#10;&lt;p&gt;&#10;This page is just written to summarize this SLNR-based beamforming scheme.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;System model&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;figure&gt;&#10;&lt;img src="./fig/slnr.png" alt="./fig/slnr.png" title="./fig/slnr.png" width="800px"/&gt;&#10;&lt;figcaption&gt;&#10;System model&#10;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;p&gt;&#10;Without loss of generality, we consider a simple scenario as shown in the figure above. Taking &lt;code class="verbatim"&gt;UE0&lt;/code&gt; for instance, the BS intends to send data to it, i.e. the received signals at other UE&amp;#39;s, e.g. &lt;code class="verbatim"&gt;UE1&lt;/code&gt;, …, &lt;code class="verbatim"&gt;UEn&lt;/code&gt; are all &lt;em&gt;leakage&lt;/em&gt;. The SLNR can be expressed as&lt;/p&gt;&#10;\begin{align}&#10;\text{SLNR}_0 := \frac{\|\mathbf{H}_0 \mathbf{w}_0\|^2}{P_N + \sum_{i\neq 0}\|\mathbf{H}_i \mathbf{w}_0\|^2},&#10;\end{align}&#10;&lt;p&gt;where&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;$P_N$ is the noise power at &lt;code class="verbatim"&gt;UE0&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;$\mathbf{w}_0$ is the beamforming vector intended for &lt;code class="verbatim"&gt;UE0&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;$\mathbf{H}_i$ is the channel matrix from the BS to &lt;code class="verbatim"&gt;UEi&lt;/code&gt;, $i=0,1,\ldots,n$.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Uniform Distribution in a Ring Area</title><link>https://shakaxi.github.io/posts/uni_distr_ring/</link><pubDate>Tue, 09 May 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/uni_distr_ring/</guid><description>&lt;p&gt;&#10;This post aims to provide an efficient method of generating uniformly distributed coordinates in a given ring area.&lt;/p&gt;&#10;&lt;p&gt;&#10;Without loss of generality, the ring area is illustrated in Figure &lt;a href="fig:ring"&gt;fig:ring&lt;/a&gt;. The inner and outer radii are $R_1$ and $R_2$, respectively, $R_1 &amp;lt; R_2$. The corresponding angular scope starts from $\Theta_1$ and ends at $\Theta_2$, $\Theta_1 &amp;lt; \Theta_2$.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="./fig/ring.png" alt="./fig/ring.png" title="./fig/ring.png" /&gt;&lt;/p&gt;&#10;&lt;p&gt;&#10;In polar coordinate system, the joint probability density function (PDF) of the radius and angle can be written as&lt;/p&gt;</description></item><item><title>Whitening Filter</title><link>https://shakaxi.github.io/posts/whitening_filter/</link><pubDate>Tue, 09 May 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/whitening_filter/</guid><description>&lt;p&gt;&#10;Usually, we need to filter a mixture of desired signal and colored noise, in order to make the spectrum of the noise become white.&lt;/p&gt;&#10;&lt;p&gt;&#10;Without loss of generality, $x(t)$ is a wide-sense stationary stochastic process. If it is taken as input by a &lt;em&gt;linear time invariant (LTI)&lt;/em&gt; system $W$ and the output process $n(t)$ has white power spectrum, i.e., &lt;em&gt;power spectrum density (PSD)&lt;/em&gt; equal to 1; then the system $W$ is termed the &lt;em&gt;whitening filter&lt;/em&gt; of process $x(t)$, and $n(t)$ is termed the &lt;em&gt;innovation process&lt;/em&gt; of $x(t)$. If $n(t)$ is input into the inverse system of $W$, denoted by $W^{-1}$, then the output is the original process $x(t)$ and system $W^{-1}$ is the corresponding &lt;em&gt;innovation fitler&lt;/em&gt;, as shown in Figure &lt;a href="whitening_innovation"&gt;whitening_innovation&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Linux - Sway</title><link>https://shakaxi.github.io/posts/sway/</link><pubDate>Sat, 11 Mar 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/sway/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;a href="https://swaywm.org"&gt;Sway&lt;/a&gt; is a tiling compositor based on &lt;a href="https://wayland.freedesktop.org"&gt;Wayland&lt;/a&gt;. It can be identified as a counterpart of &lt;a href="http://i3wm.org"&gt;i3&lt;/a&gt; in Wayland, and as resource saving and lightweight as i3. Even, sway has a completely compatible configuration to i3.&lt;/p&gt;&#10;&lt;p&gt;&#10;Sway&amp;#39;s core components and necessary applications can be simply installed and configured, e.g.,&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;sway&lt;/code&gt;: core components&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;swaylock&lt;/code&gt;: a screen locker&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;swayidle&lt;/code&gt;: an idle management daemon&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;foot&lt;/code&gt;: a native terminal in wayland&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;rofi&lt;/code&gt;: an application launcher and window switcher&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;waybar&lt;/code&gt;: a bar utility in wayland&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;light&lt;/code&gt;: a backlight controller&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;mako&lt;/code&gt;: a notification daemon&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;grim&lt;/code&gt;: a screenshot utility&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;slurp&lt;/code&gt;: a region selection utility in wayland&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;swaybg&lt;/code&gt;: a background setting utility&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S sway swaylock swayidle foot rofi waybar light mako grim slurp swaybg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;p&gt;For centralized management, the configuration files can be gathered in directory &lt;code class="verbatim"&gt;~/.config/sway&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;&lt;code class="verbatim"&gt;~/.config/sway/config&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Default config for sway&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Copy this to ~/.config/sway/config and edit it to your liking.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Read `man 5 sway` for a complete reference.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### Variables&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$mod&lt;/span&gt; Mod4&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$term&lt;/span&gt; /usr/bin/foot --font&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;monospace:size&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;12&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$menu&lt;/span&gt; /usr/bin/wofi -c ~/.config/sway/wofi.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$wallpaper&lt;/span&gt; /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$locker&lt;/span&gt; swaylock -f -i &lt;span style="color:#953800"&gt;$wallpaper&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### Appearance and behavior&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; font pango: Source Code Pro &lt;span style="color:#0550ae"&gt;18&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; workspace_layout default&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; default_border none&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; default_floating_border pixel&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; popup_during_fullscreen smart&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; focus_follows_mouse no&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### Output&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; output eDP-1 &lt;span style="color:#6639ba"&gt;bg&lt;/span&gt; &lt;span style="color:#953800"&gt;$wallpaper&lt;/span&gt; fill&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; output DP-1 &lt;span style="color:#6639ba"&gt;bg&lt;/span&gt; &lt;span style="color:#953800"&gt;$wallpaper&lt;/span&gt; fill scale &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### Idle configuration&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; swayidle -w &lt;span style="color:#0a3069"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; timeout &lt;span style="color:#0550ae"&gt;300&lt;/span&gt; &lt;span style="color:#953800"&gt;$locker&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; timeout &lt;span style="color:#0550ae"&gt;600&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;swaymsg &amp;#34;output * dpms off&amp;#34;&amp;#39;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; resume &lt;span style="color:#0a3069"&gt;&amp;#39;swaymsg &amp;#34;output * dpms on&amp;#34;&amp;#39;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; before-sleep &lt;span style="color:#953800"&gt;$locker&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### Key bindings&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Basics:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# start a terminal&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Return &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; &lt;span style="color:#953800"&gt;$term&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# kill focused window&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+q &lt;span style="color:#6639ba"&gt;kill&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# start your launcher&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+d &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; &lt;span style="color:#953800"&gt;$menu&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Drag floating windows by holding down $mod and left mouse button.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Resize them with right mouse button + $mod.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Despite the name, also works for non-floating windows.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Change normal to inverse to use left mouse button for resizing and right&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# mouse button for dragging.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; floating_modifier &lt;span style="color:#953800"&gt;$mod&lt;/span&gt; normal&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# reload the configuration file&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+c reload&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Moving around:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Move your focus around&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+o focus next&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Left focus left&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Down focus down&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Up focus up&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Right focus right&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Move the focused window with the same, but add Shift&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+Left move left&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+Down move down&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+Up move up&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+Right move right&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Workspaces:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# define names for workspaces&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$ws1&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$ws2&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$ws3&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;3&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$ws4&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$ws5&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$ws6&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;6&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$ws7&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;7&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$ws8&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;8&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$ws9&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;9&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# switch to workspace&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+1 workspace &lt;span style="color:#953800"&gt;$ws1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+2 workspace &lt;span style="color:#953800"&gt;$ws2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+3 workspace &lt;span style="color:#953800"&gt;$ws3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+4 workspace &lt;span style="color:#953800"&gt;$ws4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+5 workspace &lt;span style="color:#953800"&gt;$ws5&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+6 workspace &lt;span style="color:#953800"&gt;$ws6&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+7 workspace &lt;span style="color:#953800"&gt;$ws7&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+8 workspace &lt;span style="color:#953800"&gt;$ws8&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+9 workspace &lt;span style="color:#953800"&gt;$ws9&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# move focused container to workspace&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+1 move container to workspace &lt;span style="color:#953800"&gt;$ws1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+2 move container to workspace &lt;span style="color:#953800"&gt;$ws2&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+3 move container to workspace &lt;span style="color:#953800"&gt;$ws3&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+4 move container to workspace &lt;span style="color:#953800"&gt;$ws4&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+5 move container to workspace &lt;span style="color:#953800"&gt;$ws5&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+6 move container to workspace &lt;span style="color:#953800"&gt;$ws6&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+7 move container to workspace &lt;span style="color:#953800"&gt;$ws7&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+8 move container to workspace &lt;span style="color:#953800"&gt;$ws8&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+9 move container to workspace &lt;span style="color:#953800"&gt;$ws9&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Layout stuff:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Split&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+h splith&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+v splitv&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Switch the current container between different layout styles&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+s layout stacking&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+w layout tabbed&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+e layout toggle split&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Make the current focus fullscreen&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+f fullscreen toggle&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Toggle the current focus between tiling and floating mode&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+space floating toggle&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Swap focus between the tiling area and the floating area&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+space focus mode_toggle&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Move focus to the parent container&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+u focus parent&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### System mode&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mode &lt;span style="color:#0a3069"&gt;&amp;#34;system&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym h &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; systemctl poweroff, mode &lt;span style="color:#0a3069"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym l &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; &lt;span style="color:#953800"&gt;$locker&lt;/span&gt;, mode &lt;span style="color:#0a3069"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym r &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; systemctl reboot, mode &lt;span style="color:#0a3069"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym s &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; &lt;span style="color:#953800"&gt;$locker&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; systemctl suspend, mode &lt;span style="color:#0a3069"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym Return mode &lt;span style="color:#0a3069"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym Escape mode &lt;span style="color:#0a3069"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+e mode &lt;span style="color:#0a3069"&gt;&amp;#34;system&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### Display mode&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;set&lt;/span&gt; &lt;span style="color:#953800"&gt;$mode_display&lt;/span&gt; &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;D&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;ouble, &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;M&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;irror, &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;I&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;nternal, &lt;span style="color:#0550ae"&gt;(&lt;/span&gt;E&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;xternal&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; mode &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#953800"&gt;$mode_display&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym d &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; swaymsg output eDP1 &lt;span style="color:#6639ba"&gt;enable&lt;/span&gt; DP1 enable, mode &lt;span style="color:#0a3069"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym i &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; swaymsg output eDP1 &lt;span style="color:#6639ba"&gt;enable&lt;/span&gt; DP1 disable, mode &lt;span style="color:#0a3069"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym e &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; swaymsg output eDP1 disable DP1 enable, mode &lt;span style="color:#0a3069"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym Return mode &lt;span style="color:#0a3069"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym Escape mode &lt;span style="color:#0a3069"&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#953800"&gt;$mod&lt;/span&gt;+Shift+x mode &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#953800"&gt;$mode_display&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### Status Bar:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Read `man 5 sway-bar` for more information about this section.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bar &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; swaybar_command &lt;span style="color:#0a3069"&gt;&amp;#34;waybar -c ~/.config/sway/waybar/config -s ~/.config/sway/waybar/style.css&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### Startup&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; mako --anchor top-right --default-timeout &lt;span style="color:#0550ae"&gt;6000&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; wl-paste -t text --watch clipman store --no-persist&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; fcitx5 -r &lt;span style="color:#1f2328"&gt;&amp;amp;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### Screenshot&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym --release &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Print &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; grim &lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;date +&lt;span style="color:#0a3069"&gt;&amp;#39;%Y%m%d-%H%M%S.png&amp;#39;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Shift+Print &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; grim -g &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;slurp&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;date +&lt;span style="color:#0a3069"&gt;&amp;#39;%Y%m%d-%H%M%S.png&amp;#39;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### Keyboard&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; input type:keyboard &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; xkb_options ctrl:nocaps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### Touchpad of laptop&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; input type:touchpad &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dwt &lt;span style="color:#6639ba"&gt;enable&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### Lid related event for laptop&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindswitch &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lid:on output eDP-1 disable&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; lid:off output eDP-1 &lt;span style="color:#6639ba"&gt;enable&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;### Special keys for laptop&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; bindsym &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Volume&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; XF86AudioRaiseVolume &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; pactl set-sink-volume @DEFAULT_SINK@ +5%&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; XF86AudioLowerVolume &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; pactl set-sink-volume @DEFAULT_SINK@ -5%&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; XF86AudioMute &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; pactl set-sink-mute @DEFAULT_SINK@ toggle&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; XF86AudioMicMute &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; pactl set-source-mute @DEFAULT_SOURCE@ toggle&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# Brightness&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; XF86MonBrightnessUp &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; sudo light -A &lt;span style="color:#0550ae"&gt;5&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; XF86MonBrightnessDown &lt;span style="color:#6639ba"&gt;exec&lt;/span&gt; sudo light -U &lt;span style="color:#0550ae"&gt;5&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; include /etc/sway/config.d/*&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; xwayland enable&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;&lt;code class="verbatim"&gt;~/.config/sway/wofi.conf&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mode&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;drun&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;allow_images&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;allow_markup&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;location&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;center&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;lines&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;9&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;filter_rate&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;term&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;termite&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;key_up&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;Control_L-p&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;key_down&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;Control_L-n&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;key_exit&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;Control_L-g&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;no_actions&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;width&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;300&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;image_size&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;32&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;&lt;code class="verbatim"&gt;~/.config/sway/waybar.style.css&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ,* &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; border: none&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; border-radius: 0&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; font-family: Roboto, Helvetica, Arial, sans-serif&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; font-size: 18px&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; min-height: 0&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; window#waybar &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: rgba&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;43, 48, 59, 0.5&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; border-bottom: 3px solid rgba&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;100, 114, 125, 0.5&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color: &lt;span style="color:#57606a"&gt;#ffffff;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; transition-property: background-color&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; transition-duration: .5s&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; window#waybar.hidden &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; opacity: 0.3&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; /*&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; window#waybar.empty &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: transparent&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; window#waybar.solo &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#FFFFFF;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ,*/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; window#waybar.termite &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#3F3F3F;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; window#waybar.chromium &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#000000;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; border: none&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#workspaces button {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; padding: &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; 5px&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: transparent&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color: &lt;span style="color:#57606a"&gt;#ffffff;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; border-bottom: 3px solid transparent&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#workspaces button:hover {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background: rgba&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;0, 0, 0, 0.2&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; box-shadow: inherit&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; border-bottom: 3px solid &lt;span style="color:#57606a"&gt;#ffffff;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#workspaces button.focused {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#64727D;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; border-bottom: 3px solid &lt;span style="color:#57606a"&gt;#ffffff;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#workspaces button.urgent {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#eb4d4b;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#mode {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#64727D;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; border-bottom: 3px solid &lt;span style="color:#57606a"&gt;#ffffff;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#clock,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#battery,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#cpu,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#memory,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#temperature,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#backlight,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#network,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#pulseaudio,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#custom-media,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#tray,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#mode,&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#idle_inhibitor {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; padding: &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; 10px&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; margin: &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; 0px&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color: &lt;span style="color:#57606a"&gt;#ffffff;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#clock {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#64727D;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#battery {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#ffffff;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color: &lt;span style="color:#57606a"&gt;#000000;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#battery.charging {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color: &lt;span style="color:#57606a"&gt;#ffffff;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#26A65B;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; @keyframes blink &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; to &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#ffffff;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color: &lt;span style="color:#57606a"&gt;#000000;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#battery.critical:not(.charging) {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#f53c3c;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color: &lt;span style="color:#57606a"&gt;#ffffff;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; animation-name: blink&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; animation-duration: 0.5s&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; animation-timing-function: linear&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; animation-iteration-count: infinite&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; animation-direction: alternate&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; label:focus &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#000000;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#cpu {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#2ecc71;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color: &lt;span style="color:#57606a"&gt;#000000;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#memory {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#9b59b6;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#backlight {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#90b1b1;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#network {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#2980b9;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#network.disconnected {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#f53c3c;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#pulseaudio {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#f1c40f;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color: &lt;span style="color:#57606a"&gt;#000000;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#pulseaudio.muted {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#90b1b1;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color: &lt;span style="color:#57606a"&gt;#2a5c45;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#custom-media {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#66cc99;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color: &lt;span style="color:#57606a"&gt;#2a5c45;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; min-width: 100px&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#custom-media.custom-spotify {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#66cc99;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#custom-media.custom-vlc {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#ffa000;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#temperature {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#f0932b;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#temperature.critical {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#eb4d4b;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#tray {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#2980b9;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#idle_inhibitor {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#2d3436;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#idle_inhibitor.activated {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#ecf0f1;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color: &lt;span style="color:#57606a"&gt;#2d3436;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#mpd {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#66cc99;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; color: &lt;span style="color:#57606a"&gt;#2a5c45;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#mpd.disconnected {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#f53c3c;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#mpd.stopped {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#90b1b1;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#mpd.paused {&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; background-color: &lt;span style="color:#57606a"&gt;#51a37a;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Remap CapsLock as Ctrl</title><link>https://shakaxi.github.io/posts/capslk2ctrl/</link><pubDate>Thu, 09 Mar 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/capslk2ctrl/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Background&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Usually, key &lt;code class="verbatim"&gt;CapsLock&lt;/code&gt; is seldom used in our daily utilization, while key &lt;code class="verbatim"&gt;Ctrl&lt;/code&gt; is frequently used, esp. for Emacs users. Therefore, we can turn &lt;code class="verbatim"&gt;CapsLock&lt;/code&gt; into an additional &lt;code class="verbatim"&gt;Ctrl&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Linux&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Sway&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;For sway, the remapping can be directly realized by inserting following entry in &lt;code class="verbatim"&gt;~/.config/sway/config&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; input type:keyboard &lt;span style="color:#0550ae"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; xkb_options ctrl:nocaps&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;KDE&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;For KDE, the transformation can be directly finished in the &lt;code class="verbatim"&gt;system settings&lt;/code&gt;. Enter &lt;code class="verbatim"&gt;Input Devices&lt;/code&gt; -&amp;gt; &lt;code class="verbatim"&gt;Keyboard&lt;/code&gt; -&amp;gt; &lt;code class="verbatim"&gt;Advanced&lt;/code&gt;, and tick the radio &lt;code class="verbatim"&gt;Caps Lock is also a Ctrl&lt;/code&gt; in &lt;code class="verbatim"&gt;Caps Lock behavior&lt;/code&gt; and &lt;code class="verbatim"&gt;Caps Lock as Ctrl&lt;/code&gt; in &lt;code class="verbatim"&gt;Ctrl position&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Gnome&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;p&gt;For Gnome, it is extremely easy to turn &lt;code class="verbatim"&gt;CapsLock&lt;/code&gt; into an additional &lt;code class="verbatim"&gt;Ctrl&lt;/code&gt;. Install package &lt;code class="verbatim"&gt;gnome-tweak-tool&lt;/code&gt;, e.g.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S gnome-tweak-tool&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;and configure it in the installed &lt;code class="verbatim"&gt;Tweak Tool&lt;/code&gt;. Enter &lt;code class="verbatim"&gt;Keyboard &amp;amp; Mouse&lt;/code&gt; -&amp;gt; &lt;code class="verbatim"&gt;Keyboard&lt;/code&gt; -&amp;gt; &lt;code class="verbatim"&gt;Additional Layout Options&lt;/code&gt; -&amp;gt; &lt;code class="verbatim"&gt;Caps Lock behavior&lt;/code&gt; and tick the radio &lt;code class="verbatim"&gt;Make Caps Lock an additional Ctrl&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;Xmodmap&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;xmodmap&lt;/code&gt; is a utility for remapping keys in &lt;code class="verbatim"&gt;Xorg&lt;/code&gt;. To turn &lt;code class="verbatim"&gt;CapsLock&lt;/code&gt; into another &lt;code class="verbatim"&gt;Ctrl&lt;/code&gt;, install package &lt;code class="verbatim"&gt;xorg-xmodmap&lt;/code&gt;, e.g.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S xorg-xmodmap&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;and create &lt;code class="verbatim"&gt;~/.Xmodmap&lt;/code&gt; with its contents as follows.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; clear lock&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; clear control&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; add &lt;span style="color:#953800"&gt;control&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; Caps_Lock Control_L Control_R&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; keycode &lt;span style="color:#953800"&gt;66&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; Control_L&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;For display manager, e.g. GDM, KDM, XDM, based startup, that is all. For &lt;code class="verbatim"&gt;startx&lt;/code&gt;-based, add a following entry in &lt;code class="verbatim"&gt;~/.xinitrc&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[[&lt;/span&gt; -f ~/.Xmodmap &lt;span style="color:#0550ae"&gt;]]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; xmodmap ~/.Xmodmap&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>俗话说</title><link>https://shakaxi.github.io/posts/suhuashuo/</link><pubDate>Tue, 21 Feb 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/suhuashuo/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;俗话说：好马不吃回头草；可俗话又说：浪子回头金不换！&lt;/li&gt;&#10;&lt;li&gt;俗话说：兔子不吃窝边草；可俗话又说：近水楼台先得月！&lt;/li&gt;&#10;&lt;li&gt;俗话说：宰相肚里能撑船；可俗话又说：有仇不报非君子！&lt;/li&gt;&#10;&lt;li&gt;俗话说：男子汉大丈夫，宁死不屈；可俗话又说：男子汉大丈夫，能屈能伸！&lt;/li&gt;&#10;&lt;li&gt;俗话说：知无不言，言无不尽；可俗话又说：交浅勿言深，沉默是金！&lt;/li&gt;&#10;&lt;li&gt;俗话说：车到山前必有路；可俗话又说：不撞南墙不回头！&lt;/li&gt;&#10;&lt;li&gt;俗话说：人不犯我，我不犯人；可俗话又说：先下手为强，后下手遭殃！&lt;/li&gt;&#10;&lt;li&gt;俗话说：礼轻情谊重；可俗话又说：礼多人不怪！&lt;/li&gt;&#10;&lt;li&gt;俗话说：一个好汉三个帮；可俗话又说：靠人不如靠己！&lt;/li&gt;&#10;&lt;li&gt;俗话说：人往高处走；可俗话又说：爬得高，摔得重！&lt;/li&gt;&#10;&lt;li&gt;俗话说：瘦死的骆驼比马大；可俗话又说：拔了毛的凤凰不如鸡！&lt;/li&gt;&#10;&lt;li&gt;俗话说：宁为玉碎，不为瓦全；可俗话又说：留得青山在，不怕没柴烧！&lt;/li&gt;&#10;&lt;li&gt;俗话说：人不可貌相，海水不可斗量；可俗话又说：人靠衣裳马靠鞍！&lt;/li&gt;&#10;&lt;li&gt;俗话说：苦海无边，回头是岸；可俗话又说：开弓没有回头箭！&lt;/li&gt;&#10;&lt;li&gt;俗话说：退一步海阔天空；可俗话又说：狭路相逢勇者胜！&lt;/li&gt;&#10;&lt;li&gt;俗话说：三百六十行，行行出状元；可俗话又说：万般皆下品，唯有读书高！&lt;/li&gt;&#10;&lt;li&gt;俗话说：书到用时方恨少；可俗话又说：百无一用是书生！&lt;/li&gt;&#10;&lt;li&gt;俗话说：金钱不是万能的；可俗话又说：有钱能使鬼推磨！&lt;/li&gt;&#10;&lt;li&gt;俗话说：出淤泥而不染；可俗话又说：近朱者赤，近墨者黑。&lt;/li&gt;&#10;&lt;li&gt;俗话说：青出于蓝而胜于蓝；可俗话又说：姜还是老的辣！&lt;/li&gt;&#10;&lt;li&gt;俗话说：后生可畏；可俗话又说：嘴上无毛，办事不牢！&lt;/li&gt;&#10;&lt;li&gt;俗话说：有缘千里来相会；可俗话又说：不是冤家不聚头！&lt;/li&gt;&#10;&lt;li&gt;俗话说：在天愿作比翼鸟，在地愿为连理枝；可俗话又说：夫妻本是同林鸟，大难来时各自飞！&lt;/li&gt;&#10;&lt;li&gt;俗话说：得饶人处且饶人；可俗话又说：纵虎归山，后患无穷！&lt;/li&gt;&#10;&lt;li&gt;俗话说：善有善报，恶有恶报；可俗话又说：人善被人欺，马善被人骑！&lt;/li&gt;&#10;&lt;li&gt;俗话说：一分耕耘、一分收获；可俗话又说：人无横财不富，马无夜草不肥！&lt;/li&gt;&#10;&lt;li&gt;俗话说：小心驶得万年船；可俗话又说：撑死胆大的，饿死胆小的！&lt;/li&gt;&#10;&lt;li&gt;俗话说：量小非君子；可俗话又说：无毒不丈夫！&lt;/li&gt;&#10;&lt;li&gt;俗话说：小不忍则乱大谋；可俗话又说：不蒸馒头蒸（争）口气！&lt;/li&gt;&#10;&lt;li&gt;俗话说：人人为我，我为人人；可俗话又说：人不为己，天诛地灭！&lt;/li&gt;&#10;&lt;li&gt;俗话说：不入虎穴，焉得虎子；可俗话又说：老虎屁股摸不得！&lt;/li&gt;&#10;&lt;li&gt;俗话说：百善孝为先；可俗话又说：忠孝不能两全！&lt;/li&gt;&#10;&lt;li&gt;俗话说：人定胜天；可俗话又说：天意难违。&lt;/li&gt;&#10;&lt;li&gt;俗话说：明人不做暗事；可俗话又说：兵不厌诈！&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Reference&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;《俗话说，俗话又说，谁写的，笑死我了！》，微信公众号: 假装学英语(PretendEnglish)。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - Dired</title><link>https://shakaxi.github.io/posts/emacs_dired/</link><pubDate>Wed, 15 Feb 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_dired/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Aside from editing files, including local and remote ones, Emacs can also play the role of a file manager, i.e., manipulating directories and the files by its directory editor, &lt;em&gt;dired&lt;/em&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Enter dired buffer&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;Dired can be entered in following ways:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Command: &lt;code class="verbatim"&gt;M-x dired&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Key bindings&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;C-x d&lt;/code&gt; is equivalent to the command above.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;C-x 4 d&lt;/code&gt; open a dired buffer in another window.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;View and navigation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Key&lt;/th&gt;&#10;&lt;th&gt;Description&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;(&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Toggle detail information (&lt;code class="verbatim"&gt;dired-hide-details-mode&lt;/code&gt;).&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;^&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Go up one directory (&lt;code class="verbatim"&gt;dired-up-directory&lt;/code&gt;).&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;n/C-n&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move the point down an entry (&lt;code class="verbatim"&gt;dired-next-line&lt;/code&gt;).&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;p/C-p&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move the point up an entry (&lt;code class="verbatim"&gt;dired-previous-line&lt;/code&gt;).&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;q&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Quit dired (&lt;code class="verbatim"&gt;quit-window&lt;/code&gt;).&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-2"&gt;&#10;&lt;h2 id="headline-4"&gt;&#10;Marking &amp;amp; unmarking&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-2"&gt;&#10;&lt;p&gt;Marking and unmarking enable operations on multiple files or directories.&lt;/p&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Key&lt;/th&gt;&#10;&lt;th&gt;Description&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;m&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Mark the active entry or the selected region (&lt;code class="verbatim"&gt;dired-mark&lt;/code&gt;).&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;u&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Unmark the active entry or the selected region (&lt;code class="verbatim"&gt;dired-unmark&lt;/code&gt;).&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;U&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Unmark everything (&lt;code class="verbatim"&gt;dired-unmark-all-marks&lt;/code&gt;).&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;d&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Flag for deletion (&lt;code class="verbatim"&gt;dired-flag-file-deletion&lt;/code&gt;).&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;~&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Mark backup files (&lt;code class="verbatim"&gt;dired-flag-backup-files&lt;/code&gt;).&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;* %&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Mark files and directories by regexp (&lt;code class="verbatim"&gt;dired-mark-files-regexp&lt;/code&gt;).&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;* c&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Change marks (&lt;code class="verbatim"&gt;dired-change-marks&lt;/code&gt;).&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;t&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Toggle existing marking (&lt;code class="verbatim"&gt;dired-toggle-marks&lt;/code&gt;).&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>LTE - Downlink Control</title><link>https://shakaxi.github.io/posts/lte_dl_ctrl/</link><pubDate>Wed, 15 Feb 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/lte_dl_ctrl/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;In LTE, following physical channels are involved in downlink control.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;em&gt;Physical downlink control channel (PDCCH)&lt;/em&gt; carries&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Downlink (DL) assignment&lt;/li&gt;&#10;&lt;li&gt;Uplink (UL) grant&lt;/li&gt;&#10;&lt;li&gt;TPC commands for a group of users&lt;/li&gt;&#10;&lt;li&gt;&lt;em&gt;Physical downlink shared channel (PDSCH)&lt;/em&gt; arrival time instance&lt;/li&gt;&#10;&lt;li&gt;Paging indication&lt;/li&gt;&#10;&lt;li&gt;SPS activation/release&lt;/li&gt;&#10;&lt;li&gt;Etc.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;em&gt;Physical control format indicator channel (PCFICH)&lt;/em&gt; indicates the time-domain duration of the PDCCH in each subframe.&lt;/li&gt;&#10;&lt;li&gt;&lt;em&gt;Physical HARQ indicator channel (PHICH)&lt;/em&gt; indicates the acknowledgement of PUSCH.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Resource hierarchy&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;Just as its name implies, the basic element for PDCCH is &lt;em&gt;Control channel element (CCE)&lt;/em&gt;, which is comprised of 9 &lt;em&gt;resource element group (REG)&lt;/em&gt;, and a REG consists of 4 RE&amp;#39;s in an OFDM symbol without &lt;em&gt;cell-specific reference signal (CRS)&lt;/em&gt;, or 6 RE&amp;#39;s in an OFDM symbol with CRS. Irrespective of the both cases, there are always 4 effective RE&amp;#39;s/REG, which is favorable of &lt;em&gt;space frequency block codes (SFBC)&lt;/em&gt; based transmit diversity for PDCCH.&lt;/p&gt;&#10;&lt;p&gt;&#10;An &lt;em&gt;aggregation level&lt;/em&gt; number of CCE&amp;#39;s compose one PDCCH. The value of aggregation level can be 1, 2, 4, 8.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>NR - Downlink Control</title><link>https://shakaxi.github.io/posts/nr_dl_ctrl/</link><pubDate>Tue, 14 Feb 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/nr_dl_ctrl/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;In NR system, the &lt;em&gt;downlink control information (DCI)&lt;/em&gt; is carried by physical downlink control channel (PDCCH), which physically occupied a region in the 2-dimension resource grid, which is essentially comprised of a certain number of resource elements (RE&amp;#39;s), a.k.a., &lt;em&gt;control resource set (CORESET)&lt;/em&gt;. Different from the counterpart in LTE, i.e., PDCCH region which always covers the whole frequency range, CORESET does not span the whole bandwidth, since the bandwidth in NR system is remarkably large while not all the NR UE&amp;#39;s are able to perform reception over the whole bandwidth.&lt;/p&gt;&#10;&lt;p&gt;&#10;Due to the static feature of CORESET, the indication of its size is not necessary. Therefore, there is no PCFICH in NR system. Additionally, irrespective of downlink or uplink, asynchronous HARQ is utilized in NR. Hence, PHICH is not needed either.&lt;/p&gt;&#10;&lt;p&gt;&#10;In NR, the channel coding scheme for PDCCH is based on &lt;em&gt;polar codes&lt;/em&gt;. It can support 512 coded bits (prior to rate matching&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;) and up to 140 information bits. Targetting an enhanced coverage, a beamformed single layer transmission is adopted for PDCCH. In this sense, it is similar to ePDCCH in LTE system.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Python - Data Type</title><link>https://shakaxi.github.io/posts/python_data_type/</link><pubDate>Thu, 09 Feb 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_data_type/</guid><description>&lt;p&gt;&#10;Python中的大部分对象，如列表、字典、 &lt;code class="verbatim"&gt;Numpy&lt;/code&gt; 数组都是可变对象，大多数用户定义的类型（类）也是可变的。可变对象中包含的对象和值是可以被修改的。但是有一些对象是不可变的，如字符串、元组。&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;标量&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Python的标准库中有一个小的内建类型集合，用来处理数值、字符串、布尔值以及日期和时间。这类“单值”类型被称为标量。主要的标量类型有&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;int&lt;/code&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;前缀 &lt;code class="verbatim"&gt;0x&lt;/code&gt; 表示16进制整数。&lt;/li&gt;&#10;&lt;li&gt;整数除法会把结果自动转型为浮点数。&lt;/li&gt;&#10;&lt;li&gt;如果需要C风格的整数除法（去掉小数部分），可以使用整除操作符 &lt;code class="verbatim"&gt;//&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;float&lt;/code&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-2" href="#footnote-2"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;str&lt;/code&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;可以使用单引号 &lt;code class="verbatim"&gt;&amp;#39;&lt;/code&gt; 或双引号 &lt;code class="verbatim"&gt;&amp;#34;&lt;/code&gt; 写一个字符串字面值。&lt;/li&gt;&#10;&lt;li&gt;字符串是Unicode字符的序列，是不可改变的。很多Python对象可以通过函数 &lt;code class="verbatim"&gt;str&lt;/code&gt; 转成字符串。&lt;/li&gt;&#10;&lt;li&gt;对于单个字符，函数 &lt;code class="verbatim"&gt;ord&lt;/code&gt; 把字符转换为其对应的整数表示；函数 &lt;code class="verbatim"&gt;chr&lt;/code&gt; 把编码转换为对应的字符。&lt;/li&gt;&#10;&lt;li&gt;对于含有换行的多行字符串，可以使用三个单引号（ &lt;code class="verbatim"&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/code&gt; ）或三个双引号（ &lt;code class="verbatim"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/code&gt; ）。&lt;/li&gt;&#10;&lt;li&gt;反斜杠 &lt;code class="verbatim"&gt;\&lt;/code&gt; 是转移符号，它用来指明特殊符号。可以在字符串前面加上前缀符号 &lt;code class="verbatim"&gt;r&lt;/code&gt; （raw的简写）避免对字符串转义。&lt;/li&gt;&#10;&lt;li&gt;字符串对象有一个 &lt;code class="verbatim"&gt;format&lt;/code&gt; 方法，可以用来代替字符串中的格式化参数，并产生一个新的字符串。&lt;/li&gt;&#10;&lt;li&gt;带有前缀符号 &lt;code class="verbatim"&gt;f&lt;/code&gt; （format的简写）的字符串被称之为 &lt;code class="verbatim"&gt;f-string&lt;/code&gt; 。如果其包含 &lt;code class="verbatim"&gt;{xxx}&lt;/code&gt; ，就会以对应的变量替换。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;bool&lt;/code&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;布尔值有两个： &lt;code class="verbatim"&gt;True&lt;/code&gt; 和 &lt;code class="verbatim"&gt;False&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;li&gt;布尔运算符包括： &lt;code class="verbatim"&gt;and&lt;/code&gt; ， &lt;code class="verbatim"&gt;or&lt;/code&gt; ， &lt;code class="verbatim"&gt;not&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;None&lt;/code&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-3" href="#footnote-3"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;bytes&lt;/code&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;字符串在内存中以Unicode表示，每个字符对应若干个字节。&lt;/li&gt;&#10;&lt;li&gt;字符串在硬盘上存储或在网络上传输的时候，需要转换为以字节为单位的 &lt;code class="verbatim"&gt;bytes&lt;/code&gt; 类型。&lt;/li&gt;&#10;&lt;li&gt;在Python中， &lt;code class="verbatim"&gt;bytes&lt;/code&gt; 类型的数据为以前缀 &lt;code class="verbatim"&gt;b&lt;/code&gt; 开头的单引号（如 &lt;code class="verbatim"&gt;b&amp;#39;xyz&amp;#39;&lt;/code&gt; ， &lt;code class="verbatim"&gt;b&amp;#34;xyz&amp;#34;&lt;/code&gt; ）或双引号表示。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;str&lt;/code&gt; 的方法 &lt;code class="verbatim"&gt;encode&lt;/code&gt; 可以将其编码为制定的 &lt;code class="verbatim"&gt;bytes&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;bytes&lt;/code&gt; 的方法 &lt;code class="verbatim"&gt;decode&lt;/code&gt; 可以将其转换为字符串（ &lt;code class="verbatim"&gt;str&lt;/code&gt; ）。&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;当Python源代码中包含中文时，必须指定UTF-8编码保存。为了让Python解释器按照UTF-8编码读取Python程序代码，通常在源代码文件指定UTF-8编码。例如，文件开头为&lt;/p&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#!/usr/bin/env python&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;常量&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;常量就是不能变的变量。在Python中，通常用全部大写的变量名来表示常量。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Archlinux - A Non-Official Repository from Chinese Community</title><link>https://shakaxi.github.io/posts/arch_cn/</link><pubDate>Sun, 29 Jan 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/arch_cn/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introducation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;a href="https://archlinux.org"&gt;Archlinux&lt;/a&gt; is an excellent Linux distribution, which follows the principle of &lt;em&gt;keep it simple and stupid (KISS)&lt;/em&gt; closely. Besides the official repositories, its Chinese community provides a non-official repository, a.k.a. ArchlinuxCN.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;Using the ArchlinuxCN can be completed by two steps.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Append following lines to &lt;code class="verbatim"&gt;/etc/pacman.conf&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;archlinuxcn&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Server&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; https://repo.archlinuxcn.org/&lt;span style="color:#953800"&gt;$arch&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Optionally, there are many mirrors, which can be found at &lt;a href="https://github.com/archlinuxcn/mirrorlist-repo,"&gt;https://github.com/archlinuxcn/mirrorlist-repo,&lt;/a&gt; e.g.,&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Aliyun&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;archlinuxcn&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Server&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; https://mirrors.aliyun.com/archlinuxcn/&lt;span style="color:#953800"&gt;$arch&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Netease&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;archlinuxcn&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;Server&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; https://mirrors.163.com/archlinux-cn/&lt;span style="color:#953800"&gt;$arch&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Import the corresponding PGP keys by installing package &lt;code class="verbatim"&gt;archlinuxcn-keyring&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S archlinuxcn-keyring&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Archlinux - Clean Packages</title><link>https://shakaxi.github.io/posts/arch_clean_pkg/</link><pubDate>Sun, 29 Jan 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/arch_clean_pkg/</guid><description>&lt;p&gt;&#10;&lt;a href="https://archlinux.org"&gt;Archlinux&lt;/a&gt; is an excellent Linux distribution, featured by light weight, flexibility, keep it simple and stupid (KISS), as well as well-documented &lt;a href="https://wiki.archlinux.org"&gt;wiki&lt;/a&gt;. Therefore, I have been using it for so many years. Unavoidably, there are some packages accumulated and remained after numerous package related operations, e.g., installing, removing, updating, etc. This post aims to clean the packages.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;For each installed package, following command can keep the latest version and remove all the historical versions.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -Scc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;For each isolated (not in use) package, following &lt;a href="https://manateelazycat.github.io/linux/arch/2021/02/25/clean-unused-arch-package.html"&gt;command&lt;/a&gt; can remove them automatically.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -Qqdt &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; pacman -Rs -&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Python - Pytorch Lightning</title><link>https://shakaxi.github.io/posts/python_pytorch_lightning/</link><pubDate>Sat, 28 Jan 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_pytorch_lightning/</guid><description>&lt;p&gt;&#10;&lt;a href="https://github.com/Lightning-AI/lightning"&gt;&lt;em&gt;Pytorch Lightning&lt;/em&gt;&lt;/a&gt; is a high level framework and encapsulation on top of pytorch, which provides simplified interfaces and elegant code structure relating to AI. Detailed usage can be found in its &lt;a href="https://pytorch-lightning.readthedocs.io/en/stable"&gt;manual&lt;/a&gt;.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;The installation of Pytorch Lightning is very simple. Taking &lt;em&gt;pip&lt;/em&gt; for instance, following command completes the procedure.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pip install pytorch-lightning&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Usage&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Neural network&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;The structure of neural network can be defined as a subclass of &lt;code class="verbatim"&gt;pytorch_lightning.LightningModule&lt;/code&gt;, which is essentially a subclass of &lt;code class="verbatim"&gt;torch.nn.Module&lt;/code&gt;. Besides the constructor &lt;code class="verbatim"&gt;__init__&lt;/code&gt; and function &lt;code class="verbatim"&gt;forward&lt;/code&gt;, a series of hook functions has been defined and can be simply overridden, e.g.,&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;configure_optimizers&lt;/code&gt; can be used to further tweak the behavior of the optimizer, e.g., the initial value of learning rate and how it is decaying.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;on_train_start&lt;/code&gt;, &lt;code class="verbatim"&gt;on_validation_start&lt;/code&gt;, and &lt;code class="verbatim"&gt;on_test_start&lt;/code&gt; are the hook functions provoked at the beginning of training, validating, and testing, respectively.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;on_train_end&lt;/code&gt;, &lt;code class="verbatim"&gt;on_validation_end&lt;/code&gt;, and &lt;code class="verbatim"&gt;on_test_end&lt;/code&gt; are the hook functions provoked at the end of training, validating, and testing, respectively.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;training_step&lt;/code&gt;, &lt;code class="verbatim"&gt;validation_step&lt;/code&gt;, and &lt;code class="verbatim"&gt;test_step&lt;/code&gt; are the hook functions provoked for each batch in training, validating, and testing respectively, e.g., in which loss function is calculated.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;training_epoch_end&lt;/code&gt;, &lt;code class="verbatim"&gt;validation_epoch_end&lt;/code&gt;, and &lt;code class="verbatim"&gt;test_epoch_end&lt;/code&gt; are the hook functions provoked at the end of each epoch in training, validating, and testing respectively.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Data module&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;In &lt;code class="verbatim"&gt;python_lightning&lt;/code&gt;, a &lt;em&gt;data module&lt;/em&gt; class is defined in &lt;code class="verbatim"&gt;python_lightning.LightningDataModule&lt;/code&gt;, which provides a unified interface for data loading for training, validating, and testing. We can simply define our own data module as a subclass of &lt;code class="verbatim"&gt;python_lightning.LightningDataModule&lt;/code&gt;, and override the following functions.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;setup&lt;/code&gt; can define one or more datasets needed.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;train_dataloader&lt;/code&gt;, &lt;code class="verbatim"&gt;val_dataloader&lt;/code&gt;, and &lt;code class="verbatim"&gt;test_dataloader&lt;/code&gt; return separate dataloaders for training, validating and testing, respectively.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Procedure&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;p&gt;The main procedure is completed based on an instance of class &lt;code class="verbatim"&gt;python_lightning.Trainer&lt;/code&gt;. In its constructor, we can customize it via a series of keyword arguments, e.g.,&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;default_root_dir&lt;/code&gt; indicates the output directory.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;max_epochs&lt;/code&gt; is the maximum number of epochs.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;check_val_every_n_epoch&lt;/code&gt; is the period of validation in epoch number.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;logger&lt;/code&gt; is object for logging, e.g., &lt;code class="verbatim"&gt;python_lightning.loggers.TensorBoardLogger&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;enable_progress_bar&lt;/code&gt; is a boolean indicator of progress bar.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;strategy&lt;/code&gt; defines the training type, e.g., &lt;code class="verbatim"&gt;DDP&lt;/code&gt;, &lt;code class="verbatim"&gt;DDP2&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;gpus&lt;/code&gt; indicates the identities of selected GPU(s).&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The training and testing can be finished by calling its member functions, e.g.,&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;fit&lt;/code&gt; for training.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;test&lt;/code&gt; for testing.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;save_checkpoint&lt;/code&gt; to save the state of the &lt;code class="verbatim"&gt;python_lightning.Trainer&lt;/code&gt; object, including the coefficients or weights of the trainable parameters in the neural network.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Wiener-Khinchin Theorem</title><link>https://shakaxi.github.io/posts/wiener_khinchin/</link><pubDate>Sun, 22 Jan 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/wiener_khinchin/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Wiener-Khinchin Theorem&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Given a &lt;em&gt;wide-sense stationary (WSS)&lt;/em&gt; stochastic process, its autocorrelation function and its power spectral density function are a pair of Fourier transform.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Frequency domain correlation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;The frequency domain correlation can be derived as&lt;/p&gt;&#10;\begin{align}&#10; \mathcal{E}\left[ H(f_1) H^{*}(f_2) \right] &amp;amp;= \mathcal{E} \left[ \int_{-\infty}^{+\infty}h(\tau_1)e^{-j2\pi f_1\tau_1} d\tau_1 \cdot \int_{-\infty}^{+\infty}h^{*}(\tau_2)e^{j2\pi f_2\tau_2} d\tau_2 \right] \nonumber \\&#10; &amp;amp;= \int_{-\infty}^{+\infty} \int_{-\infty}^{+\infty} \mathcal{E}\left[ h(\tau_1)h^{*}(\tau_2)\right]e^{-j2\pi(f_1 \tau_1 - f_2 \tau_2)} d\tau_1 d\tau_2, \label{eq:corr-f}&#10;\end{align}&#10;&lt;p&gt;where $h(\tau)$ and $H(f)$ are the &lt;em&gt;channel impulse response (CIR)&lt;/em&gt; and &lt;em&gt;channel frequency response (CFR)&lt;/em&gt; of the channel, respectively.&lt;/p&gt;&#10;&lt;p&gt;&#10;If the individual paths of the channel are uncorrelated, i.e., &lt;em&gt;uncorrelated scatering (US)&lt;/em&gt;, $\mathcal{E}\left[h(\tau_1) h^{*}(\tau_2)\right] = h(\tau_1) h^{*}(\tau_2) \delta(\tau_1 - \tau_2)$, then equation \eqref{eq:corr-f} can be further written as&lt;/p&gt;&#10;\begin{align}&#10;\mathcal{E}\left[ H(f_1) H^{*}(f_2) \right] &amp;amp;= \int_{-\infty}^{+\infty}|h(\tau)|^2 e^{-j2\pi(f_1-f_2)\tau}d\tau \nonumber \\&#10;&amp;amp;=\int_{-\infty}^{+\infty}P_{\mathrm{delay}}(\tau) e^{-j2\pi(f_1-f_2)\tau}d\tau, \label{eq:corr-f-us}&#10;\end{align}&#10;&lt;p&gt;where $P_{\mathrm{delay}}(\tau) \triangleq |h(\tau)|^2$ is the &lt;em&gt;power delay profile (PDP)&lt;/em&gt; of the channel.&lt;/p&gt;&#10;&lt;p&gt;&#10;Particularly, if PDP is uniformly distributed within &lt;em&gt;cyclic prefix (CP)&lt;/em&gt;, denoted by $L_{\mathrm{cp}}$, i.e.,&lt;/p&gt;&#10;\begin{align*}&#10;P_{\mathrm{delay}}(\tau) &amp;amp;= \frac{1}{L_{\mathrm{cp}}}, \quad \tau \in [0, L_{\mathrm{cp}}]; \\&#10;\mathcal{E}\left[ H(f_1) H^{*}(f_2) \right] &amp;amp;=\mathrm{sinc} \left[ \left( f_1 - f_2 \right)L_{\mathrm{cp}} \right] e^{-j\pi\left( f_1 - f_2 \right)L_{\mathrm{cp}}}.&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>AI - MLP-Mixer</title><link>https://shakaxi.github.io/posts/ai_mlp_mixer/</link><pubDate>Sun, 08 Jan 2023 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/ai_mlp_mixer/</guid><description>&lt;p&gt;&#10;&lt;em&gt;Multi-layer perceptron mixer (MLP-Mixer)&lt;/em&gt; is a novel neural network model, which attracts the attentions of both academic circle and industrial area. Besides the proposal paper, I found another blog post providing an excellent illustration.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="./fig/mlp_mixer.png" alt="./fig/mlp_mixer.png" title="./fig/mlp_mixer.png" /&gt;&lt;/p&gt;&#10;&lt;p&gt;&#10;The structure of MLP-Mixer can be shown in Figure &lt;a href="mlp_mixer"&gt;mlp_mixer&lt;/a&gt;.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The input and output tensors have the same size, denoted by $B\times C\times P$, where $B$ is the batch size, $C$ is the number of channels, $P$ is the size of each patch. Usually, the patch size is a product of patch size in each dimension. E.g., a 2-D image of size $H\times W$ can be partitioned into a multiplicity of patches, with each of size $P = P_h \times P_w$. Then different patches correspond to different channels, i.e., $C = \dfrac{H}{P_{h}} \cdot \dfrac{W}{P_{w}}$. Without loss of generality, we stretch each patch into 1-D irrespecitve of its dimensions.&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Just as its name indicates, each MLP-Mixer layer has two MLP modules, targeting for intra-patch feature extraction, a.k.a. &lt;em&gt;token mixing&lt;/em&gt;, and inter-patch feature processing, a.k.a. &lt;em&gt;channel mixing&lt;/em&gt;, respectively. Of course, token mixing and channel mixing operates along the dimension of patch (of size $P$) and channel (of size $C$), respectively.&lt;/p&gt;</description></item><item><title>Linux - Ranger</title><link>https://shakaxi.github.io/posts/ranger/</link><pubDate>Mon, 19 Dec 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/ranger/</guid><description>&lt;p&gt;&#10;&lt;a href="https://github.com/ranger/ranger"&gt;Ranger&lt;/a&gt; is a popular and powerful file manager in console.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;In archlinux, ranger can be directly installed using &lt;code class="verbatim"&gt;pacman&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S ranger&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;Ranger can be customized by 4 configuration files below.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;rc.conf&lt;/code&gt; organizes various options and keybindings.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;commands.py&lt;/code&gt; defines commands, which can be provoked via &lt;code class="verbatim"&gt;:&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;rifle.conf&lt;/code&gt; defines the default programs to open each type of files.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;scope.sh&lt;/code&gt; is a shell script to preview each type of files.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;In fact, there are both global and local versions for each configuration above. The local versions are stored in &lt;code class="verbatim"&gt;~/.config/ranger&lt;/code&gt;. Optionally, the global version of the configuration files can be copied as follows to &lt;code class="verbatim"&gt;~/.config/ranger&lt;/code&gt; as a starting point before further customization, i.e.,&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ranger --copy-config&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;rc/rifle/commands/scope/all&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;For &lt;code class="verbatim"&gt;rc.conf&lt;/code&gt; and &lt;code class="verbatim"&gt;commands&lt;/code&gt;, ranger subsequently loads the global version first and then the local version. By default, only the options different from the default values in the global version need to be overridden in the local counterpart. The loading of global version can be skipped by setting environment variable &lt;code class="verbatim"&gt;RANGER_LOAD_DEFAULT_RC&lt;/code&gt; to &lt;code class="verbatim"&gt;FALSE&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;For &lt;code class="verbatim"&gt;scope.sh&lt;/code&gt; and &lt;code class="verbatim"&gt;rifle.conf&lt;/code&gt;, what is different, ranger loads either the local or the global version.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Mathematica</title><link>https://shakaxi.github.io/posts/mathematica/</link><pubDate>Mon, 19 Dec 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/mathematica/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Bracketing&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&#10;Parenthesis ()&#10;&lt;/dt&gt;&#10;&lt;dd&gt;change the priorities in computing.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Square bracket []&#10;&lt;/dt&gt;&#10;&lt;dd&gt;function parameters, e.g. &lt;code class="verbatim"&gt;f[x]&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Curly brace {}&#10;&lt;/dt&gt;&#10;&lt;dd&gt;list, e.g. &lt;code class="verbatim"&gt;{a, b, c}&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Double bracket &lt;a href=""&gt;&lt;/a&gt;&#10;&lt;/dt&gt;&#10;&lt;dd&gt;abbreviation of &lt;code class="verbatim"&gt;Part&lt;/code&gt;, e.g. &lt;code class="verbatim"&gt;v[[i]]&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Constants&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Command&lt;/th&gt;&#10;&lt;th&gt;Value&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Pi&lt;/td&gt;&#10;&lt;td&gt;$\pi$&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;E&lt;/td&gt;&#10;&lt;td&gt;$e$&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;I&lt;/td&gt;&#10;&lt;td&gt;$i = \sqrt{-1}$&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Infinity&lt;/td&gt;&#10;&lt;td&gt;$\infty$&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Data objects&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Command&lt;/th&gt;&#10;&lt;th&gt;Meaning&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;2 + 8 I&lt;/td&gt;&#10;&lt;td&gt;complex&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&amp;#34;text&amp;#34;&lt;/td&gt;&#10;&lt;td&gt;string&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-2"&gt;&#10;&lt;h2 id="headline-4"&gt;&#10;Defining variables, functions, and rules&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Command&lt;/th&gt;&#10;&lt;th&gt;Meaning&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;x = value&lt;/td&gt;&#10;&lt;td&gt;assignment&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;x := value&lt;/td&gt;&#10;&lt;td&gt;delayed assignment&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;x = . or Clear[x]&lt;/td&gt;&#10;&lt;td&gt;remove value assigned to &lt;code class="verbatim"&gt;x&lt;/code&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;f[x_] := expression&lt;/td&gt;&#10;&lt;td&gt;define a function &lt;code class="verbatim"&gt;f(x)&lt;/code&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;expression /. x-&amp;gt;a&lt;/td&gt;&#10;&lt;td&gt;replace &lt;code class="verbatim"&gt;x&lt;/code&gt; by a in expression&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;expression //. x-&amp;gt;a&lt;/td&gt;&#10;&lt;td&gt;replace repeatedly&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;lhs :&amp;gt; rhs /; test&lt;/td&gt;&#10;&lt;td&gt;apply rule if &lt;code class="verbatim"&gt;test&lt;/code&gt; is True&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-2"&gt;&#10;&lt;h2 id="headline-5"&gt;&#10;Linear algebra&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Command&lt;/th&gt;&#10;&lt;th&gt;Meaning&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;{a, b, c}&lt;/td&gt;&#10;&lt;td&gt;vector, list&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;{{a, b}, {c, d}}&lt;/td&gt;&#10;&lt;td&gt;2 × 2 matrix&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;n.m&lt;/td&gt;&#10;&lt;td&gt;matrix multiply&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Inverse[m]&lt;/td&gt;&#10;&lt;td&gt;inverse of matrix&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Transpose[m]&lt;/td&gt;&#10;&lt;td&gt;transpose&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Det[m]&lt;/td&gt;&#10;&lt;td&gt;determinant&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;MatrixPower[m, n]&lt;/td&gt;&#10;&lt;td&gt;m^n&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;MatrixExp[m]&lt;/td&gt;&#10;&lt;td&gt;e^m&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;LinearSolve[m, b]&lt;/td&gt;&#10;&lt;td&gt;solve mx = b&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Eigenvalues[m]&lt;/td&gt;&#10;&lt;td&gt;eigenvalues&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Eigenvectors[m]&lt;/td&gt;&#10;&lt;td&gt;eigenvectors&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Eigensystem[m]&lt;/td&gt;&#10;&lt;td&gt;eigenvalues and eigenvectors&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-2"&gt;&#10;&lt;h2 id="headline-6"&gt;&#10;Algebraic calculation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Command&lt;/th&gt;&#10;&lt;th&gt;Meaning&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Solve[lhs==rhs, x]&lt;/td&gt;&#10;&lt;td&gt;solve algebraic equation for x&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;DSolve[eqn, y[x], x]&lt;/td&gt;&#10;&lt;td&gt;solve differential equation&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Reduce[eqn, x]&lt;/td&gt;&#10;&lt;td&gt;reduce equations&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Eliminate[eqn, x]&lt;/td&gt;&#10;&lt;td&gt;eliminate variable x&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-2"&gt;&#10;&lt;h2 id="headline-7"&gt;&#10;Calculus&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Command&lt;/th&gt;&#10;&lt;th&gt;Meaning&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;D[f, x]&lt;/td&gt;&#10;&lt;td&gt;$\partial f/\partial x$&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;D[f, {x,n}&lt;/td&gt;&#10;&lt;td&gt;$\partial^n f/\partial x^n$&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Dt[f]&lt;/td&gt;&#10;&lt;td&gt;$df$&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Integrate[f, x]&lt;/td&gt;&#10;&lt;td&gt;$\int fdx$&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Integrate[f, {x, a, b}]&lt;/td&gt;&#10;&lt;td&gt;$\int_a^b f dx$&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Sum[f, {i, m, n}]&lt;/td&gt;&#10;&lt;td&gt;$\sum_{i=m}^n f$&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Product[f, {i, m, n}]&lt;/td&gt;&#10;&lt;td&gt;$\prod_{i=m}^n f$&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Limit[f, x-&amp;gt;a]&lt;/td&gt;&#10;&lt;td&gt;$\lim_{x\to a} f$&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-2"&gt;&#10;&lt;h2 id="headline-8"&gt;&#10;Input and output&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Command&lt;/th&gt;&#10;&lt;th&gt;Meaning&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&amp;lt;&amp;lt;file&lt;/td&gt;&#10;&lt;td&gt;read expressions from &lt;code class="verbatim"&gt;file&lt;/code&gt;, return last expression.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;expression&amp;gt;&amp;gt;file&lt;/td&gt;&#10;&lt;td&gt;write &lt;code class="verbatim"&gt;expression&lt;/code&gt; to &lt;code class="verbatim"&gt;file&lt;/code&gt;.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;expression&amp;gt;&amp;gt;&amp;gt;file&lt;/td&gt;&#10;&lt;td&gt;append &lt;code class="verbatim"&gt;expression&lt;/code&gt; to &lt;code class="verbatim"&gt;file&lt;/code&gt;.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;!!file&lt;/td&gt;&#10;&lt;td&gt;display the content of &lt;code class="verbatim"&gt;file&lt;/code&gt;.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Save[&amp;#34;file&amp;#34;, x]&lt;/td&gt;&#10;&lt;td&gt;save the definition of &lt;code class="verbatim"&gt;x&lt;/code&gt; to &lt;code class="verbatim"&gt;file&lt;/code&gt;.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;!command&lt;/td&gt;&#10;&lt;td&gt;issue a UNIX command.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-2"&gt;&#10;&lt;h2 id="headline-9"&gt;&#10;Expression in different formats&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Command&lt;/th&gt;&#10;&lt;th&gt;Meaning&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;FullForm[e]&lt;/td&gt;&#10;&lt;td&gt;full form&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;InputForm[e]&lt;/td&gt;&#10;&lt;td&gt;input&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;OutputForm[e]&lt;/td&gt;&#10;&lt;td&gt;out&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;CForm[e]&lt;/td&gt;&#10;&lt;td&gt;C codes&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;FortranForm&lt;/td&gt;&#10;&lt;td&gt;fortran&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;MatrixForm[e]&lt;/td&gt;&#10;&lt;td&gt;matrix&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;StandardForm[e]&lt;/td&gt;&#10;&lt;td&gt;math&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;TeXForm[e]&lt;/td&gt;&#10;&lt;td&gt;TEX&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-10" class="outline-2"&gt;&#10;&lt;h2 id="headline-10"&gt;&#10;Programming&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-10" class="outline-text-2"&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&#10;Table[expression, {i, max}]&#10;&lt;/dt&gt;&#10;&lt;dd&gt;make a list of values of &lt;code class="verbatim"&gt;expression&lt;/code&gt; with &lt;code class="verbatim"&gt;i&lt;/code&gt; from &lt;code class="verbatim"&gt;1&lt;/code&gt; to &lt;code class="verbatim"&gt;max&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Module[{a, b, c}, expression1; expression2;…]&#10;&lt;/dt&gt;&#10;&lt;dd&gt;a procedure with local variables &lt;code class="verbatim"&gt;a&lt;/code&gt;, &lt;code class="verbatim"&gt;b&lt;/code&gt;, &lt;code class="verbatim"&gt;c&lt;/code&gt; return value of last expression.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Do[expression, {i, min, max, di}]&#10;&lt;/dt&gt;&#10;&lt;dd&gt;evaluate &lt;code class="verbatim"&gt;expression&lt;/code&gt; with &lt;code class="verbatim"&gt;i&lt;/code&gt; run from &lt;code class="verbatim"&gt;min&lt;/code&gt; to &lt;code class="verbatim"&gt;max&lt;/code&gt; in steps of &lt;code class="verbatim"&gt;di&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;While[test, body]&#10;&lt;/dt&gt;&#10;&lt;dd&gt;evaluate &lt;code class="verbatim"&gt;body&lt;/code&gt; repeatedly, so long as &lt;code class="verbatim"&gt;test&lt;/code&gt; is &lt;code class="verbatim"&gt;True&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;For[star,test,inc,body]&#10;&lt;/dt&gt;&#10;&lt;dd&gt;evaluate &lt;code class="verbatim"&gt;start&lt;/code&gt;, then repeatedly evaluate &lt;code class="verbatim"&gt;body&lt;/code&gt; and &lt;code class="verbatim"&gt;inc&lt;/code&gt;, until &lt;code class="verbatim"&gt;test&lt;/code&gt; fails.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;If[test, then, else]&#10;&lt;/dt&gt;&#10;&lt;dd&gt;evaluate &lt;code class="verbatim"&gt;then&lt;/code&gt; if &lt;code class="verbatim"&gt;test&lt;/code&gt; is &lt;code class="verbatim"&gt;True&lt;/code&gt;, and &lt;code class="verbatim"&gt;else&lt;/code&gt; if it is &lt;code class="verbatim"&gt;False&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Which[test1,value1,test2,value2,…]&#10;&lt;/dt&gt;&#10;&lt;dd&gt;give the value associated with the first &lt;code class="verbatim"&gt;test&lt;/code&gt; that is &lt;code class="verbatim"&gt;True&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Switch[expression, form1, value1, form2, value2, …]&#10;&lt;/dt&gt;&#10;&lt;dd&gt;give the value associated with first &lt;code class="verbatim"&gt;form&lt;/code&gt; matching &lt;code class="verbatim"&gt;expression&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Function[x, body]&#10;&lt;/dt&gt;&#10;&lt;dd&gt;specify a pure function.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Nest[f, x, n]&#10;&lt;/dt&gt;&#10;&lt;dd&gt;apply the function &lt;code class="verbatim"&gt;f&lt;/code&gt; nested &lt;code class="verbatim"&gt;n&lt;/code&gt; times to &lt;code class="verbatim"&gt;x&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Apply[f, {a, b, c}]&#10;&lt;/dt&gt;&#10;&lt;dd&gt;&lt;code class="verbatim"&gt;f(a, b, c)&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Map[f, {a, b, c}]&#10;&lt;/dt&gt;&#10;&lt;dd&gt;apply &lt;code class="verbatim"&gt;f&lt;/code&gt; to each elements, &lt;code class="verbatim"&gt;{f(a), f(b), f(c)}&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Multiple Signal Classification (MUSIC)</title><link>https://shakaxi.github.io/posts/music/</link><pubDate>Mon, 19 Dec 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/music/</guid><description>&lt;p&gt;&#10;&lt;em&gt;Multiple signal classification (MUSIC)&lt;/em&gt; is a popular algorithm for spectrum estimation. This post is just written as a brief summary.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;MUSIC&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;An observation signal vector can be expressed as&lt;/p&gt;&#10;\begin{align*}&#10; \mathbf{x} = \mathbf{A} \mathbf{s} + \mathbf{n},&#10;\end{align*}&#10;&lt;p&gt;where&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;$\mathbf{A} = \begin{bmatrix} \mathbf{a}(\omega_1) &amp;amp; \mathbf{a}(\omega_2) &amp;amp; \ldots &amp;amp; \mathbf{a}(\omega_r) \end{bmatrix}$ is a $N \times r$ Vandermonde matrix, $N &amp;gt; r$; Each column is a steering vector, e.g., $\mathbf{a}(\omega) \triangleq \begin{bmatrix} 1 \\ e^{j\omega} \\ e^{j2\omega} \\ \vdots \\ e^{j(N-1)\omega} \end{bmatrix}$.&lt;/li&gt;&#10;&lt;li&gt;$\mathbf{s} = \begin{bmatrix} s_1 \\ s_2 \\ \vdots \\ s_r \end{bmatrix}$ is a signal vector.&lt;/li&gt;&#10;&lt;li&gt;$\mathbf{n} \sim \mathcal{CN}(0, \sigma^2\mathbf{I}_N)$ is a complex additive Gaussian noise vector.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Then autocorrelation matrix of observation can be obtained by&lt;/p&gt;&#10;\begin{align*}&#10; \mathbf{R}_{\mathbf{x}} &amp;amp;= \mathbf{E}[ \mathbf{x} \mathbf{x}^H] \\&#10; &amp;amp;= \mathbf{A} \mathbf{R}_{\mathbf{s}} \mathbf{A}^H + \sigma^2 \mathbf{I}_N,&#10;\end{align*}&#10;&lt;p&gt;where $\mathbf{R}_{\mathbf{s}} \triangleq \mathbf{E}[ \mathbf{s} \mathbf{s}^H]$ is the autocorrelation of signal vector $\mathbf{s}$. In practice, the autocorrelation of observation is usually calculated based on a series of observation samples, i.e., $\hat{\mathbf{R}}_{\mathbf{x}} = \dfrac{1}{M} \sum_{i=1}^M \mathbf{x}_i \mathbf{x}_i^H$, where $M$ is the number of observation samples available.&lt;/p&gt;&#10;&lt;p&gt;&#10;The autocorrelation matrix of observation can be eigen value decomposed (EVD) as&lt;/p&gt;&#10;\begin{align*}&#10; \mathbf{R}_{\mathbf{x}} &amp;amp;= \begin{bmatrix} \mathbf{U}_{\mathbf{s}} &amp;amp; \mathbf{U}_{\mathbf{n}} \end{bmatrix}&#10; \begin{bmatrix} \mathbf{\Lambda}_{\mathbf{s}} &amp;amp; \mathbf{0} \\ \mathbf{0} &amp;amp; \sigma^2 \mathbf{I}_{N-r} \end{bmatrix}&#10; \begin{bmatrix} \mathbf{U}_{\mathbf{s}}^H \\ \mathbf{U}_{\mathbf{n}}^H \end{bmatrix},&#10;\end{align*}&#10;&lt;p&gt;where&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The eigen vectors in $\mathbf{U}_{\mathbf{s}}$ corresponding to $p$ largest eigen values span the signal subspace.&lt;/li&gt;&#10;&lt;li&gt;The eigen vectors in $\mathbf{U}_{\mathbf{n}}$ corresponding to the remaining $N - r$ eigen values (equal to $\sigma^2$) span the noise subspace.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Considering the fact that the signal subspace and noise subspace are orthogonal and complementary to each other, i.e. $\text{span}(\mathbf{U}_{\mathbf{s}}) \perp \text{span}(\mathbf{U}_{\mathbf{n}})$, $\forall \mathbf{v} \in \text{span}(\mathbf{U}_{\mathbf{s}})$, $\mathbf{U}_{\mathbf{n}}^H \mathbf{v} = \mathbf{0}$. In order to depict the orthogonality quantitatively, a squared norm is introduced as follows.&lt;/p&gt;&#10;\begin{align*}&#10; d^2(\mathbf{v}) &amp;amp;= \| \mathbf{U}_{\mathbf{n}}^H \mathbf{v}\|^2 \\&#10; &amp;amp;= \mathbf{v}^H \mathbf{U}_{\mathbf{n}} \mathbf{U}_{\mathbf{n}}^H \mathbf{v} \\&#10; &amp;amp;= \mathbf{v}^H (\mathbf{I}_N - \mathbf{U}_{\mathbf{s}} \mathbf{U}_{\mathbf{s}}^H) \mathbf{v}&#10;\end{align*}&#10;&lt;p&gt;MUSIC uses the reciprocal of the squared norm $d^{-2}$ as the metric, in which case $r$ sharp peaks appear at the signal frequencies. The MUSIC spectrum can be expressed as&lt;/p&gt;&#10;\begin{align*}&#10; P_{\text{music}}(\omega) &amp;amp;= \frac{1}{d^2(\mathbf{a}(\omega))} \\&#10;&amp;amp;= \frac{1}{\mathbf{a}^H(\omega) \mathbf{U}_{\mathbf{n}} \mathbf{U}_{\mathbf{n}}^H \mathbf{a}(\omega)} \\&#10;&amp;amp; = \frac{1}{\mathbf{a}^H(\omega) (\mathbf{I}_N - \mathbf{U}_{\mathbf{s}} \mathbf{U}_{\mathbf{s}}^H) \mathbf{a}(\omega)},&#10;\end{align*}&#10;&lt;p&gt;where $\omega$ is the candidate frequency, and $\mathbf{a}(\omega)$ is the candidate steering vector.&lt;/p&gt;&#10;&lt;p&gt;&#10;So long as the number of component (e.g., $r$ above) is known in advance (as its drawback), MUSIC can outperforms DFT based schemes, since it can achieve &lt;em&gt;superresolutional&lt;/em&gt; estimation for the spectrum, rather than the discrete DFT bins.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>NR - Numerology</title><link>https://shakaxi.github.io/posts/nr_nm/</link><pubDate>Mon, 19 Dec 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/nr_nm/</guid><description>&lt;p&gt;&#10;Since release 15, &lt;em&gt;new radio (NR)&lt;/em&gt; system has explicitly proposed the concept of &lt;em&gt;numerology&lt;/em&gt;, which is used to represent the scaling of subcarrier bandwidth, FFT size, etc.&lt;/p&gt;&#10;&lt;p&gt;&#10;Above all, a &lt;em&gt;reference numerology&lt;/em&gt; is defined based on&lt;/p&gt;&#10;\begin{align*}&#10;\Delta_{\mathrm{subc, ref}} &amp;amp;= 15 \text{ kHz}, \\&#10;N_{\mathrm{FFT, ref}} &amp;amp;= 2048.&#10;\end{align*}&#10;&lt;p&gt;Accordingly, the sampling rate the sample duration can be written as&lt;/p&gt;&#10;\begin{align*}&#10;f_{\mathrm{s, ref}} &amp;amp;= \Delta_{\mathrm{subc, ref}} N_{\mathrm{FFT, ref}}, \\&#10;T_{\mathrm{s, ref}} &amp;amp;= \frac{1}{f_{\mathrm{s, ref}}} = \frac{1}{\Delta_{\mathrm{subc, ref}} N_{\mathrm{FFT, ref}}}.&#10;\end{align*}&#10;&lt;p&gt;&#10;Additionally, an extreme numerology is also defined based on&lt;/p&gt;</description></item><item><title>Python - Einops</title><link>https://shakaxi.github.io/posts/python_einops/</link><pubDate>Mon, 19 Dec 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_einops/</guid><description>&lt;p&gt;&#10;Einstein-inspired notation for operations (Einops&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;) is a python package which provides extremely flexible and powerful opertions on tensors, e.g., permuting/reordering, reshaping (combining and partitioning along axes), reducing, repeating. Moreover, it supports numpy, tensorflow, pytorch, etc.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Einops can be directly installed from pypi.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pip install einops&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Usage&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Basic functions&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;Basically, Einops provides 3 Functions, &lt;code class="verbatim"&gt;rearrange&lt;/code&gt;, &lt;code class="verbatim"&gt;reduce&lt;/code&gt;, &lt;code class="verbatim"&gt;repeat&lt;/code&gt;, which can be imported by&lt;/p&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;from&lt;/span&gt; &lt;span style="color:#24292e"&gt;einops&lt;/span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; rearrange&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; reduce&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; repeat&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rearrange&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tensor&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; pattern&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;str&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;**&lt;/span&gt;axes_lengths&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; reduce&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tensor&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;~&lt;/span&gt;Tensor&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; pattern&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;str&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; reduction&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; Union&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#6639ba"&gt;str&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Callable&lt;span style="color:#1f2328"&gt;[[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;~&lt;/span&gt;Tensor&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; List&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]],&lt;/span&gt; &lt;span style="color:#0550ae"&gt;~&lt;/span&gt;Tensor&lt;span style="color:#1f2328"&gt;]],&lt;/span&gt; &lt;span style="color:#0550ae"&gt;**&lt;/span&gt;axes_lengths&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;int&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;~&lt;/span&gt;Tensor&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; repeat&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;tensor&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#0550ae"&gt;~&lt;/span&gt;Tensor&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; pattern&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;str&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;**&lt;/span&gt;axes_lengths&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&amp;gt;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;~&lt;/span&gt;Tensor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;tensor&lt;/code&gt; is a tensor (e.g., &lt;code class="verbatim"&gt;numpy.ndarray&lt;/code&gt;, &lt;code class="verbatim"&gt;tensorflow&lt;/code&gt;, &lt;code class="verbatim"&gt;pytorch&lt;/code&gt;) or a list of tensors with the same type and shape.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;pattern&lt;/code&gt; is a string indicating rearrangement/reduction pattern.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;reduction&lt;/code&gt; can be one of &lt;code class="verbatim"&gt;&amp;#39;max&amp;#39;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;#39;min&amp;#39;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;#39;mean&amp;#39;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;#39;sum&amp;#39;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;#39;prod&amp;#39;&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;axes_lengths&lt;/code&gt; are dimension related specifications.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-4"&gt;&#10;&lt;h4 id="headline-4"&gt;&#10;&lt;code class="verbatim"&gt;rearrange&lt;/code&gt;&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-4"&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;rearrange&lt;/code&gt; does not change the number of elements inside, and can achieve the operations like transpose, reshape, stack, squeeze, unsqueeze, concatenate, etc.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-4"&gt;&#10;&lt;h4 id="headline-5"&gt;&#10;&lt;code class="verbatim"&gt;reduce&lt;/code&gt;&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-4"&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;reduce&lt;/code&gt; combines elements in one or more axes. So it reduces the total number of elements, but keeps the ordering.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-4"&gt;&#10;&lt;h4 id="headline-6"&gt;&#10;&lt;code class="verbatim"&gt;repeat&lt;/code&gt;&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-4"&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;repeat&lt;/code&gt; produces repetition and tiling.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-3"&gt;&#10;&lt;h3 id="headline-7"&gt;&#10;Layers&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-3"&gt;&#10;&lt;p&gt;Einops also provides two corresponding layers, which can be directly integrated into any neural network.&lt;/p&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;from&lt;/span&gt; &lt;span style="color:#24292e"&gt;einops.layers.chainer&lt;/span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; Rearrange&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Reduce&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;from&lt;/span&gt; &lt;span style="color:#24292e"&gt;einops.layers.gluon&lt;/span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; Rearrange&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Reduce&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;from&lt;/span&gt; &lt;span style="color:#24292e"&gt;einops.layers.keras&lt;/span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; Rearrange&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Reduce&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;from&lt;/span&gt; &lt;span style="color:#24292e"&gt;einops.layers.torch&lt;/span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; Rearrange&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Reduce&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;from&lt;/span&gt; &lt;span style="color:#24292e"&gt;einops.layers.tensorflow&lt;/span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; Rearrange&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Reduce&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Taking pytorch for instace, a &lt;code class="verbatim"&gt;Rearrange&lt;/code&gt; layer or a &lt;code class="verbatim"&gt;Reduce&lt;/code&gt; layer can be generated by&lt;/p&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Rearrange&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;pattern&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;**&lt;/span&gt;axes_lengths&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Reduce&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;pattern&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; reduction&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;**&lt;/span&gt;axes_lengths&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Python - Function</title><link>https://shakaxi.github.io/posts/python_fun/</link><pubDate>Mon, 19 Dec 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_fun/</guid><description>&lt;p&gt;&#10;在Python中，函数通过关键字 &lt;code class="verbatim"&gt;def&lt;/code&gt; 定义。&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;参数&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;从函数的角度，parameter指函数定义圆括号内的变量列表，而argument指当函数被调用时传递的值。&lt;/p&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;Parameter&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-4"&gt;&#10;&lt;h4 id="headline-3"&gt;&#10;变长参数(variable-length)&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;参数名前加 &lt;code class="verbatim"&gt;*&lt;/code&gt; 可以表示该参数可以接受任意数目的位置参数。这种情况下，函数会接受元组参数(a tuple of arguments)。以 &lt;code class="verbatim"&gt;*&lt;/code&gt; 开头的参数只能以最后一个位置参数的形式出现。&lt;/li&gt;&#10;&lt;li&gt;参数名前加 &lt;code class="verbatim"&gt;**&lt;/code&gt; 可以表示该参数可以接受任意数目的关键字参数。这种情况下，函数会接受元组参数(a tuple of arguments)。以 &lt;code class="verbatim"&gt;**&lt;/code&gt; 开头的参数只能以最后一个参数的形式出现。 &lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-4"&gt;&#10;&lt;h4 id="headline-4"&gt;&#10;默认参数（可选参数）&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;可以在函数定义时，为参数指定默认值。&lt;/li&gt;&#10;&lt;li&gt;值得注意的是，默认值生效是在函数定义的时候，而不是在函数调用的时候。&lt;/li&gt;&#10;&lt;li&gt;一旦某个参数有默认值，那么后续所有参数都必须有默认值。为此，需要把有默认值的参数放在没有默认值的参数后面。&lt;/li&gt;&#10;&lt;li&gt;参数默认值应该重视不可变的对象，比如 &lt;code class="verbatim"&gt;None&lt;/code&gt;, &lt;code class="verbatim"&gt;True&lt;/code&gt;, &lt;code class="verbatim"&gt;False&lt;/code&gt;, 数字或者字符串。&lt;/li&gt;&#10;&lt;li&gt;如果默认值是可变容器的话，比如列表、集合或者字典，应该把 &lt;code class="verbatim"&gt;None&lt;/code&gt; 作为默认值，并在函数体内增加对默认值的检查。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Argument&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;p&gt;函数调用时的参数可以分为位置参数(positional argument)和关键字参数(keyword argument)。&lt;/p&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-4"&gt;&#10;&lt;h4 id="headline-6"&gt;&#10;位置参数&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;位置参数按照调用顺序为对应的参数赋值。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-4"&gt;&#10;&lt;h4 id="headline-7"&gt;&#10;关键字参数&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;关键字参数的调用方式为 &lt;code class="verbatim"&gt;kwarg=value&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;li&gt;函数调用时，关键字参数的顺序可以是任意的。&lt;/li&gt;&#10;&lt;li&gt;关键字参数必须放在位置参数之后。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-4"&gt;&#10;&lt;h4 id="headline-8"&gt;&#10;调用方式的限制&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-4"&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;fn&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;positional_only1&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; positional_only2&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; positional_or_keyword1&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; positional_or_keyword2&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; keyword_only1&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; keyword_only2&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;如果 &lt;code class="verbatim"&gt;/&lt;/code&gt; 和 &lt;code class="verbatim"&gt;*&lt;/code&gt; 都没有，那么函数调用时参数赋值既可以是以位置参数的方式，也可以是关键字参数的方式。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;/&lt;/code&gt; 之前的参数赋值必须以位置参数的形式。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;*&lt;/code&gt; 之后的参数赋值必须以关键字参数的形式。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-2"&gt;&#10;&lt;h2 id="headline-9"&gt;&#10;Docstring&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-2"&gt;&#10;&lt;p&gt;对函数功能以及参数的描述。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Sparse Array</title><link>https://shakaxi.github.io/posts/sparse_array/</link><pubDate>Mon, 19 Dec 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/sparse_array/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Concepts&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Given a sparse array, the locations of its component antennas/sensors can be normalized to a minimum inter-antenna distance, denoted by $d$, e.g., typically $d = \lambda / 2$. Accordingly, a sparse array can be simply denoted by an integer set $\mathbb{S}$, and the locations of the antennas are $nd$, $n \in \mathbb{S}$.&lt;/p&gt;&#10;&lt;p&gt;&#10;Given a sparse array $\mathbb{S}$, its &lt;em&gt;difference coarray (DCA)&lt;/em&gt; is defined as&lt;/p&gt;&#10;\begin{align*}&#10; \mathbb{D} \triangleq \{n_1 - n_2 \mid n_1, n_2 \in \mathbb{S}\}.&#10;\end{align*}&#10;&lt;ul&gt;&#10;&lt;li&gt;Each entry in $\mathbb{D}$ is termed a &lt;em&gt;spatial lag&lt;/em&gt;.&lt;/li&gt;&#10;&lt;li&gt;The cardinality of DCA, i.e., $|\mathbb{D}|$, is termed &lt;em&gt;degree of freedom (DoF)&lt;/em&gt; of the sparse array $\mathbb{S}$.&lt;/li&gt;&#10;&lt;li&gt;Clearly, DCA is symmetric, i.e., $\forall n \in \mathbb{D}$, $-n \in \mathbb{D}$.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Let $\mathbb{U}$ denote the central ULA segment of $\mathbb{D}$. Its cardinality $|\mathbb{U}|$ is termed &lt;em&gt;uniform degree of freedom (UDoF)&lt;/em&gt;. Then, the number of uncorrelated sources which can be identified is $\dfrac{|\mathbb{U}| - 1}{2}$.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Direction Cosine</title><link>https://shakaxi.github.io/posts/dir_cosine/</link><pubDate>Sat, 29 Jan 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/dir_cosine/</guid><description>&lt;p&gt;&#10;In 3-dimension (3-D) space, a non-zero vector can be denoted by&lt;/p&gt;&#10;\begin{align*}&#10; \mathbf{v} = v_x \mathbf{e}_x + v_y \mathbf{e}_y + v_z \mathbf{e}_z,&#10;\end{align*}&#10;&lt;p&gt;where&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;$\mathbf{e}_x = \begin{bmatrix} 1 \\ 0 \\ 0 \end{bmatrix}$, $\mathbf{e}_y = \begin{bmatrix} 0 \\ 1 \\ 0 \end{bmatrix}$, and $\mathbf{e}_z = \begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix}$ are the unit vectors of the 3 axes, respectively.&lt;/li&gt;&#10;&lt;li&gt;$v_x$, $v_y$, and $v_z$ are the components of $\mathbf{v}$ projected to the 3 axes.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;For vector $\mathbf{v}$, its &lt;em&gt;direction cosine&lt;/em&gt; vector can be expressed as&lt;/p&gt;</description></item><item><title>Estimation of Signal Parameters by Rotational Invariance Techniques (ESPRIT)</title><link>https://shakaxi.github.io/posts/esprit/</link><pubDate>Sun, 09 Jan 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/esprit/</guid><description>&lt;p&gt;&#10;&lt;em&gt;Estimation of Signal Parameters by Rotational Invariance Techniques (ESPRIT)&lt;/em&gt;, as its name indicates, is an algorithm to estimate the frequency of sinusoid waves from a noisy mixture of them. Additionally, it can also be used for direction of arrival (DoA) estimation in a multiantenna system. This post describes its principle.&lt;/p&gt;&#10;&lt;p&gt;&#10;An observation signal vector can be expressed as&lt;/p&gt;&#10;\begin{align*}&#10; \mathbf{x} = \mathbf{A} \mathbf{s} + \mathbf{n},&#10;\end{align*}&#10;&lt;p&gt;where&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;$\mathbf{A} = \begin{bmatrix} \mathbf{a}(\omega_1) &amp;amp; \mathbf{a}(\omega_2) &amp;amp; \ldots &amp;amp; \mathbf{a}(\omega_r) \end{bmatrix}$ is a $N \times r$ Vandermonde matrix, $N &amp;gt; r$; Each column is a steering vector, e.g., $\mathbf{a}(\omega) \triangleq \begin{bmatrix} 1 \\ e^{j\omega} \\ e^{j2\omega} \\ \vdots \\ e^{j(N-1)\omega} \end{bmatrix}$.&lt;/li&gt;&#10;&lt;li&gt;$\mathbf{s} = \begin{bmatrix} s_1 \\ s_2 \\ \vdots \\ s_r \end{bmatrix}$ is a signal vector.&lt;/li&gt;&#10;&lt;li&gt;$\mathbf{n} \sim \mathcal{CN}(0, \sigma^2\mathbf{I}_N)$ is a complex additive Gaussian noise vector.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Then autocorrelation matrix of observation can be obtained by&lt;/p&gt;</description></item><item><title>C++ - Standard Template Library (STL)</title><link>https://shakaxi.github.io/posts/cpp_stl/</link><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/cpp_stl/</guid><description>&lt;p&gt;&#10;标准模板库(standard template library, STL)是C++标准库的子集, 其大量使用了模板.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;容器&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;STL中的所有容器都是模板, 是泛型结构, 因此可以通过这些容器保存任意类型的数据. 除 &lt;code class="verbatim"&gt;array&lt;/code&gt; 和 &lt;code class="verbatim"&gt;bitset&lt;/code&gt; 外, 大部分STL容器的大小灵活多变, 都能自动增长或收缩, 以容纳更多或者更少的元素.&lt;/li&gt;&#10;&lt;li&gt;STL容器是同构的, 每个容器实例只允许一种类型的元素.&lt;/li&gt;&#10;&lt;li&gt;STL容器对元素使用值语义(value semantic)。因此，编写要用于STL的类时，一定要保证它们是可复制的。如果需要引用语义，必须自己实现。实现方法是保存元素指针，而不是保存元素本身。可以使用 &lt;code class="verbatim"&gt;unique_ptr&lt;/code&gt;, 使容器成为该指针所指对象的拥有者；或者使用 &lt;code class="verbatim"&gt;shared_ptr&lt;/code&gt;, 使容器与其他拥有者共享拥有权。&lt;/li&gt;&#10;&lt;li&gt;STL容器的一个模板类型参数是分配器(allocator)。该容器可以使用该分配器来为元素分配内存或释放内存。有些容器(例如 &lt;code class="verbatim"&gt;map&lt;/code&gt;)也接受将一个比较器(comparator)作为一个模板类型参数。比较器用作顺序元素。&lt;/li&gt;&#10;&lt;li&gt;所有的STL容器都包含了移动构造函数和移动赋值运算符, 从而实现了移动语义.&lt;/li&gt;&#10;&lt;li&gt;移动语义要正确地用于STL容器，必须把移动构造函数和移动复制运算符标记为 &lt;code class="verbatim"&gt;noexcept&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;C++11在大部分STL容器中添加了对 &lt;code class="verbatim"&gt;emplace&lt;/code&gt; 操作的支持. &lt;code class="verbatim"&gt;emplace&lt;/code&gt; 的意思是放置到位, 就地构件对象.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;顺序容器(sequential container)&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;p&gt;顺序容器是元素的序列。&lt;/p&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-4"&gt;&#10;&lt;h4 id="headline-3"&gt;&#10;&lt;code class="verbatim"&gt;vector&lt;/code&gt;&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;vector&amp;gt;&lt;/code&gt; 中.&lt;/li&gt;&#10;&lt;li&gt;提供对元素的随机访问.&lt;/li&gt;&#10;&lt;li&gt;元素保存在连续的内存中.&lt;/li&gt;&#10;&lt;li&gt;能够在尾部快速插入和删除元素, 在其他部位插入和删除操作比较慢.&lt;/li&gt;&#10;&lt;li&gt;可以在本来需要使用数组的地方使用 &lt;code class="verbatim"&gt;vector&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;在任何可能的情况下使用 &lt;code class="verbatim"&gt;vector&lt;/code&gt; 而不是C风格的数组.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;vector&lt;/code&gt; 的默认构造函数会创建一个带有0个元素的 &lt;code class="verbatim"&gt;vector&lt;/code&gt;. 此外, 还提供了一个可以指定元素数量的构造函数, 和同时指定元素数目和元素值的构造函数. 如果没有提供默认值, 那么新对象通过0初始化——将原始的整型类型初始化为0, 将原始浮点类型初始化为0.0, 将指针类型初始化为 &lt;code class="verbatim"&gt;nullptr&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;vector&lt;/code&gt; 存储对象的副本, 其析构函数调用每个对象的析构函数. &lt;code class="verbatim"&gt;vector&lt;/code&gt; 类的复制构造函数和赋值运算符对 &lt;code class="verbatim"&gt;vector&lt;/code&gt; 中的所有元素执行深度复制.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;assign()&lt;/code&gt; 方法删除所有现有的元素, 并添加任意数目的新元素.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;swap()&lt;/code&gt; 方法可以交换两个 &lt;code class="verbatim"&gt;vector&lt;/code&gt; 的内容.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;vector&lt;/code&gt; 的 &lt;code class="verbatim"&gt;operator[]&lt;/code&gt; 没有提供边界检查功能. C++标准指出通过 &lt;code class="verbatim"&gt;operator[]&lt;/code&gt; 访问边界外元素得到的结果是未定义的. 不同的是, &lt;code class="verbatim"&gt;at()&lt;/code&gt; 方法会执行边界检查, 越界会抛出异常(&lt;code class="verbatim"&gt;out_of_range&lt;/code&gt;).&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;front()&lt;/code&gt; 和 &lt;code class="verbatim"&gt;back()&lt;/code&gt; 分别返回 &lt;code class="verbatim"&gt;vector&lt;/code&gt; 的第一个元素和最后一个元素的引用.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;size()&lt;/code&gt; 返回 &lt;code class="verbatim"&gt;vector&lt;/code&gt; 中元素的数目.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;capacity()&lt;/code&gt; 返回 &lt;code class="verbatim"&gt;vector&lt;/code&gt; 在重分配之前可以保存的元素个数. 因此, 在重分配之前还能插入的元素个数为 &lt;code class="verbatim"&gt;capacity() - size()&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;resize()&lt;/code&gt; 可以指定 &lt;code class="verbatim"&gt;vector&lt;/code&gt; 要保存的元素数目.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;reserve()&lt;/code&gt; 可以预分配空间.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;push_back()&lt;/code&gt; 可以向 &lt;code class="verbatim"&gt;vector&lt;/code&gt; 追加元素.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;pop_back()&lt;/code&gt; 可以删除 &lt;code class="verbatim"&gt;vector&lt;/code&gt; 最后一个元素. 注意, 该方法不会返回已删除的元素. 如果要访问这个元素, 必须首先通过 &lt;code class="verbatim"&gt;back()&lt;/code&gt; 获得这个元素.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;insert()&lt;/code&gt; 方法可以在 &lt;code class="verbatim"&gt;vector&lt;/code&gt; 中任意位置插入元素.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;erase()&lt;/code&gt; 方法可以在 &lt;code class="verbatim"&gt;vector&lt;/code&gt; 中任意位置删除元素.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;clear()&lt;/code&gt; 方法可以删除所有元素.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-4"&gt;&#10;&lt;h4 id="headline-4"&gt;&#10;&lt;code class="verbatim"&gt;list&lt;/code&gt; (双向链表)&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;list&amp;gt;&lt;/code&gt; 中.&lt;/li&gt;&#10;&lt;li&gt;元素查找和访问很慢.&lt;/li&gt;&#10;&lt;li&gt;元素不一定保存在连续的内存中.&lt;/li&gt;&#10;&lt;li&gt;插入和删除很快.&lt;/li&gt;&#10;&lt;li&gt;不支持元素的随机访问, 访问元素的方法只有 &lt;code class="verbatim"&gt;front()&lt;/code&gt; 和 &lt;code class="verbatim"&gt;back()&lt;/code&gt;, 分别返回第一个元素和最后一个元素的引用. 访问其他的元素必须通过迭代器.&lt;/li&gt;&#10;&lt;li&gt;应该尽量使用 &lt;code class="verbatim"&gt;list&lt;/code&gt; 方法而不是泛型STL算法, 因为前者更高效.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-4"&gt;&#10;&lt;h4 id="headline-5"&gt;&#10;&lt;code class="verbatim"&gt;forward_list&lt;/code&gt; (单向链表)&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;只支持前向迭代.&lt;/li&gt;&#10;&lt;li&gt;没有提供快速的随机访问.&lt;/li&gt;&#10;&lt;li&gt;内存需求比 &lt;code class="verbatim"&gt;list&lt;/code&gt; 小.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-4"&gt;&#10;&lt;h4 id="headline-6"&gt;&#10;&lt;code class="verbatim"&gt;deque&lt;/code&gt; (双头队列)&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;deque&amp;gt;&lt;/code&gt; 中.&lt;/li&gt;&#10;&lt;li&gt;不要求元素保存在连续内存中.&lt;/li&gt;&#10;&lt;li&gt;提供了快速的元素访问.&lt;/li&gt;&#10;&lt;li&gt;在序列两端提供了快速的插入和删除(常量时间).&lt;/li&gt;&#10;&lt;li&gt;在序列中间插入和删除的速度较慢.&lt;/li&gt;&#10;&lt;li&gt;提供了 &lt;code class="verbatim"&gt;push_front()&lt;/code&gt;, &lt;code class="verbatim"&gt;pop_front()&lt;/code&gt; 和 &lt;code class="verbatim"&gt;emplace_front()&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-4"&gt;&#10;&lt;h4 id="headline-7"&gt;&#10;&lt;code class="verbatim"&gt;array&lt;/code&gt;&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;array&amp;gt;&lt;/code&gt; 中.&lt;/li&gt;&#10;&lt;li&gt;标准C风格数组的替代品, 实际上是对C风格数组的简单包装.&lt;/li&gt;&#10;&lt;li&gt;适合大小固定的集合. 不能增加或收缩.&lt;/li&gt;&#10;&lt;li&gt;没有提供插入和删除操作.&lt;/li&gt;&#10;&lt;li&gt;元素的访问速度极快.&lt;/li&gt;&#10;&lt;li&gt;要求两个模板参数: 第一个参数指定了元素类型; 第二个参数指定了元素的固定数量.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-3"&gt;&#10;&lt;h3 id="headline-8"&gt;&#10;容器适配器(adaptor)&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-3"&gt;&#10;&lt;p&gt;容器适配器只是构建在某种标准顺序容器上的简单接口。&lt;/p&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-4"&gt;&#10;&lt;h4 id="headline-9"&gt;&#10;&lt;code class="verbatim"&gt;queue&lt;/code&gt;&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;queue&amp;gt;&lt;/code&gt; 中.&lt;/li&gt;&#10;&lt;li&gt;提供了标准的先入先出(FIFO)语义.&lt;/li&gt;&#10;&lt;li&gt;从一端插入元素, 从另一端取出元素.&lt;/li&gt;&#10;&lt;li&gt;插入元素和删除元素都很快.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;push()&lt;/code&gt; 和 &lt;code class="verbatim"&gt;emplace()&lt;/code&gt; 方法在 &lt;code class="verbatim"&gt;queue&lt;/code&gt; 尾部添加一个新元素&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;pop()&lt;/code&gt; 移除头部元素.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;front()&lt;/code&gt; 和 &lt;code class="verbatim"&gt;back()&lt;/code&gt; 分别返回第一个元素和最后一个元素的引用, 而不会删除元素.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-10" class="outline-4"&gt;&#10;&lt;h4 id="headline-10"&gt;&#10;&lt;code class="verbatim"&gt;priority_queue&lt;/code&gt;&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-10" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;queue&amp;gt;&lt;/code&gt; 中.&lt;/li&gt;&#10;&lt;li&gt;插入删除比 &lt;code class="verbatim"&gt;queue&lt;/code&gt; 要慢.&lt;/li&gt;&#10;&lt;li&gt;其头元素的优先级最高。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;push()&lt;/code&gt; 和 &lt;code class="verbatim"&gt;emplace()&lt;/code&gt; 方法可以插入元素。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;pop()&lt;/code&gt; 可以删除元素。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;top()&lt;/code&gt; 可以返回头元素的const引用。&lt;/li&gt;&#10;&lt;li&gt;支持 &lt;code class="verbatim"&gt;size()&lt;/code&gt;, &lt;code class="verbatim"&gt;empty&lt;/code&gt; 和 &lt;code class="verbatim"&gt;swap()&lt;/code&gt; 方法。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-11" class="outline-4"&gt;&#10;&lt;h4 id="headline-11"&gt;&#10;&lt;code class="verbatim"&gt;stack&lt;/code&gt;&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-11" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;stack&amp;gt;&lt;/code&gt; 中.&lt;/li&gt;&#10;&lt;li&gt;提供了标准的先入后出(FILO)语义，也称为后入先出语义.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;push()&lt;/code&gt; 在stack顶部添加一个新元素。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;pop()&lt;/code&gt; 从stack顶部删除一个元素。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;top()&lt;/code&gt; 返回顶部元素的引用。&lt;/li&gt;&#10;&lt;li&gt;最新插入的元素第一个被删除.&lt;/li&gt;&#10;&lt;li&gt;提供了快速的元素插入和删除.&lt;/li&gt;&#10;&lt;li&gt;支持 &lt;code class="verbatim"&gt;size()&lt;/code&gt;, &lt;code class="verbatim"&gt;empty&lt;/code&gt; 和 &lt;code class="verbatim"&gt;swap()&lt;/code&gt; 方法和标准的比较运算符。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-12" class="outline-3"&gt;&#10;&lt;h3 id="headline-12"&gt;&#10;关联容器&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-12" class="outline-text-3"&gt;&#10;&lt;p&gt;关联容器是关联了键和值的容器。&lt;/p&gt;&#10;&lt;div id="outline-container-headline-13" class="outline-4"&gt;&#10;&lt;h4 id="headline-13"&gt;&#10;&lt;code class="verbatim"&gt;pair&lt;/code&gt; 工具类&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-13" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;pair&lt;/code&gt; 是一个类模板， 将两个可能属于不同类型的值组合起来。&lt;/li&gt;&#10;&lt;li&gt;通过 &lt;code class="verbatim"&gt;first&lt;/code&gt; 和 &lt;code class="verbatim"&gt;second&lt;/code&gt; 公共数据成员访问这两个值。&lt;/li&gt;&#10;&lt;li&gt;定义了 &lt;code class="verbatim"&gt;operator==&lt;/code&gt; 和 &lt;code class="verbatim"&gt;operator&amp;lt;&lt;/code&gt; ， 用于比较 &lt;code class="verbatim"&gt;first&lt;/code&gt; 和 &lt;code class="verbatim"&gt;second&lt;/code&gt; 元素。&lt;/li&gt;&#10;&lt;li&gt;工具函数模板 &lt;code class="verbatim"&gt;make_pair()&lt;/code&gt; 用于从两个值构造一个 &lt;code class="verbatim"&gt;pair&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;li&gt;在 &lt;code class="verbatim"&gt;pair&lt;/code&gt; 中使用一般指针是危险的，因为 &lt;code class="verbatim"&gt;pair&lt;/code&gt; 复制构造函数和赋值运算符只对指针类型进行浅复制和赋值。然而，在 &lt;code class="verbatim"&gt;pair&lt;/code&gt; 中保存 &lt;code class="verbatim"&gt;shared_ptr&lt;/code&gt; 这样的智能指针则是很安全的。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-14" class="outline-4"&gt;&#10;&lt;h4 id="headline-14"&gt;&#10;排序关联容器或有序关联容器&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-14" class="outline-text-4"&gt;&#10;&lt;div id="outline-container-headline-15" class="outline-5"&gt;&#10;&lt;h5 id="headline-15"&gt;&#10;&lt;code class="verbatim"&gt;map&lt;/code&gt; 和 &lt;code class="verbatim"&gt;multimap&lt;/code&gt;&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-15" class="outline-text-5"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;map&amp;gt;&lt;/code&gt; 中，保存的是键/值对。&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;map&lt;/code&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;向 &lt;code class="verbatim"&gt;map&lt;/code&gt; 添加元素的方法是 &lt;code class="verbatim"&gt;insert()&lt;/code&gt; ，其允许判断键是否已经存在。该方法必须将键/值指定为 &lt;code class="verbatim"&gt;pair&lt;/code&gt; 对象或 &lt;code class="verbatim"&gt;initializer_list&lt;/code&gt; ，返回值为迭代器和布尔值组成的 &lt;code class="verbatim"&gt;pair()&lt;/code&gt; 。布尔值指示是否真的插入了新的键/值对，迭代器引用的是 &lt;code class="verbatim"&gt;map&lt;/code&gt; 中带有指定键的元素。如果指定的键已经存在，那么 &lt;code class="verbatim"&gt;insert()&lt;/code&gt; 不会改写元素值。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;operator[]&lt;/code&gt; 也可以插入元素。但是 &lt;code class="verbatim"&gt;operator[]&lt;/code&gt; 总是成功。如果给定键没有对应的元素值，就会创建带有对应键值的新元素。如果具有给定键的元素已经存在，那么 &lt;code class="verbatim"&gt;operator[]&lt;/code&gt; 会将元素值替换为新指定的值。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;find()&lt;/code&gt; 方法可以查找给定键值的元素。如果元素存在，这个方法返回指向具有指定键值的元素的迭代器；如果元素不存在，则返回 &lt;code class="verbatim"&gt;end()&lt;/code&gt; 迭代器。此外， &lt;code class="verbatim"&gt;operator[]&lt;/code&gt; 可以查找给定键值的元素，但是如果不知道元素是否存在，就不能使用 &lt;code class="verbatim"&gt;operator[]&lt;/code&gt; 。因为如果元素不存在， &lt;code class="verbatim"&gt;operator[]&lt;/code&gt; 就会插入一个包含相应键值的新元素。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;multimap&lt;/code&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;multimap&lt;/code&gt; 是一个允许多个元素使用同一个键值的 &lt;code class="verbatim"&gt;map&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;multimap&lt;/code&gt; 不提供 &lt;code class="verbatim"&gt;operator[]&lt;/code&gt;. 其将所有带有同一个键值的元素保存在一起, 并提供了方法获得这个子范围的迭代器: &lt;code class="verbatim"&gt;lower_bound()&lt;/code&gt; 和 &lt;code class="verbatim"&gt;upper_bound()&lt;/code&gt; 方法分别返回满足给定键值的第一个元素和最后一个元素之后一个元素的迭代器. 如果没有元素匹配这个键值, 那么 &lt;code class="verbatim"&gt;lower_bound()&lt;/code&gt; 和 &lt;code class="verbatim"&gt;upper_bound()&lt;/code&gt; 相等. 此外, &lt;code class="verbatim"&gt;equal_range()&lt;/code&gt; 方法返回两个迭代器的 &lt;code class="verbatim"&gt;pair&lt;/code&gt;, 分别是 &lt;code class="verbatim"&gt;lower_bound()&lt;/code&gt; 和 &lt;code class="verbatim"&gt;upper_bound()&lt;/code&gt; 返回的迭代器.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-16" class="outline-5"&gt;&#10;&lt;h5 id="headline-16"&gt;&#10;&lt;code class="verbatim"&gt;set&lt;/code&gt; 和 &lt;code class="verbatim"&gt;multiset&lt;/code&gt;&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-16" class="outline-text-5"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;set&amp;gt;&lt;/code&gt; 中。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;multiset&lt;/code&gt; 和 &lt;code class="verbatim"&gt;set&lt;/code&gt; 的关系等同于 &lt;code class="verbatim"&gt;multimap&lt;/code&gt; 和 &lt;code class="verbatim"&gt;map&lt;/code&gt; 的关系. &lt;code class="verbatim"&gt;multiset&lt;/code&gt; 支持 &lt;code class="verbatim"&gt;set&lt;/code&gt; 的所有操作, 但允许容器中同时保存多个相等的元素.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-17" class="outline-4"&gt;&#10;&lt;h4 id="headline-17"&gt;&#10;无序关联容器或哈希表(hash table)&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-17" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;unordered_map&lt;/code&gt; 和 &lt;code class="verbatim"&gt;unordered_multimap&lt;/code&gt; 定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;unordered_map&amp;gt;&lt;/code&gt; 中, 都是类模板. &lt;code class="verbatim"&gt;unordered_multimap&lt;/code&gt; 是允许多个元素带有同一个键值的 &lt;code class="verbatim"&gt;unordered_map&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;unordered_set&lt;/code&gt; 和 &lt;code class="verbatim"&gt;unordered_multiset&lt;/code&gt; 定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;unordered_set&amp;gt;&lt;/code&gt; 中. 二者分别类似于 &lt;code class="verbatim"&gt;set&lt;/code&gt; 和 &lt;code class="verbatim"&gt;multiset&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;无序关联容器使用了哈希函数(hash function), 所以也称为哈希表.&lt;/li&gt;&#10;&lt;li&gt;哈希表的实现通常会使用某种形式的数组, 数组中的每个元素都称为桶(bucket).&lt;/li&gt;&#10;&lt;li&gt;哈希函数的结果未必是唯一的. 两个或多个键哈希到同一个桶索引, 称为冲突(collision).&lt;/li&gt;&#10;&lt;li&gt;C++标准为指针和所有基本数据类型(例如 &lt;code class="verbatim"&gt;bool&lt;/code&gt;, &lt;code class="verbatim"&gt;char&lt;/code&gt;, &lt;code class="verbatim"&gt;int&lt;/code&gt;, &lt;code class="verbatim"&gt;float&lt;/code&gt;, &lt;code class="verbatim"&gt;double&lt;/code&gt; 等)提供了哈希函数, 也为 &lt;code class="verbatim"&gt;error_code&lt;/code&gt;, &lt;code class="verbatim"&gt;bitset&lt;/code&gt;, &lt;code class="verbatim"&gt;unique_ptr&lt;/code&gt;, &lt;code class="verbatim"&gt;shared_ptr&lt;/code&gt;, &lt;code class="verbatim"&gt;type_index&lt;/code&gt;, &lt;code class="verbatim"&gt;string&lt;/code&gt;, &lt;code class="verbatim"&gt;vector&amp;lt;bool&amp;gt;&lt;/code&gt; 和 &lt;code class="verbatim"&gt;thread&lt;/code&gt; 提供了哈希函数.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-18" class="outline-3"&gt;&#10;&lt;h3 id="headline-18"&gt;&#10;其他容器&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-18" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;bitset&amp;gt;&lt;/code&gt; 中的 &lt;code class="verbatim"&gt;bitset&lt;/code&gt; 并不是一个真正的STL容器: 固定大小(声明时指定大小), 不支持迭代器.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;string&lt;/code&gt; 也可看做字符的顺序容器.&lt;/li&gt;&#10;&lt;li&gt;STL提供了名为 &lt;code class="verbatim"&gt;istream_iterator&lt;/code&gt; 和 &lt;code class="verbatim"&gt;ostream_iterator&lt;/code&gt; 的特殊迭代器, 用于&amp;#34;遍历&amp;#34;输入和输出流.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Linux - Bash</title><link>https://shakaxi.github.io/posts/bash/</link><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/bash/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Running ways&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&#10;Make the shell script executable&#10;&lt;/dt&gt;&#10;&lt;dd&gt;The script should begin with the shebang (e.g. &lt;code class="verbatim"&gt;#!/bin/bash&lt;/code&gt;).&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Treat the shell script as the argument of &lt;code class="verbatim"&gt;sh&lt;/code&gt;&#10;&lt;/dt&gt;&#10;&lt;dd&gt;In this case, the shebang is not necessary.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Print&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;&lt;code class="verbatim"&gt;echo&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;By default, a line break is appended every time it is invoked.&lt;/li&gt;&#10;&lt;li&gt;The default line break can be avoided by option &lt;code class="verbatim"&gt;-n&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;&lt;code class="verbatim"&gt;printf&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Syntax&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;printf&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;format_list&amp;#34;&lt;/span&gt; content/variable_list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Format&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;%s&lt;/code&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;%3s&lt;/code&gt;: 3-character wide and right alignment.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;%-3s&lt;/code&gt;: 3-character wide and left alignment.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;%c&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\n&lt;/code&gt;: line break.&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;%f&lt;/code&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;%5.2f&lt;/code&gt;: 5-character wide with 2 of them for decimal portion, right alignment.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;%-5.2f&lt;/code&gt;: 5-character wide with 2 of them for decimal portion, left alignment.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Linux - Dynamic Window Manager (DWM)</title><link>https://shakaxi.github.io/posts/dwm/</link><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/dwm/</guid><description>&lt;p&gt;&#10;&lt;a href="https://dwm.suckless.org"&gt;Dynamic window manager (DWM)&lt;/a&gt;, as one component of the &lt;a href="https://suckless.org"&gt;suckless&lt;/a&gt; suite, is a flexible but lightweight window manager for X. This post just summarizes the procedure of installation and customization.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;DWM&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;Download the source codes&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; git clone --depth&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt; https://git.suckless.org/dwm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Customization&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Patch&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Addtional features are supported as patches, which can be downloaded from &lt;a href="https://dwm.suckless.org/patches."&gt;https://dwm.suckless.org/patches.&lt;/a&gt; E.g., &lt;code class="verbatim"&gt;alpha&lt;/code&gt;, &lt;code class="verbatim"&gt;hide_vacant_tags&lt;/code&gt;, &lt;code class="verbatim"&gt;pertag&lt;/code&gt;, &lt;code class="verbatim"&gt;rotatestack&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;In order to record and maintain the customization with git, patches can be applied by&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; git apply PATCH.diff&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;config.def.h&lt;/code&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Users can further tweak DWM&amp;#39;s appearance and behaviors by editing this file. E.g.,&lt;/p&gt;&#10;&lt;div class="src src-c"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* See LICENSE file for copyright and license details. */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;lt;X11/XF86keysym.h&amp;gt;&lt;/span&gt;&lt;span style="color:#57606a"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* appearance */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;unsigned&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; borderpx &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; &lt;span style="color:#57606a"&gt;/* border pixel of windows */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;unsigned&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; snap &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;32&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; &lt;span style="color:#57606a"&gt;/* snap pixel */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; showbar &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; &lt;span style="color:#57606a"&gt;/* 0 means no bar */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; topbar &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; &lt;span style="color:#57606a"&gt;/* 0 means bottom bar */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;fonts&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Sarasa Mono SC:size=18&amp;#34;&lt;/span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* static const char dmenufont[] = &amp;#34;monospace:size=10&amp;#34;; */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; col_gray1&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;#222222&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; col_gray2&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;#444444&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; col_gray3&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;#bbbbbb&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; col_gray4&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;#eeeeee&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; col_cyan&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;#005577&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;unsigned&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; baralpha &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0xd0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;unsigned&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; borderalpha &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; OPAQUE&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;colors&lt;span style="color:#1f2328"&gt;[][&lt;/span&gt;&lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* fg bg border */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;SchemeNorm&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; col_gray3&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; col_gray1&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; col_gray2 &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;SchemeSel&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; col_gray4&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; col_cyan&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; col_cyan &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;unsigned&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; alphas&lt;span style="color:#1f2328"&gt;[][&lt;/span&gt;&lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* fg bg border */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;SchemeNorm&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; OPAQUE&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; baralpha&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; borderalpha &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;SchemeSel&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; OPAQUE&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; baralpha&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; borderalpha &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* tagging */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;tags&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;3&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;4&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;6&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;7&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;8&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;9&amp;#34;&lt;/span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; Rule rules&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* xprop(1):&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; ,*&#9;WM_CLASS(STRING) = instance, class&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; ,*&#9;WM_NAME(STRING) = title&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; ,*/&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* class instance title tags mask isfloating monitor */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* { &amp;#34;Gimp&amp;#34;, NULL, NULL, 0, 1, -1 }, */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Chromium&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* layout(s) */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;float&lt;/span&gt; mfact &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0.6&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; &lt;span style="color:#57606a"&gt;/* factor of master area size [0.05..0.95] */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; nmaster &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; &lt;span style="color:#57606a"&gt;/* number of clients in master area */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; resizehints &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; &lt;span style="color:#57606a"&gt;/* 1 means respect size hints in tiled resizals */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; Layout layouts&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* symbol arrange function */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;T&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; tile &lt;span style="color:#1f2328"&gt;},&lt;/span&gt; &lt;span style="color:#57606a"&gt;/* first entry is default */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;F&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt; &lt;span style="color:#57606a"&gt;/* no layout function means floating behavior */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;M&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; monocle &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* key definitions */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#define MODKEY Mod4Mask&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#define TAGKEYS(KEY,TAG) \&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; { MODKEY, KEY, view, {.ui = 1 &amp;lt;&amp;lt; TAG} }, \&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 &amp;lt;&amp;lt; TAG} }, \&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; { MODKEY|ShiftMask, KEY, tag, {.ui = 1 &amp;lt;&amp;lt; TAG} }, \&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 &amp;lt;&amp;lt; TAG} },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* helper for spawning shell commands in the pre dwm-5.0 fashion */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#define SHCMD(cmd) { .v = (const char*[]){ &amp;#34;/bin/sh&amp;#34;, &amp;#34;-c&amp;#34;, cmd, NULL } }&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* commands */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; dmenumon&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt; &lt;span style="color:#57606a"&gt;/* component of dmenucmd, manipulated in spawn() */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;dmenucmd&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/usr/bin/rofi&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;-show&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;drun&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;-show-icons&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;-lines&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;9&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;-width&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;100&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;-location&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;7&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;-font&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Sarasa Mono SC 18&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;termcmd&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/usr/bin/alacritty&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;--option&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;font.normal.family=Sarasa Mono SC&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;font.size=13&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;volup&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/usr/bin/amixer&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;set&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Master&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;5%+&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;umute&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;voldown&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/usr/bin/amixer&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;set&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Master&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;5%-&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;umute&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;voltoggle&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/usr/bin/amixer&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;set&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Master&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;toggle&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;brightup&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/usr/bin/xbacklight&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;-inc&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;brightdown&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/usr/bin/xbacklight&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;-dec&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;fullscreenshot&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/usr/bin/scrot&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;selectscreenshot&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/usr/bin/scrot&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;-s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;NULL&lt;/span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; Key keys&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* modifier key function argument */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_d&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; spawn&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; dmenucmd &lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_Return&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; spawn&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; termcmd &lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_b&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; togglebar&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#0550ae"&gt;|&lt;/span&gt;ShiftMask&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_o&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; rotatestack&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;i &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_o&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; focusstack&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;i &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* { MODKEY, XK_i, incnmaster, {.i = +1 } }, */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* { MODKEY, XK_d, incnmaster, {.i = -1 } }, */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_h&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; setmfact&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;f &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;-&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0.05&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_l&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; setmfact&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;f &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;+&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0.05&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_z&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; zoom&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_Tab&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; view&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_q&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; killclient&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_t&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; setlayout&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;layouts&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* { MODKEY, XK_f, setlayout, {.v = &amp;amp;layouts[1]} }, */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_m&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; setlayout&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;layouts&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_space&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; setlayout&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#0550ae"&gt;|&lt;/span&gt;ShiftMask&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_space&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; togglefloating&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_0&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; view&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;ui &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;~&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* { MODKEY|ShiftMask, XK_0, tag, {.ui = ~0 } },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; { MODKEY, XK_comma, focusmon, {.i = -1 } },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; { MODKEY, XK_period, focusmon, {.i = +1 } },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } },&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt; { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;TAGKEYS&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt; XK_1&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;TAGKEYS&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt; XK_2&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;TAGKEYS&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt; XK_3&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;TAGKEYS&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt; XK_4&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;TAGKEYS&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt; XK_5&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;4&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;TAGKEYS&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt; XK_6&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;5&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;TAGKEYS&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt; XK_7&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;6&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;TAGKEYS&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt; XK_8&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;7&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;TAGKEYS&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt; XK_9&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;8&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; MODKEY&lt;span style="color:#0550ae"&gt;|&lt;/span&gt;ShiftMask&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_e&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; quit&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_Print&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; spawn&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; fullscreenshot&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; ShiftMask&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XK_Print&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; spawn&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; selectscreenshot&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XF86XK_AudioRaiseVolume&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; spawn&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; volup &lt;span style="color:#1f2328"&gt;}},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XF86XK_AudioLowerVolume&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; spawn&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; voldown &lt;span style="color:#1f2328"&gt;}},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XF86XK_AudioMute&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; spawn&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; voltoggle &lt;span style="color:#1f2328"&gt;}},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XF86XK_MonBrightnessUp&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; spawn&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; brightup &lt;span style="color:#1f2328"&gt;}},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XF86XK_MonBrightnessDown&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; spawn&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; brightdown &lt;span style="color:#1f2328"&gt;}},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* button definitions */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; Button buttons&lt;span style="color:#1f2328"&gt;[]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;/* click event mask button function argument */&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; ClkLtSymbol&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Button1&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; setlayout&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; ClkLtSymbol&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Button3&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; setlayout&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;layouts&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#0550ae"&gt;2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; ClkWinTitle&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Button2&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; zoom&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; ClkStatusText&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Button2&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; spawn&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{.&lt;/span&gt;v &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; termcmd &lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; ClkClientWin&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Button1&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; movemouse&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; ClkClientWin&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Button2&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; togglefloating&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; ClkClientWin&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Button3&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; resizemouse&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; ClkTagBar&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Button1&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; view&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; ClkTagBar&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Button3&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; toggleview&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; ClkTagBar&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Button1&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; tag&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt; ClkTagBar&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; MODKEY&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; Button3&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; toggletag&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt; &lt;span style="color:#1f2328"&gt;},&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Build and install&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Remove &lt;code class="verbatim"&gt;config.h&lt;/code&gt; if it exists.&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Compile&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; make&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Install&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Clean the temporary object files.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; make clean&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Linux - Fonts</title><link>https://shakaxi.github.io/posts/font/</link><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/font/</guid><description>&lt;p&gt;&#10;On Unix/Linux desktop, there are a rich number of open source projects for font rendering. This post lists some pretty excellent choices. Taking ArchLinux for instance, the installations are presented.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Infinality&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;Append following repositories to &lt;code class="verbatim"&gt;/etc/pacman.conf&lt;/code&gt;.&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;infinality-bundle&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;Server&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt; http://bohoomil.com/repo/&lt;span style="color:#953800"&gt;$arch&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;infinality-bundle-multilib&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;Server&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt; http://bohoomil.com/repo/multilib/&lt;span style="color:#953800"&gt;$arch&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;infinality-bundle-fonts&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;Server&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt; http://bohoomil.com/repo/fonts&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Install infinality fonts&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-4"&gt;&#10;&lt;h4 id="headline-4"&gt;&#10;For x86-64&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-4"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S infinality-bundle ibfonts-meta-extended infinality-bundle-multilib&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-4"&gt;&#10;&lt;h4 id="headline-5"&gt;&#10;For x86-32&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-4"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S infinality-bundle ibfonts-meta-extended&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-2"&gt;&#10;&lt;h2 id="headline-6"&gt;&#10;Adobe&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-2"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S adobe-source-&lt;span style="color:#0550ae"&gt;{&lt;/span&gt;code,sans,serif&lt;span style="color:#0550ae"&gt;}&lt;/span&gt;-pro-fonts&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-2"&gt;&#10;&lt;h2 id="headline-7"&gt;&#10;Fira&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-2"&gt;&#10;&lt;p&gt;Fira font is dedicated for Firefox operation system (OS).&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S ttf-fira-&lt;span style="color:#0550ae"&gt;{&lt;/span&gt;mono,sans&lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Linux - GNU Debugger (GDB)</title><link>https://shakaxi.github.io/posts/gdb/</link><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/gdb/</guid><description>&lt;p&gt;&#10;&lt;em&gt;GDB&lt;/em&gt; is the world famous GNU debugger, which is very powerful. In this article, its elementary usages can be listed as follows.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;b(reak) LINE_IDX&lt;/code&gt;: set breakpoint in line &lt;code class="verbatim"&gt;LINE_IDX&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;b(reak) FUN_NAME&lt;/code&gt;: set breakpoint at the begin of function &lt;code class="verbatim"&gt;FUN_NAME&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;b(reak) ... if ...&lt;/code&gt;: set conditional breakpoint.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;delete breakpoints BP_IDX&lt;/code&gt;: delete breakpoint &lt;code class="verbatim"&gt;BP_IDX&lt;/code&gt; (if &lt;code class="verbatim"&gt;BP_IDX&lt;/code&gt; is omitted, all the breakpoints will be deleted).&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;disable breakpoints BP_IDX&lt;/code&gt;: disable breakpoint &lt;code class="verbatim"&gt;BP_IDX&lt;/code&gt; (if &lt;code class="verbatim"&gt;BP_IDX&lt;/code&gt; is omitted, all the breakpoints will be disabled).&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;enable breakpoints BP_IDX&lt;/code&gt;: enable breakpoint &lt;code class="verbatim"&gt;BP_IDX&lt;/code&gt; (if &lt;code class="verbatim"&gt;BP_IDX&lt;/code&gt; is omitted, all the breakpoints will be enabled).&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;display VAR_NAME&lt;/code&gt;: track varable &lt;code class="verbatim"&gt;VAR_NAME&lt;/code&gt;, every time the program stops, its value will be displayed.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;undisplay VAR_NAME&lt;/code&gt;: cancel tracking of variable &lt;code class="verbatim"&gt;VAR_NAME&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;start&lt;/code&gt;: start to excute the program and stop at the first statement of main.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;r(un)&lt;/code&gt;: excute the program from beginning continuously.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;c(ontinue)&lt;/code&gt;: excute the program from current position contiously.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;s(tep)&lt;/code&gt;: excute the program by one step and enter the function if available.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;n(ext)&lt;/code&gt;: excute the program by one step and don’t enter any function.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;backtrace(or bt)&lt;/code&gt;: view the function call of all the levels and their parameters.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;f(rame) FRM_IDX&lt;/code&gt;: select the stack frame of index &lt;code class="verbatim"&gt;FRM_IDX&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;watch&lt;/code&gt;: set observation point.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;i(nfo) locals&lt;/code&gt;: view the values of local variables in current stack frame.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;i(nfo) b(reakpoints)&lt;/code&gt;: view current breakpoints.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;i(nfo) watchpoints&lt;/code&gt;: view current observation points.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;l(ist)&lt;/code&gt;: list 10 lines of source code, continuing the last.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;l(ist) LINE_IDX&lt;/code&gt;: list the source code around line &lt;code class="verbatim"&gt;LINE_IDX&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;l(ist) FUN_NAME&lt;/code&gt;: list the source code of function &lt;code class="verbatim"&gt;FUN_NAME&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;x&lt;/code&gt;: print part content of register from some position. All the contents are treated as bytes without consideration that which bytes correspond to which variable. For example, &lt;code class="verbatim"&gt;x/7b p&lt;/code&gt; will print the content of size 7 bytes after point variable &lt;code class="verbatim"&gt;p&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;p(rint) expr&lt;/code&gt;: print the value of &lt;code class="verbatim"&gt;expr&lt;/code&gt;. This functionality can be used to change the values of variables or provoke a function.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;finish&lt;/code&gt;: excute the current function until return, and then stop.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Linux - Network File System (NFS)</title><link>https://shakaxi.github.io/posts/nfs/</link><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/nfs/</guid><description>&lt;p&gt;&#10;&lt;em&gt;Network file system (NFS)&lt;/em&gt; is a simple approach for share and exchange files in Unix/Linux. This post summarizes its installation and configuration.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S nfs-utils&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Server&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;Edit &lt;code class="verbatim"&gt;/etc/exports&lt;/code&gt;, e.g.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# /etc/exports - exports(5) - directories exported to NFS clients&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Example for NFSv2 and NFSv3:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# /srv/home hostname1(rw,sync) hostname2(ro,sync)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Example for NFSv4:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# /srv/nfs4&#9; hostname1(rw,sync,fsid=0)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# /srv/nfs4/home hostname1(rw,sync,nohide)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Using Kerberos and integrity checking:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# /srv/nfs4 *(rw,sync,sec=krb5i,fsid=0)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# /srv/nfs4/home *(rw,sync,sec=krb5i,nohide)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Use `exportfs -arv` to reload.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/home 192.168.2.0/24&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;rw,async,subtree_check,no_root_squash&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/opt 192.168.2.0/24&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;ro,async,subtree_check,no_root_squash&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;And then enable and start the service.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl &lt;span style="color:#6639ba"&gt;enable&lt;/span&gt; nfs-server.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl start nfs-server.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Client&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;Add the corresponding entries in &lt;code class="verbatim"&gt;/etc/fstab&lt;/code&gt;, e.g.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;server:/opt /opt nfs4 ro,_netdev,soft,async &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;server:/home /home nfs4 rw,_netdev,soft,async &lt;span style="color:#0550ae"&gt;0&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Linux - Network time protocol (NTP)</title><link>https://shakaxi.github.io/posts/ntp/</link><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/ntp/</guid><description>&lt;p&gt;&#10;&lt;em&gt;Network time protocol (NTP)&lt;/em&gt; is a very convenient service which can provide network time synchronized automatically and periodically. This post briefly describes the installation and configuration of NTP on Linux OS.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Without loss of generality, we take Arch Linux for instance here.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S ntp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Prepend following line(s) to &lt;code class="verbatim"&gt;/etc/ntp.conf&lt;/code&gt;.&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;As server&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;server 127.127.1.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fudge 127.127.1.1 stratum &lt;span style="color:#0550ae"&gt;12&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;As client&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;server IP_ADDRESS&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Start and enable the service&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl &lt;span style="color:#6639ba"&gt;enable&lt;/span&gt; ntpd.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl start ntpd.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Linux - Zathura</title><link>https://shakaxi.github.io/posts/zathura/</link><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/zathura/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;em&gt;Zathura&lt;/em&gt; is a light PDF viewer, with Vi/Vim-like keybindings. It always reloads and refreshes documents automatically. In this sense, it is naturally capable of providing real time preview of a PDF file, e.g., produced by LaTeX. Additionally, it has the option of enabling inverse search based on &lt;em&gt;synctex&lt;/em&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S zathura zathura-pdf-mupdf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Keybindings&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;General&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Keybinding&lt;/th&gt;&#10;&lt;th&gt;Functionality&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;h/j/k/l&lt;/td&gt;&#10;&lt;td&gt;Scroll left/down/up/right.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;J/K&lt;/td&gt;&#10;&lt;td&gt;Go to the next/previous page.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;gg&lt;/td&gt;&#10;&lt;td&gt;Go to the first page.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;G&lt;/td&gt;&#10;&lt;td&gt;Go to the last page.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;nG&lt;/td&gt;&#10;&lt;td&gt;Go to the nth page.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;?//&lt;/td&gt;&#10;&lt;td&gt;Search backward/forward for the text.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;n/N&lt;/td&gt;&#10;&lt;td&gt;Search backward/forward for the next result.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;o/O&lt;/td&gt;&#10;&lt;td&gt;Open a document.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;R&lt;/td&gt;&#10;&lt;td&gt;Reload document.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Tab&lt;/td&gt;&#10;&lt;td&gt;Show index and switch to &lt;em&gt;index mode&lt;/em&gt;.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;a&lt;/td&gt;&#10;&lt;td&gt;Fit page.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;s&lt;/td&gt;&#10;&lt;td&gt;Fit width.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;r&lt;/td&gt;&#10;&lt;td&gt;Rotate by 90 degrees.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;d&lt;/td&gt;&#10;&lt;td&gt;Toggle dual-page view.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;f&lt;/td&gt;&#10;&lt;td&gt;Follow links.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;q&lt;/td&gt;&#10;&lt;td&gt;Quit&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Ctrl-r&lt;/td&gt;&#10;&lt;td&gt;Invert color.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;F5&lt;/td&gt;&#10;&lt;td&gt;Toggle to &lt;em&gt;presentation mode&lt;/em&gt;.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;F11&lt;/td&gt;&#10;&lt;td&gt;Toggle to &lt;em&gt;fullscreen mode&lt;/em&gt;.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;Ctrl-n&lt;/td&gt;&#10;&lt;td&gt;Toggle status bar.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;+/-/=&lt;/td&gt;&#10;&lt;td&gt;Zoom in/out/to the origin size.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;mX&lt;/td&gt;&#10;&lt;td&gt;Set a quickmark to X, a letter or a number.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&amp;#39;X&lt;/td&gt;&#10;&lt;td&gt;Goto quickmark saved at X.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Index mode&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Keybinding&lt;/th&gt;&#10;&lt;th&gt;Functionality&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;j/k&lt;/td&gt;&#10;&lt;td&gt;Move to lower/upper entry.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;h/l&lt;/td&gt;&#10;&lt;td&gt;Collapse/expand entry.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;H/L&lt;/td&gt;&#10;&lt;td&gt;Collapse/expand all entries.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;space/return&lt;/td&gt;&#10;&lt;td&gt;Select and open entry.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Linux - Zsh</title><link>https://shakaxi.github.io/posts/zsh/</link><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/zsh/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;As is well-known, &lt;em&gt;shell&lt;/em&gt; is an interface provided by the Unix/Linux operation systems (OS) to subscribers whereby a user can interact with the kernel of the OS efficiently and conveniently.&lt;/p&gt;&#10;&lt;p&gt;&#10;In fact, there are already a variety of shells, e.g., bash, csh, tcsh, zsh, etc. This post just presented a brief introduction to &lt;em&gt;zsh&lt;/em&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;Zsh is indeed a powerful shell. Perhaps this is just the reason why it is termed &amp;#34;shell terminator&amp;#34;, as letter &amp;#39;Z&amp;#39; is the letter terminator, the last one in the alphabeta.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>NR - Uplink Control Information (UCI)</title><link>https://shakaxi.github.io/posts/nr_uci/</link><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/nr_uci/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Targetting for HARQ acknowledgement and scheduling request, similar to LTE, &lt;em&gt;uplink control information (UCI)&lt;/em&gt; is transmitted on &lt;em&gt;physical uplink control channel (PUCCH)&lt;/em&gt; or &lt;em&gt;physical uplink shared channel (PUSCH)&lt;/em&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;Simultaneous transmission of PUCCH and PUSCH is not supported in release 15, but UCI can be pigged-back on PUSCH, i.e., UCI is multiplexed with data and transmitted on PUSCH.&lt;/p&gt;&#10;&lt;p&gt;&#10;In &lt;em&gt;carrier aggregation (CA)&lt;/em&gt; case, UCI is only transmitted on the primary cell (PCell), to support asymmetric CA, i.e., different number of carriers in the downlink and uplink. To avoid overloading, PUCCH&amp;#39;s can be divided into 2 groups. The feedback relating to the 1st group is transmitted in the uplink of the PCell, while the feedback corresponding to the 2nd group is delivered in the uplink of the primary second cell (PSCell).&lt;/p&gt;&#10;&lt;p&gt;&#10;For PUCCH, only a single antenna port is specified. Given a UE equipped with multiple antennas, how to make use of the antenna array is a UE implementation related issue.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Python - Tensorflow</title><link>https://shakaxi.github.io/posts/python_tensorflow/</link><pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_tensorflow/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introducation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Tensorflow is a deep learning library, which provides two programming interfaces, C++ and Python. Moreover, The Python API integrates very well with &lt;a href="http://www.numpy.org"&gt;numpy&lt;/a&gt;. In many places, Tensorflow tensors can be interchanged with numpy &lt;code class="verbatim"&gt;ndarrays&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Representation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;In tensorflow, machine learning algorithms are represented as &lt;em&gt;computational graphs&lt;/em&gt;, i.e. &lt;a href="*Graph"&gt;&lt;code class="verbatim"&gt;graph&lt;/code&gt;&lt;/a&gt;, in which a vertex/node and an edge represent an operation (&lt;code class="verbatim"&gt;op&lt;/code&gt;) and a data flowing, respectively.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Operation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;An operation can have zero or more inputs and produce zero or more outputs.&lt;/li&gt;&#10;&lt;li&gt;An operation may stand for a mathematical equation, a variable, a constant, a control flow directive, a file I/O operation, or even a network communication port.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-2"&gt;&#10;&lt;h2 id="headline-4"&gt;&#10;Tensor&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;A tensor is a multidimentional array or list, the generalization of scalars, 1-D vector, and 2-D matrices.&lt;/li&gt;&#10;&lt;li&gt;Tensors are the connecting edges, passed between nodes/ops in the flow diagram.&lt;/li&gt;&#10;&lt;li&gt;A tensor is a symbolic handle, which does not hold or store values in memory, but provides only an interface for retrieving the value referenced by the tensor.&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Parameters&lt;/p&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&#10;Rank&#10;&lt;/dt&gt;&#10;&lt;dd&gt;The number of dimensions, i.e., the depth of brackets.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Shape&#10;&lt;/dt&gt;&#10;&lt;dd&gt;The number of components in each dimension, e.g., the number of rows and columns. Tensorflow defines following shape-related functions, &lt;code class="verbatim"&gt;tensorflow.shape&lt;/code&gt;, &lt;code class="verbatim"&gt;tensorflow.size&lt;/code&gt;, &lt;code class="verbatim"&gt;tensorflow.rank&lt;/code&gt;, &lt;code class="verbatim"&gt;tensorflow.reshape&lt;/code&gt;, &lt;code class="verbatim"&gt;tensorflow.expand_dims&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;Type&#10;&lt;/dt&gt;&#10;&lt;dd&gt;Data type assigned to the elements of the tensor, e.g., &lt;code class="verbatim"&gt;DT_FLOAT&lt;/code&gt;, &lt;code class="verbatim"&gt;DT_DOUBLE&lt;/code&gt;, &lt;code class="verbatim"&gt;DT_INT8&lt;/code&gt;, &lt;code class="verbatim"&gt;DT_UINT8&lt;/code&gt;, &lt;code class="verbatim"&gt;DT_INT16&lt;/code&gt;, &lt;code class="verbatim"&gt;DT_INT32&lt;/code&gt;, &lt;code class="verbatim"&gt;DT_INT64&lt;/code&gt;, &lt;code class="verbatim"&gt;DT_STRING&lt;/code&gt;, &lt;code class="verbatim"&gt;DT_BOOL&lt;/code&gt;, &lt;code class="verbatim"&gt;DT_COMPLEX64&lt;/code&gt;. Additionally, tensorflow provides following type transformation functions, e.g., &lt;code class="verbatim"&gt;tensorflow.string_to_number&lt;/code&gt;, &lt;code class="verbatim"&gt;tensorflow.to_double&lt;/code&gt;, &lt;code class="verbatim"&gt;tensorflow.to_float&lt;/code&gt;, &lt;code class="verbatim"&gt;tensorflow.to_int32&lt;/code&gt;, &lt;code class="verbatim"&gt;tensorflow.to_int64&lt;/code&gt;, &lt;code class="verbatim"&gt;tensorflow.cast&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - Ebib</title><link>https://shakaxi.github.io/posts/emacs_ebib/</link><pubDate>Sat, 25 Dec 2021 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_ebib/</guid><description>&lt;p&gt;&#10;&lt;a href="https://github.com/joostkremers/ebib"&gt;Ebib&lt;/a&gt; is a tool inside Emacs for bibliography management, supporting &lt;em&gt;BibTeX&lt;/em&gt; and &lt;em&gt;biblatex&lt;/em&gt; files. This post is just a brief summary of the online &lt;a href="https://joostkremers.github.io/ebib/ebib-manual.html"&gt;manual&lt;/a&gt;.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Ebib can be easily installed via &lt;a href="http://melpa.org"&gt;Melpa&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;View&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;When ebib is started, the Emacs frame is divided into 2 windows, &lt;em&gt;index buffer&lt;/em&gt; at the top and &lt;em&gt;entry buffer&lt;/em&gt; at the bottom.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Index buffer&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;All the entries are listed in this buffer.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The fields or columns displayed in the buffer can be &lt;a href="*Columns in index buffer"&gt;customized&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;The entries are by default sorted in ascending order on the first column defined in &lt;code class="verbatim"&gt;ebib-index-columns&lt;/code&gt;, but the sorting rule can be specified by option &lt;a href="*Sort columns displayed in index buffer"&gt;ebib-index-default-sort&lt;/a&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Entry buffer&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;All the fields of the selected entry are shown in this buffer. The first field is &lt;code class="verbatim"&gt;type&lt;/code&gt; field, as the name indicates, it indicates the type of the entry, e.g., &lt;code class="verbatim"&gt;article&lt;/code&gt;, &lt;code class="verbatim"&gt;book&lt;/code&gt;. Besides, the remaining fields can be classified into 4 groups below. &lt;code class="verbatim"&gt;Required fields&lt;/code&gt; and &lt;code class="verbatim"&gt;optional fields&lt;/code&gt; are &lt;code class="verbatim"&gt;type&lt;/code&gt;-specific; while &lt;code class="verbatim"&gt;extra fields&lt;/code&gt; and &lt;code class="verbatim"&gt;undefined fields&lt;/code&gt; are not, but defined globally.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Required fields&lt;/code&gt;: Required by BibTeX/biblatex.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Optional fields&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Extra fields&lt;/code&gt;: Usually ignored by BibTeX/biblatex.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Undefined fields&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - Gnus</title><link>https://shakaxi.github.io/posts/emacs_gnus/</link><pubDate>Sat, 25 Dec 2021 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_gnus/</guid><description>&lt;p&gt;&#10;&lt;a href="https://www.gnu.org/software/emacs/manual/html_node/gnus"&gt;Gnus&lt;/a&gt; is the builtin mail client inside Emacs. As long as Emacs is installed, gnus is available.&lt;/p&gt;&#10;&lt;p&gt;&#10;The bahavior of gnus can be customized in following two files.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;~/.gnus&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#6639ba"&gt;user-full-name&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;NAME&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;user-mail-address&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;USERNAME&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;gnus-select-method&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;nnimap&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;ACCOUNT_NAME&amp;#34;&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;nnimap-address&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;IMAP.SERVER.COM&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;gnus-use-full-window&lt;/span&gt; &lt;span style="color:#0550ae"&gt;nil&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;gnus-message-archive-group&lt;/span&gt; &lt;span style="color:#0550ae"&gt;nil&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;gnus-fetch-old-headers&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;nnmail-expiry-wait&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;never&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;send-mail-function&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;smtpmail-send-it&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;smtpmail-smtp-server&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;SMTP.SERVER.COM&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;~/.authinfo&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;machine&lt;/span&gt; &lt;span style="color:#953800"&gt;IMAP.SERVER.COM&lt;/span&gt; &lt;span style="color:#953800"&gt;login&lt;/span&gt; &lt;span style="color:#953800"&gt;USERNAME&lt;/span&gt; &lt;span style="color:#953800"&gt;password&lt;/span&gt; &lt;span style="color:#953800"&gt;PASSWORD&lt;/span&gt; &lt;span style="color:#953800"&gt;port&lt;/span&gt; &lt;span style="color:#953800"&gt;imap&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;machine&lt;/span&gt; &lt;span style="color:#953800"&gt;SMTP.SERVER.COM&lt;/span&gt; &lt;span style="color:#953800"&gt;login&lt;/span&gt; &lt;span style="color:#953800"&gt;USERNAME&lt;/span&gt; &lt;span style="color:#953800"&gt;password&lt;/span&gt; &lt;span style="color:#953800"&gt;PASSWORD&lt;/span&gt; &lt;span style="color:#953800"&gt;port&lt;/span&gt; &lt;span style="color:#953800"&gt;smtp&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;After the configuration above, gnus can be launched via &lt;code class="verbatim"&gt;M-x gnus&lt;/code&gt; inside Emacs.&lt;/p&gt;</description></item><item><title>Linux - Command Line Tools</title><link>https://shakaxi.github.io/posts/tool/</link><pubDate>Sat, 25 Dec 2021 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/tool/</guid><description>&lt;p&gt;&#10;Targetting for more features and conveniences, some extremely excellent command line tools are listed in this document, which is encouraged to use.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Starship&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;a href="https://starship.rs"&gt;Starship&lt;/a&gt; can provide an exciting prompt to a variety of shells, e.g., bash, csh/tcsh, zsh, etc.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Installation (e.g., for Arch Linux)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S starship&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Configuration in &lt;code class="verbatim"&gt;~/.bashrc&lt;/code&gt; (e.g., for bash)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;eval&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#cf222e"&gt;$(&lt;/span&gt;starship init bash&lt;span style="color:#cf222e"&gt;)&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;File finder&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;fd&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/sharkdp/fd"&gt;Fd&lt;/a&gt; is a replacement for classic &lt;code class="verbatim"&gt;find&lt;/code&gt;, which can be easily installed by&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S fd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;fzf&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;&lt;a href="https://github.com/jethrokuan/fzf"&gt;Fzf&lt;/a&gt; stands for &lt;em&gt;fuzzy finder&lt;/em&gt;, which can be easily installed by&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S fzf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Linux - Sed</title><link>https://shakaxi.github.io/posts/sed/</link><pubDate>Sat, 25 Dec 2021 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/sed/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;简介&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;Sed&lt;/code&gt; 是著名的流编辑器，它能够对文本进行逐行处理，通常需要配合正则表达式使用。具体地， &lt;code class="verbatim"&gt;Sed&lt;/code&gt; 先把当前行的文本导入 &lt;code class="verbatim"&gt;模式空间(pattern space)&lt;/code&gt; 对其处理，然后输出处理后的文本。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;命令格式&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sed &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;OPTIONS&lt;span style="color:#0550ae"&gt;]&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;COMMAND&amp;#39;&lt;/span&gt; FILE&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;S&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sed &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;OPTIONS&lt;span style="color:#0550ae"&gt;]&lt;/span&gt; -f &lt;span style="color:#0a3069"&gt;&amp;#39;SCRIPT&amp;#39;&lt;/span&gt; FILE&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;S&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;选项&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;figure&gt;&#10;&lt;table align="center" border="3"&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;选项&lt;/th&gt;&#10;&lt;th&gt;含义&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;-h/--help&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;显示帮助信息。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;-V/--version&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;显示版本信息。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;-n/--quiet/--silent&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;仅显示经过处理的结果。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;-i&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;原地(inplace)替换&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;figcaption&gt;&#10;选项&#10;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;命令&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;figure&gt;&#10;&lt;table align="center" border="3"&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;命令&lt;/th&gt;&#10;&lt;th&gt;含义&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;s&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;替换&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;p&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;打印&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;figcaption&gt;&#10;命令&#10;&lt;/figcaption&gt;&#10;&lt;/figure&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-2"&gt;&#10;&lt;h2 id="headline-5"&gt;&#10;示例&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;替换命令 &lt;code class="verbatim"&gt;s&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# 替换每行的第一个匹配。&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sed &lt;span style="color:#0a3069"&gt;&amp;#39;s/FROM/TO/&amp;#39;&lt;/span&gt; FILE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# 通过后缀 =g= 替换每行的所有匹配。&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sed &lt;span style="color:#0a3069"&gt;&amp;#39;s/FROM/TO/g&amp;#39;&lt;/span&gt; FILE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# 通过后缀 =Ng= 对每行的第N处匹配开始替换。&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sed &lt;span style="color:#0a3069"&gt;&amp;#39;s/FROM/TO/g&amp;#39;&lt;/span&gt; FILE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;# 通过选项 =-i= 对文件直接原地替换。&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; sed -i &lt;span style="color:#0a3069"&gt;&amp;#39;s/FROM/TO/[g]&amp;#39;&lt;/span&gt; FILE&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Neural Network</title><link>https://shakaxi.github.io/posts/nn/</link><pubDate>Sat, 25 Dec 2021 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/nn/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introducation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The network is composed of an input layer, an output layer, and optionally a series of hidden layers.&lt;/li&gt;&#10;&lt;li&gt;Input layer does not carry out any operation/function, but the hidden and output layers consist of functional neurons, i.e., have activation functions.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;McCulloch and Pitts (M-P) model for neurons&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;\begin{align*}&#10; y = f(\mathbf{W} \mathbf{x} - \theta)&#10;\end{align*}&#10;&lt;p&gt;where \(f\) is termed &lt;em&gt;activation function&lt;/em&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Activation function&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;p&gt;Activation function aims to introduce the non-linear capability, compensate the shortage of linear models.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Sign&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;\begin{align*}&#10; \text{sign}(x) = \begin{cases}&#10; 1, &amp;amp; x \ge 0; \\&#10; 0, &amp;amp; x &amp;lt; 0.&#10; \end{cases}&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Sigmoid&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;\begin{align*}&#10; \text{sigmoid}(x) = \frac{1}{1 + e^{-x}}.&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;Tanh&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;\begin{align*}&#10; \text{tanh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}.&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-3"&gt;&#10;&lt;h3 id="headline-7"&gt;&#10;ReLU&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-3"&gt;&#10;\begin{align*}&#10; \text{ReLU}(x) = \max(x, 0)&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-3"&gt;&#10;&lt;h3 id="headline-8"&gt;&#10;Softmax&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-3"&gt;&#10;&lt;p&gt;Softmax function can transform scores/logits into a valid probability distribution.&lt;/p&gt;&#10;\begin{align*}&#10; \text{softmax}(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Python - Pandas</title><link>https://shakaxi.github.io/posts/python_pandas/</link><pubDate>Sat, 25 Dec 2021 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_pandas/</guid><description>&lt;p&gt;&#10;&lt;code class="verbatim"&gt;Pandas&lt;/code&gt; 支持大部分 &lt;code class="verbatim"&gt;numpy&lt;/code&gt; 语言风格的数组计算。尽管代码风格相似，但最大的不同在于前者是用来处理表格或不同类型数据的，而后者更适合处理相同类型数据的。&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;数据结构&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;Series&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Series&lt;/code&gt; 是一维数组的对象，包含 &lt;code class="verbatim"&gt;index&lt;/code&gt; 序列和 &lt;code class="verbatim"&gt;values&lt;/code&gt; 序列，分别可以通过对象的 &lt;code class="verbatim"&gt;index&lt;/code&gt; 和 &lt;code class="verbatim"&gt;values&lt;/code&gt; 属性获得。&lt;/li&gt;&#10;&lt;li&gt;通常需要创建一个index序列来标识每个数据点。如果不显式指定，那么默认 &lt;code class="verbatim"&gt;index&lt;/code&gt; 为从0到N-1，其中N为Series对象的长度。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;index&lt;/code&gt; 可以用来索引数据，在这种意义上， &lt;code class="verbatim"&gt;Series&lt;/code&gt; 就像一个有序的字典。 另外，可以通过字典直接生成 &lt;code class="verbatim"&gt;Series&lt;/code&gt; 对象。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;pandas&lt;/code&gt; 用 &lt;code class="verbatim"&gt;NaN (not a number)&lt;/code&gt; 来标记缺失或NA值，用 &lt;code class="verbatim"&gt;isnull&lt;/code&gt; 和 &lt;code class="verbatim"&gt;notnull&lt;/code&gt; 函数来检查 &lt;code class="verbatim"&gt;Series&lt;/code&gt; 对象。同时， &lt;code class="verbatim"&gt;isnull&lt;/code&gt; 和 &lt;code class="verbatim"&gt;notnull&lt;/code&gt; 也是 &lt;code class="verbatim"&gt;Series&lt;/code&gt; 类的成员函数。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;DataFrame&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 是二维数据表，既有行索引，又有列索引。可以通过属性 &lt;code class="verbatim"&gt;T&lt;/code&gt; 进行转置。每一列可以是不同的类型（数值、字符串、布尔值等）。&lt;/li&gt;&#10;&lt;li&gt;和 &lt;code class="verbatim"&gt;Series&lt;/code&gt; 类似， &lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 的 &lt;code class="verbatim"&gt;values&lt;/code&gt; 属性会将数据以二维ndarray形式返回。&lt;/li&gt;&#10;&lt;li&gt;虽然 &lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 是二维的，但是可以通过分层索引扩展到更高维度的数据。&lt;/li&gt;&#10;&lt;li&gt;在将列表或数组赋值给某一列时，列表或数组的长度必须和 &lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 对象的长度相等。将 &lt;code class="verbatim"&gt;Series&lt;/code&gt; 对象赋值给某一列时， 其索引会按照 &lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 对象的索引重新排序，并用缺失值填充空缺位置。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;索引对象&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;Pandas&lt;/code&gt; 中的索引对象是用于存储轴标签和其他元数据的。构建 &lt;code class="verbatim"&gt;Series&lt;/code&gt; 或 &lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 对象时所使用的数组或标签序列都可以在内部转换为索引对象。&lt;/li&gt;&#10;&lt;li&gt;索引对象是不可变的，不能修改。&lt;/li&gt;&#10;&lt;li&gt;索引对象的 &lt;code class="verbatim"&gt;is_unique&lt;/code&gt; 属性可以返回其标签是否唯一。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-2"&gt;&#10;&lt;h2 id="headline-5"&gt;&#10;基本功能&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;成员函数 &lt;code class="verbatim"&gt;reindex&lt;/code&gt; : 重建索引。支持如下参数：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;index&lt;/code&gt; : 作为新索引的序列。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;level&lt;/code&gt; : 匹配 &lt;code class="verbatim"&gt;MultiIndex&lt;/code&gt; 级别的简单索引。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;成员函数 &lt;code class="verbatim"&gt;drop&lt;/code&gt; : 删除行或列，参数为行或列索引列表。在删除列时，需要增加参数axis=1或axis=&amp;#39;columns&amp;#39;。&lt;/li&gt;&#10;&lt;li&gt;成员函数 &lt;code class="verbatim"&gt;head()&lt;/code&gt; 返回前五行。&lt;/li&gt;&#10;&lt;li&gt;成员函数 &lt;code class="verbatim"&gt;set_index&lt;/code&gt; (参数可以为单个列名或多个列名的列表) 将选中的列转换为索引。&lt;/li&gt;&#10;&lt;li&gt;成员函数 &lt;code class="verbatim"&gt;filter(regex=KEYWORD)&lt;/code&gt; 可以通过正则表达式对列名进行过滤筛选，返回一个符合筛选条件的新 &lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;li&gt;成员函数 &lt;code class="verbatim"&gt;apply&lt;/code&gt; 可以将函数应用到一列或一行的一维数组上。特别地，如果应用到行，除了函数作为参数外，还需要增加参数axis=&amp;#39;columns&amp;#39;。另外，传递给apply的函数并不一定要返回一个标量值，也可以返回带有多个值的Series。&lt;/li&gt;&#10;&lt;li&gt;成员函数 &lt;code class="verbatim"&gt;applymap&lt;/code&gt; 可以将函数应用到每一个元素上。&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;成员函数 &lt;code class="verbatim"&gt;plot&lt;/code&gt; 可以直接调用 &lt;code class="verbatim"&gt;matplotlib&lt;/code&gt; 绘图。默认地，以索引作为x轴，各个数据列为y轴，列名作为图例名称。但是其行为可以定制。例如，&lt;/p&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; df&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;plot&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;ax&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;AX&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; x&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;COL1_NAME&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; y&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;COL2_NAME&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; title&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;TITLE&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; xlabel&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;XLABEL&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; ylabel&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;YLABEL&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; grid&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;True&lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#cf222e"&gt;False&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; legend&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#cf222e"&gt;True&lt;/span&gt;&lt;span style="color:#0550ae"&gt;/&lt;/span&gt;&lt;span style="color:#cf222e"&gt;False&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; linestyle&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;LINESTYLE&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; xlim&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;XMIN&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; XMAX&lt;span style="color:#1f2328"&gt;],&lt;/span&gt; ylim&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#1f2328"&gt;[&lt;/span&gt;YMIN&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; YMAX&lt;span style="color:#1f2328"&gt;])&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;成员函数 &lt;code class="verbatim"&gt;sort_index&lt;/code&gt; 可以按照行索引或列索引进行字典型排序，该方法返回一个新的排序好的 &lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 对象。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;默认为按行排序。可以通过参数 &lt;code class="verbatim"&gt;axis=1&lt;/code&gt; 来按列排序。&lt;/li&gt;&#10;&lt;li&gt;默认为升序排序，可以通过参数 &lt;code class="verbatim"&gt;ascending=False&lt;/code&gt; 来降序排列。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;成员函数 &lt;code class="verbatim"&gt;sort_values&lt;/code&gt; 可以根据值来对 &lt;code class="verbatim"&gt;Series&lt;/code&gt; 对象或者 &lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 对象排序。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;对于 &lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 对象，可以通过将列名或列名列表作为参数传给可选参数 &lt;code class="verbatim"&gt;by&lt;/code&gt; 来根据一列或者多列的值排序。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 对象可以通过行索引返回 &lt;code class="verbatim"&gt;Series&lt;/code&gt; 对象，如 &lt;code class="verbatim"&gt;DataFrame.loc[&amp;#39;index_name&amp;#39;]&lt;/code&gt; 或 &lt;code class="verbatim"&gt;DataFrame.iloc[&amp;#39;index&amp;#39;]&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 对象可以通过列索引返回 &lt;code class="verbatim"&gt;Series&lt;/code&gt; 对象，如 &lt;code class="verbatim"&gt;DataFrame.loc[:, &amp;#39;index_name&amp;#39;]&lt;/code&gt; 或 &lt;code class="verbatim"&gt;DataFrame.iloc[:, &amp;#39;index&amp;#39;]&lt;/code&gt; 或 &lt;code class="verbatim"&gt;DataFrame[&amp;#39;column_name&amp;#39;]&lt;/code&gt; ，如果列名无效，那么会新建列。此外， &lt;code class="verbatim"&gt;DataFrame.column_name&lt;/code&gt; 也能达到相同目的，但仅当列名存在时才有效时。值得注意的是，索引的列是数据的视图，而不是拷贝。因此，对返回 &lt;code class="verbatim"&gt;Series&lt;/code&gt; 对象的修改会映射到 &lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 对象。如果需要复制，需要调用 &lt;code class="verbatim"&gt;Series&lt;/code&gt; 类的 &lt;code class="verbatim"&gt;copy&lt;/code&gt; 成员函数。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;DataFrame&lt;/code&gt; 对象可以通过行列索引来返回单个标量值，如 &lt;code class="verbatim"&gt;DataFrame.at[&amp;#39;row_index_name&amp;#39;, &amp;#39;column_index_name&amp;#39;]&lt;/code&gt; 或 &lt;code class="verbatim"&gt;DataFrame.iat[&amp;#39;row_index, &amp;#39;column_index&amp;#39;]&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;concat&lt;/code&gt; : 合并多个Series或DataFrame。例如，&lt;/p&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;import&lt;/span&gt; &lt;span style="color:#24292e"&gt;pandas&lt;/span&gt; &lt;span style="color:#cf222e"&gt;as&lt;/span&gt; &lt;span style="color:#24292e"&gt;pd&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; df &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; pd&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;concat&lt;span style="color:#1f2328"&gt;([&lt;/span&gt;df1&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; df2&lt;span style="color:#1f2328"&gt;],&lt;/span&gt; axis&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;计算统计&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-4"&gt;&#10;&lt;h4 id="headline-7"&gt;&#10;可选参数&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-4"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;参数&lt;/th&gt;&#10;&lt;th&gt;描述&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;axis&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;归约轴，0为行，1为列。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;skipna&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;是否跳过NaN ，默认值为 &lt;code class="verbatim"&gt;True&lt;/code&gt; 。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;level&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;如果是多层索引（MultiIndex），该参数可以降低索引层数。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-4"&gt;&#10;&lt;h4 id="headline-8"&gt;&#10;汇总&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-4"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;方法&lt;/th&gt;&#10;&lt;th&gt;描述&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;count&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;非NaN值的个数&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;describe&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Series对象或DataFrame对象各列的统计汇总。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;min/max&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;最小/大值&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;argmin/argmax&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;最小/大值的索引&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;idxmin/idxmax&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;quantile&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;计算0到1之间的分位数。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;sum&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;和&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;mean&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;均值&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;prod&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;积&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;median&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;中位数（0.5分位数）&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;mad&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;var&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;方差&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;std&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;标准差&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;skew&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;kurt&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;cumsum&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;累加值&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;cummin/cummax&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;cumprod&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;累积值&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;diff&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;pct_change&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;百分比&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Python - Pytorch</title><link>https://shakaxi.github.io/posts/python_pytorch/</link><pubDate>Sat, 25 Dec 2021 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_pytorch/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;张量&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;在pytorch中，神经网络的输入、输出、以及网络的参数等都采用了“张量”的数据结构。张量与numpy中的多维数组(&lt;code class="verbatim"&gt;numpy.ndarray&lt;/code&gt;)非常类似，区别在于张量可以在GPU或其他硬件上运行。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;成员函数名称末尾加上 &lt;code class="verbatim"&gt;_&lt;/code&gt; ，会采用替换模式，也即该成员函数直接修改张量对象本身。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;.item()&lt;/code&gt; 返回其具体数值，该方法仅适用于大小为1（也即只含有一个元素）的张量。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;.view()&lt;/code&gt; 功能为reshape该张量（保持元素个数不变），其参数为新的shape。特别地，值为-1的维度可以通过元素总数不变推导得出。&lt;/li&gt;&#10;&lt;li&gt;定义一个张量时，可以通过参数 &lt;code class="verbatim"&gt;device&lt;/code&gt; 参数指定该张量存储于CPU还是GPU。也可以通过其成员函数 &lt;code class="verbatim"&gt;.to()&lt;/code&gt; 来转换。&lt;/li&gt;&#10;&lt;li&gt;定义一个张量时，参数 &lt;code class="verbatim"&gt;requires_grad=True&lt;/code&gt; 表示需要计算并存储对于该张量的梯度。该张量的函数均带有 &lt;code class="verbatim"&gt;grad_fn&lt;/code&gt; 属性。对于其任一函数，当调用其成员函数 &lt;code class="verbatim"&gt;.backward()&lt;/code&gt; 时，该函数对于该张量自变量的梯度将会被计算并保存在该张量的 &lt;code class="verbatim"&gt;.grad&lt;/code&gt; 属性中。&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;有时候需要停止跟踪记录某个张量（记为 &lt;code class="verbatim"&gt;x&lt;/code&gt; ）的梯度（比如在更新网络参数的权重系数时），可以采用以下任一方式：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;调用该张量的成员函数 &lt;code class="verbatim"&gt;x.requires_grad_(False)&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;li&gt;调用该张量的成员函数 &lt;code class="verbatim"&gt;x.detach()&lt;/code&gt; 会产生一个新的张量，其属性 &lt;code class="verbatim"&gt;requires_grad=False&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;li&gt;采用with语句，也即 &lt;code class="verbatim"&gt;with torch.no_grad():&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;与 numpy.ndarray 相互转换&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;张量的成员函数 &lt;code class="verbatim"&gt;.numpy()&lt;/code&gt; 返回对应的 &lt;code class="verbatim"&gt;numpy.ndarray&lt;/code&gt; 。但是，该方法仅适用于存储在CPU的张量。&lt;/li&gt;&#10;&lt;li&gt;函数 &lt;code class="verbatim"&gt;torch.from_numpy()&lt;/code&gt; 可以将一个 &lt;code class="verbatim"&gt;numpy.ndarray&lt;/code&gt; 转换为张量。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;值得注意的是，当一个张量存储在CPU上时，该张量与其对应的 &lt;code class="verbatim"&gt;numpy.ndarray&lt;/code&gt; 是连接着的，也即对其中一个的修改会导致另一个也会被修改。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;神经网络&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;典型训练过程&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;构建含有一些可学习参数(或权重)的神经网络。&lt;/li&gt;&#10;&lt;li&gt;遍历训练数据集。&lt;/li&gt;&#10;&lt;li&gt;让输入通过网络得到输出。&lt;/li&gt;&#10;&lt;li&gt;计算预测误差(或损失函数)。&lt;/li&gt;&#10;&lt;li&gt;通过反向传播，计算并存储网络各个参数的梯度。&lt;/li&gt;&#10;&lt;li&gt;根据各个参数的梯度对其进行调整，如 &lt;code class="verbatim"&gt;weight = weight - learning_rate x gradient&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;正向传播与反向传播&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;p&gt;神经网络的训练包括两个步骤&lt;/p&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&#10;正向传播&#10;&lt;/dt&gt;&#10;&lt;dd&gt;神经网络根据输入对输出进行最佳预测。&lt;/dd&gt;&#10;&lt;dt&gt;&#10;反向传播&#10;&lt;/dt&gt;&#10;&lt;dd&gt;神经网络根据预测误差调整其参数。&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;p&gt;当调用误差张量的成员函数 &lt;code class="verbatim"&gt;.backward()&lt;/code&gt; 时，开始反向传播，整个网络将被微分。Pytorch的自动差分引擎 &lt;code class="verbatim"&gt;torch.autograd&lt;/code&gt; 会对计算每个属性 &lt;code class="verbatim"&gt;requires_grad=True&lt;/code&gt; 的网络参数的梯度并将其累积在该网络参数的 &lt;code class="verbatim"&gt;.grad&lt;/code&gt; 属性中。所以，在反向传播开始之前，需要清空神经网络各个参数和反向传播的梯度缓冲区。&lt;/p&gt;&#10;&lt;p&gt;&#10;然后，需要从 &lt;code class="verbatim"&gt;torch.optim&lt;/code&gt; 中加载一个优化器(如随机梯度下降，SGD)。通过调用该优化器的 &lt;code class="verbatim"&gt;.step()&lt;/code&gt; 方法启动梯度下降，优化器会根据每个网络参数的梯度(存储于其 &lt;code class="verbatim"&gt;.grad&lt;/code&gt; 属性中)来对其进行调整。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;定义网络&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;p&gt;可以使用 &lt;code class="verbatim"&gt;torch.nn&lt;/code&gt; 包来构建神经网络。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;基类 &lt;code class="verbatim"&gt;torch.nn.Module&lt;/code&gt; 包含&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;网络的各个层(作为类属性)，如输入层、输出层、隐藏层等。&lt;/li&gt;&#10;&lt;li&gt;成员函数 &lt;code class="verbatim"&gt;.forward&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;li&gt;成员函数 &lt;code class="verbatim"&gt;.zero_grad&lt;/code&gt; ，用于清空神经网络中所有参数的梯度缓冲区。相当于整个网络中属性 &lt;code class="verbatim"&gt;requires_grad=True&lt;/code&gt; 的张量均调用成员函数 &lt;code class="verbatim"&gt;.grad.zero_()&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;构建神经网络可以通过定义以 &lt;code class="verbatim"&gt;torch.nn.Module&lt;/code&gt; 为基类的派生类完成。&lt;/li&gt;&#10;&lt;li&gt;只需要在派生类中重载成员函数 &lt;code class="verbatim"&gt;.forward&lt;/code&gt; ， &lt;code class="verbatim"&gt;torch.autograd&lt;/code&gt; 就会自动为网络各个参数定义 &lt;code class="verbatim"&gt;.backward()&lt;/code&gt; 函数。&lt;/li&gt;&#10;&lt;li&gt;所构建的神经网络的可学习参数由所述派生类的成员函数 &lt;code class="verbatim"&gt;.parameters()&lt;/code&gt; 返回。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;torch.nn&lt;/code&gt; 包中定义了很多损失函数(如 &lt;code class="verbatim"&gt;torch.nn.MSELoss&lt;/code&gt;)。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;下面是一个非常简单的神经网络。该神经网络只包含一个全连接层和一个激活函数relu。包括两个成员函数， &lt;code class="verbatim"&gt;TRAIN&lt;/code&gt; 和 &lt;code class="verbatim"&gt;TEST&lt;/code&gt; 。顾名思义，前者用于从训练数据集中加载数据，并训练神经网络中的可学习参数，并把所有可学习参数的最终权重（训练结果）保存在文件中；后者从权重文件中读取并加载所有可学习参数的权重，然后从测试数据集中加载数据，计算误差，从而完成对训练结果（可学习参数的权重）的测试。&lt;/p&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;NEURAL_NETWORK&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;nn&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;Module&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;__init__&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; IN_FEATURES&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; OUT_FEATURES&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;super&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;NEURAL_NETWORK&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;span style="color:#6639ba"&gt;__init__&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;FC &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;nn&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;Module&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;Linear&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;IN_FEATURES&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; OUT_FEATURES&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;forward&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; INPUT&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;nn&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;function&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;relu&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;FC&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;INPUT&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;TRAIN&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; DATALOADER_FOR_TRAIN&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; OPT &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;optim&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;Adam&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;parameters&lt;span style="color:#1f2328"&gt;(),&lt;/span&gt; LEARNING_RATE&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LEARNING_RATE_SCHEDULER &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;optim&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;lr_scheduler&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;ExponentialLR&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;OPT&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; gamma&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;0.9&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; EPOCH_INDEX &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; &lt;span style="color:#6639ba"&gt;range&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;EPOCH_NUM&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; SAMPLE &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; DATALOADER_FOR_TRAIN&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SAMPLE &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; SAMPLE&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;to&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;device&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;cuda&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;cuda&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;is_available&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;device&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;cpu&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; VALUE_PREDICTED &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;forward&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;SAMPLE&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; VALUE_IDEAL &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; CALC_VALUE_IDEAL&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;SAMPLE&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LOSS &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;nn&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;MSELoss&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;VALUE_PREDICTED&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; VALUE_IDEAL&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LOSS&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;requires_grad_&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;True&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; OPT&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;zero_grad&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LOSS&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;backward&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; OPT&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;step&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LEARNING_RATE_SCHEDULER&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;step&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;save&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;state_dict&lt;span style="color:#1f2328"&gt;(),&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;NEURAL_NETWORK_WEIGHT.pth&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;def&lt;/span&gt; &lt;span style="color:#6639ba"&gt;TEST&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; DATALOADER_FOR_TEST&lt;span style="color:#1f2328"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;load_state_dict&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;load&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;NEURAL_NETWORK_WEIGHT.pth&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;False&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;with&lt;/span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;no_grad&lt;span style="color:#1f2328"&gt;():&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;for&lt;/span&gt; SAMPLE &lt;span style="color:#0550ae"&gt;in&lt;/span&gt; DATALOADER_FOR_TEST&lt;span style="color:#1f2328"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; SAMPLE &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; SAMPLE&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;to&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;device&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;cuda&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;cuda&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;is_available&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#cf222e"&gt;else&lt;/span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;device&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;cpu&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; VALUE_PREDICTED &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6a737d"&gt;self&lt;/span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;forward&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;SAMPLE&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; VALUE_IDEAL &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; CALC_VALUE_IDEAL&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;SAMPLE&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LOSS &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; torch&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;nn&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;MSELoss&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;VALUE_PREDICTED&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; VALUE_IDEAL&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Python - Basic</title><link>https://shakaxi.github.io/posts/python_basic/</link><pubDate>Tue, 04 May 2021 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_basic/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Python解释器&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Python程序运行时，需要Python解释器去执行 &lt;code class="verbatim"&gt;.py&lt;/code&gt; 文件。下面是一些常见的Python解释器。&lt;/p&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;CPython&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;p&gt;当Python安装好之后，CPython解释器就已经安装好了。该解释器是用C语言开发的，所以被称为CPython。在终端执行 &lt;code class="verbatim"&gt;python&lt;/code&gt; 命令后启动的就是该解释器。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;PyPy&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;PyPy解释器采用JIT技术对Python程序代码进行动态编译，所以PyPy以执行速度见长。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Jython&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;Jython解释器可以将Python程序代码转换为Java字节码，在Java平台上运行。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;IPython&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;p&gt;IPython是基于CPython之上的一个交互式（interactive）Python解释器，所以被称为IPython。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;没有内建到Python自身中的IPython特殊命令称为魔术命令，可以看作是IPython系统内部的命令行程序。魔术命令的前缀符号是百分号 &lt;code class="verbatim"&gt;%&lt;/code&gt; 。使用魔术命令也可以不加百分号，只要没有变量被定义与魔术函数名字相同即可。这种特性称为自动魔术，通过 &lt;code class="verbatim"&gt;%automagic&lt;/code&gt; 进行启动禁用。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;命令&lt;/th&gt;&#10;&lt;th&gt;描述&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%quickref&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;显示IPython快速参考卡。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%magic&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;显示所有可用魔术命令的详细文档。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%debug&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;从最后发生报错的底部进入交互式调试器。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%hist&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;打印历史命令输入。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%pdb&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;出现任意报错后自动进入调试器。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%paste&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;从剪贴板中执行已经预先格式化的Python代码。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%cpaste&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;打开一个特殊提示符，手动粘贴待执行的Python代码。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%reset&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;删除交互式命名空间中所有的变量、名称。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%page OBJECT&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;通过分页器更美观地打印显示一个对象。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%run SCRIPT.py&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;在IPython中运行一个Python脚本。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%prun STATEMENT&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;使用 &lt;code class="verbatim"&gt;CProfile&lt;/code&gt; 执行语句，并报告输出。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%time STATEMENT&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;报告单个语句的执行时间。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%timeit STATEMENT&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;多次运行单个语句计算平均执行时间（在估算代码最短执行时间时有用）。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%who&lt;/code&gt;, &lt;code class="verbatim"&gt;%who_ls&lt;/code&gt;, &lt;code class="verbatim"&gt;%whos&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;根据不同的详细程度，展示交互命名空间中定义的变量。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;%xdel VARIABLE&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;在IPython内部删除一个变量，清除相关的引用。&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;在IPython会话中，可以使用 &lt;code class="verbatim"&gt;%run&lt;/code&gt; 命令运行任意的Python文件。IPython会在同一个进程内执行指定文件中的代码，确保在执行完成时可以立即得到结果。如果一个Python脚本需要命令行提供参数（通过 &lt;code class="verbatim"&gt;sys.argv&lt;/code&gt; 获得），那么则需要在命令行的文件路径后面加上参数进行传递。如果想让运行的脚本使用交互式IPython命名空间中已有的变量，需要使用 &lt;code class="verbatim"&gt;%run -i&lt;/code&gt; 替代 &lt;code class="verbatim"&gt;%run&lt;/code&gt; 。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;%paste&lt;/code&gt; 会获得剪贴板中的所有文本，并作为代码块在命令行中执行； &lt;code class="verbatim"&gt;%cpaste&lt;/code&gt; 与之类似，只不过它会给出一个特殊的提示符提示粘贴代码。&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;%matplotlib&lt;/code&gt; 魔术函数可以设置matplotlib与IPython命令行或Jupyter notebook的集成。&lt;/li&gt;&#10;&lt;li&gt;在任意代码运行时按下 &lt;code class="verbatim"&gt;Ctrl-C&lt;/code&gt; ，无论脚本是通过 &lt;code class="verbatim"&gt;%run&lt;/code&gt; 或是其他长命令运行的，都将引起 &lt;code class="verbatim"&gt;KeyboardInterrupt&lt;/code&gt; ，导致所有的Python程序立即停止运行（某些特殊情况除外）。&lt;/li&gt;&#10;&lt;li&gt;IPython中大多数Python对象会被格式化为更可读、更美观的形式。&lt;/li&gt;&#10;&lt;li&gt;IPython还提供执行任意代码块（通过复制粘贴）和整个Python脚步的功能。&lt;/li&gt;&#10;&lt;li&gt;在一个变量名的前后使用问号(&lt;code class="verbatim"&gt;?&lt;/code&gt;)可以显示一些关于该对象的概要信息。使用双问号(&lt;code class="verbatim"&gt;??&lt;/code&gt;) 可以显示函数的源代码。 &lt;code class="verbatim"&gt;?&lt;/code&gt; 可以像Unix命令行一样搜索IPython命名空间。把一些字符和通配符(&lt;code class="verbatim"&gt;*&lt;/code&gt;)结合在一起，会显示所有匹配通配符表达式的命令。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;需要启动Jupyter时，可以在终端中运行如下命令。&lt;/p&gt;&#10;&lt;div class="src src-python"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; jupyter notebook&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;在很多平台上，Jupyter会自动默认网络浏览器（除非启动Jupyter时使用了 &lt;code class="verbatim"&gt;--no-browser&lt;/code&gt; 命令）。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Beam Pattern</title><link>https://shakaxi.github.io/posts/beam_pattern/</link><pubDate>Thu, 04 Mar 2021 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/beam_pattern/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Beamforming&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Around the decades, &lt;em&gt;multi-input multi-output (MIMO)&lt;/em&gt;, a.k.a. multiantenna transmission, has been the focus of the research relating to wireless communications, and attracted the interests and attentions from both academic circle and industrial area. By deliberately designing the complex-valued coefficients of each antenna elements, the transmitted power or its majority can be limited to a specified direction or area. The operation is termed &lt;em&gt;beamforming&lt;/em&gt;, and accordingly the weights of all the antenna elements involved are termed a &lt;em&gt;beamforming vector&lt;/em&gt; or a &lt;em&gt;beamformer&lt;/em&gt;. In this case, the SINR and the power of the received signal at the receiver can be remarkably enhanced.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>C++ - Output Object</title><link>https://shakaxi.github.io/posts/cpp_class_output/</link><pubDate>Sun, 14 Feb 2021 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/cpp_class_output/</guid><description>&lt;p&gt;&#10;In object oriented programming (OOP) based C++ program, we usually need to output the properties and members of one or more objects. In this case, overriding the ostream operator, &lt;code class="verbatim"&gt;&amp;lt;&amp;lt;&lt;/code&gt;, is a convenient and intuitional method. Here is an example for class &lt;code class="verbatim"&gt;CLASS&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;&lt;code class="verbatim"&gt;class.h&lt;/code&gt;&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;lt;ostream&amp;gt;&lt;/span&gt;&lt;span style="color:#57606a"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;CLASS&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;private&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; mem_int&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;double&lt;/span&gt; mem_double&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CLASS&lt;span style="color:#1f2328"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;friend&lt;/span&gt; std&lt;span style="color:#0550ae"&gt;::&lt;/span&gt;ostream&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;operator&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;std&lt;span style="color:#0550ae"&gt;::&lt;/span&gt;ostream&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt; str&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; CLASS&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt; c&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;&lt;code class="verbatim"&gt;class.cpp&lt;/code&gt;&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;lt;class.h&amp;gt;&lt;/span&gt;&lt;span style="color:#57606a"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; std&lt;span style="color:#0550ae"&gt;::&lt;/span&gt;ostream&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;operator&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;std&lt;span style="color:#0550ae"&gt;::&lt;/span&gt;ostream&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt; str&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;const&lt;/span&gt; CLASS&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt; c&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; str &lt;span style="color:#0550ae"&gt;&amp;lt;&amp;lt;&lt;/span&gt; c&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;mem_int &lt;span style="color:#0550ae"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;,&amp;#39;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;lt;&amp;lt;&lt;/span&gt; c&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;mem_double&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; str&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - Notmuch</title><link>https://shakaxi.github.io/posts/notmuch/</link><pubDate>Thu, 11 Feb 2021 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/notmuch/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;Notmuch&lt;/code&gt; is a mail system&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;. It can efficiently manage a fairly large number of emails. Particularly, it supports fast email searching and filtering based on tags, which is extremely similar to Gmail&amp;#39;s tags whereby various virtual folders can be flexibly realized.&lt;/p&gt;&#10;&lt;p&gt;&#10;This post is composed just to summarize the basic installation and configuration of &lt;code class="verbatim"&gt;notmuch&lt;/code&gt;-based mail system.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S notmuch&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;&lt;code class="verbatim"&gt;~/.notmuch-config&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;The basic configuration can be performed by either&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;an interactive guidance which can be provoked by&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;notmuch setup&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;or a manually composed &lt;code class="verbatim"&gt;~/.notmuch-config&lt;/code&gt; as follows&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;database&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;# Mail storage in maildir format&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;path&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;/MAIL/REPO&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;user&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;name&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;NAME&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;primary_email&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;EMAILADDRESS&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;new&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;tags&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;unread&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;inbox&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;ignore&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;search&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;exclude_tags&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;deleted&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;spam&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;maildir&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;synchronize_flags&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#6639ba"&gt;true&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;[&lt;/span&gt;crypto&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;gpg_path&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;gpg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;&lt;code class="verbatim"&gt;~/.emacs.d/init.el&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;p&gt;Add following content to the configuration of Emacs.&lt;/p&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;require&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;notmuch&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#6639ba"&gt;user-full-name&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;NAME&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;user-mail-address&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;EMAILADDRESS&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;mail-user-agent&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;message-user-agent&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;message-kill-buffer-on-exit&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mm-text-html-renderer&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;w3m&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;notmuch-search-oldest-first&lt;/span&gt; &lt;span style="color:#0550ae"&gt;nil&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;notmuch-show-all-multipart/alternative-parts&lt;/span&gt; &lt;span style="color:#0550ae"&gt;nil&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mail-interactive&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;notmuch-always-prompt-for-sender&lt;/span&gt; &lt;span style="color:#0550ae"&gt;nil&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;notmuch-show-indent-messages-width&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;mail-specify-envelope-from&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;message-sendmail-envelope-from&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;header&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mail-envelope-from&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;header&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;message-directory&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;notmuch-fcc-dirs&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;message-send-mail-function&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;smtpmail-send-it&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;smtpmail-smtp-server&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;SMTPSERVER&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;smtpmail-stream-type&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;ssl&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;smtpmail-smtp-service&lt;/span&gt; &lt;span style="color:#953800"&gt;PORT&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;notmuch-saved-searches&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;&lt;span style="color:#6639ba"&gt;:name&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;inbox&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;:query&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;tag:inbox&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;:count-query&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;tag:inbox and tag:unread&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;:sort-order&lt;/span&gt; &lt;span style="color:#953800"&gt;newest-first&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;Hooks&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;p&gt;Additionally, notmuch supports hooks which are essentially scripts in &lt;code class="verbatim"&gt;/MAIL/REPO/.notmuch/hooks&lt;/code&gt; whereby users can specify and customize the behaviors of notmuch. Currently, following scripts and hooks are available.&lt;/p&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&#10;&lt;code class="verbatim"&gt;pre-new&lt;/code&gt;&#10;&lt;/dt&gt;&#10;&lt;dd&gt;Hook/script provoked before command &lt;code class="verbatim"&gt;notmuch new&lt;/code&gt;, which is usually used to fetch mails.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#!/bin/sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/usr/bin/offlineimap -c /PATH/TO/OFFLINEIMAPRC -a ACCOUNT&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;or&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#!/bin/sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/usr/bin/getmail --new --getmaildir&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;/PATH/TO/GETMAILRC --rcfile&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;GETMAILRC&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&#10;&lt;code class="verbatim"&gt;post-new&lt;/code&gt;&#10;&lt;/dt&gt;&#10;&lt;dd&gt;Hook/script provoked after command &lt;code class="verbatim"&gt;notmuch new&lt;/code&gt;, which is usually used to tag the newly imported mails.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#!/bin/sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;notmuch tag -inbox +ML -- to:MAILLIST@EXAMPLE.COM&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;notmuch tag -inbox +SOMEONE -- from:SOMEONE@EXAMPLE.COM&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/usr/bin/notmuch search --output&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;files tag:deleted OR tag:spam &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; xargs -r rm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&#10;&lt;code class="verbatim"&gt;post-insert&lt;/code&gt;&#10;&lt;/dt&gt;&#10;&lt;dd&gt;Hook/script called after command &lt;code class="verbatim"&gt;notmuch insert&lt;/code&gt;, which is provoked after mails are delivered, imported into database and labelled with initial tags.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#!/bin/sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;notmuch tag -inbox -unread +sent -- from:MYEMAILADDRESS&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/usr/bin/notmuch search --output&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;files tag:deleted OR tag:spam &lt;span style="color:#1f2328"&gt;|&lt;/span&gt; xargs -r rm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-3"&gt;&#10;&lt;h3 id="headline-7"&gt;&#10;Automatics&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Add new intended task by &lt;code class="verbatim"&gt;crontab -e&lt;/code&gt; with following content&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;*/5 * * * * /usr/bin/notmuch new&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;where the first line is for periodical fetching mail every 3 minutes and the second line to remove the mails deleted (tagged by &lt;code class="verbatim"&gt;deleted&lt;/code&gt;) at every boot.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Enable and start the service &lt;code class="verbatim"&gt;cronie&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl &lt;span style="color:#6639ba"&gt;enable&lt;/span&gt; cronie.service&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl start cronie.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-3"&gt;&#10;&lt;h3 id="headline-8"&gt;&#10;CJK Support&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-3"&gt;&#10;&lt;p&gt;By default, notmuch cannot separate Chinese correctly, Japanese, or Korean words due to the non-space separator. A workaround is to &lt;a href="https://notmuchmail.org/howto/#index10h2"&gt;set a environment variable&lt;/a&gt; as follows.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;export&lt;/span&gt; &lt;span style="color:#953800"&gt;XAPIAN_CJK_NGRAM&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>C++ - Singleton</title><link>https://shakaxi.github.io/posts/cpp_singleton/</link><pubDate>Fri, 11 Dec 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/cpp_singleton/</guid><description>&lt;p&gt;&#10;&lt;strong&gt;Singleton&lt;/strong&gt; plays an important role in program architecturing for its global visibility. For instance, system parameters are usually structured as a singleton. What deserves to be noticed, a singleton can be realized in a variety of manners.&lt;/p&gt;&#10;&lt;p&gt;&#10;Taking C++ for instance, a typical singleton can be simply defined as&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;&lt;code class="verbatim"&gt;singleton.h&lt;/code&gt;&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#ifndef SINGLETON_H&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#define SINGLETON_H&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;Singleton&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;private&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; Singleton &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;instance&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Singleton&lt;span style="color:#1f2328"&gt;()&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#cf222e"&gt;default&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Singleton&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;const&lt;/span&gt; Singleton &lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;rhs&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#cf222e"&gt;delete&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Singleton&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt; &lt;span style="color:#cf222e"&gt;operator&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;const&lt;/span&gt; Singleton &lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;rhs&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#cf222e"&gt;delete&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;static&lt;/span&gt; Singleton&lt;span style="color:#0550ae"&gt;*&lt;/span&gt; get_instance&lt;span style="color:#1f2328"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#endif &lt;/span&gt;&lt;span style="color:#57606a"&gt;/* SINGLETON_H */&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;&lt;code class="verbatim"&gt;singleton.cpp&lt;/code&gt;&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;#34;singleton.h&amp;#34;&lt;/span&gt;&lt;span style="color:#57606a"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Singleton &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;Singleton&lt;span style="color:#0550ae"&gt;::&lt;/span&gt;instance &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#cf222e"&gt;nullptr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Singleton&lt;span style="color:#0550ae"&gt;*&lt;/span&gt; Singleton&lt;span style="color:#0550ae"&gt;::&lt;/span&gt;get_instance&lt;span style="color:#1f2328"&gt;()&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;instance &lt;span style="color:#0550ae"&gt;==&lt;/span&gt; &lt;span style="color:#cf222e"&gt;nullptr&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; instance &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#cf222e"&gt;new&lt;/span&gt; Singleton&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; instance&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Gaussian Distribution</title><link>https://shakaxi.github.io/posts/gaussian/</link><pubDate>Sat, 01 Aug 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/gaussian/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Probability density function&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;$X \sim \mathcal{N}(\mu, \sigma^2)$&lt;/p&gt;&#10;\begin{align*}&#10; p(x) = \frac{1}{\sqrt{2\pi}\sigma} \exp\left[-\frac{(x-\mu)^2}{2\sigma^2}\right]&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Distribution function&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Q-function&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Definition&lt;/p&gt;&#10;\begin{align*}&#10; Q(x) \triangleq \int_x^{\infty} \frac{1}{\sqrt{2\pi}}\exp\left(-\frac{x^2}{2}\right)dx&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Properties&lt;/p&gt;&#10;\begin{align*}&#10; Q(-x) + Q(x) &amp;amp;= 1 \\&#10; Q(0) &amp;amp;= \frac{1}{2}&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Error function and complementary error function&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Definitions&lt;/p&gt;&#10;\begin{align*}&#10; \text{erf}(x) &amp;amp;\triangleq \frac{2}{\sqrt{\pi}} \int_0^x \exp\left(-x^2\right)dx \\&#10; \text{erfc}(x) &amp;amp;\triangleq \frac{2}{\sqrt{\pi}} \int_x^{\infty} \exp\left(-x^2\right)dx&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Properties&lt;/p&gt;&#10;\begin{align*}&#10; \text{erf}(x) + \text{erfc}(x) &amp;amp;= 1 \\&#10; \text{erf}(x) &amp;amp;= 1 - 2Q(\sqrt{2}x) \\&#10; \text{erfc}(x) &amp;amp;= 2Q(\sqrt{2}x)&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Laplace Transform</title><link>https://shakaxi.github.io/posts/laplace/</link><pubDate>Mon, 06 Jul 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/laplace/</guid><description>&lt;p&gt;&#10;Given a time domain continuous signal, it can be represented in the &lt;em&gt;complex frequency domain&lt;/em&gt; by &lt;em&gt;Laplace transform&lt;/em&gt;. It is essentially an extension of &lt;em&gt;Continuous Fourier transform&lt;/em&gt;.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Definition&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Bilateral transform&lt;/p&gt;&#10;\begin{align*}&#10; X(s) = \int_{-\infty}^{\infty} x(t) e^{-st} dt&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Unilateral transform&lt;/p&gt;&#10;\begin{align*}&#10; X(s) = \int_{0_-}^{\infty} x(t) e^{-st} dt&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Inverse transform&lt;/p&gt;&#10;\begin{align*}&#10; x(t) = \frac{1}{2\pi j} \int_{\sigma-j\infty}^{\sigma+j\infty} X(s) e^{st} ds&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;li&gt;Region of convergence (ROC): Considering the fact that $X(s)$ is an infinite integration, the convergence must be ensured. To this end, ROC is defined, which is comprised of the candidate values of $s$ keeping the convergence. $s$ is termed &lt;em&gt;complex frequency&lt;/em&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Properties (Unilateral Transform)&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;\begin{align*}&#10; x(t), t \ge 0_{-} &amp;amp;\leftrightarrow X(s) \\&#10; x(at), a &amp;gt; 0 &amp;amp;\leftrightarrow \frac{1}{a}X \left( \frac{s}{a} \right) \\&#10; x(t - t_0)\varepsilon(t - t_0), t_0&amp;gt;0 &amp;amp;\leftrightarrow X(s) e^{-st_0} \\&#10; x(t)e^{s_0}t &amp;amp;\leftrightarrow X(s - s_0) \\&#10; x^{(n)}(t) &amp;amp;\leftrightarrow s^nX(s) - s^{n-1}x(0_{-}) - \cdots - s^0x^{(n-1)}(0_{-}) \\&#10; x_1(t) * x_2(t) &amp;amp;\leftrightarrow X_1(s) X_2(s) \\&#10; x_1(t) x_2(t) &amp;amp;\leftrightarrow \frac{1}{2\pi j} \int_{C-j\infty}^{C+j\infty} X_1(\eta)X_2(s-\eta) d \eta \\&#10; (-t)^nx(t) &amp;amp;\leftrightarrow \frac{d^nX(s)}{ds^{n}} \\&#10; \frac{x(t)}{t} &amp;amp;\leftrightarrow \int_s^{\infty}X(\eta)d\eta&#10;\end{align*}&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Initial Value Theorem&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;\begin{align*}&#10; x(0_{+}) = \lim_{s\to \infty}sX(s)&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Final Value Theorem&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;\begin{align*}&#10; x(\infty) = \lim_{s\to 0} sX(s)&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-2"&gt;&#10;&lt;h2 id="headline-5"&gt;&#10;Transform Pairs (Unilateral Transform)&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-2"&gt;&#10;\begin{align*}&#10; x(t), t \ge 0_{-} &amp;amp;\leftrightarrow X(s) \\&#10; \delta(t) &amp;amp;\leftrightarrow 1 \\&#10; \varepsilon(t) &amp;amp;\leftrightarrow \frac{1}{s} \\&#10; e^{-s_0t} &amp;amp;\leftrightarrow \frac{1}{s+s_0} \\&#10; t^n, n \in \mathbb{Z}^+ &amp;amp;\leftrightarrow \frac{n!}{s^{n+1}} \\&#10; \sin \omega t &amp;amp;\leftrightarrow \frac{\omega_0}{s^2 + \omega_0^2} \\&#10; \cos \omega t &amp;amp;\leftrightarrow \frac{s}{s^2 + \omega_0^2}&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Z Transform</title><link>https://shakaxi.github.io/posts/z/</link><pubDate>Mon, 06 Jul 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/z/</guid><description>&lt;p&gt;&#10;Given a time domain discrete signal, i.e., a sequence, it can be represented in the &lt;em&gt;complex frequency domain&lt;/em&gt; by &lt;em&gt;Z transform&lt;/em&gt;. It is essentially an extension of &lt;em&gt;discrete time Fourier transform (DTFT)&lt;/em&gt;.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Definition&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Bilateral transform&lt;/p&gt;&#10;\begin{align*}&#10; X(z) = \sum_{n=-\infty}^{\infty} x(n) z^{-n}&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Unilateral transform&lt;/p&gt;&#10;\begin{align*}&#10; X(z) = \sum_{n=0}^{\infty} x(n) z^{-n}&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Inverse transform&lt;/p&gt;&#10;\begin{align*}&#10; x(n) &amp;amp;= \frac{1}{2\pi j}\oint_C X(z)z^{n-1} dz \\&#10; &amp;amp;= \sum_{k} \text{Res} \left[ X(z)z^{n-1}, z_k \right].&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;em&gt;Region of convergence (ROC)&lt;/em&gt;: Considering the fact that $X(z)$ is an infinite summation, the convergence must be ensured. To this end, ROC is defined, which is comprised of the candidate values of $z$ keeping the convergence. $z$ is termed &lt;em&gt;complex frequency&lt;/em&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Properties&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;Denote the ROC as $\alpha &amp;lt; |z| &amp;lt; \beta$, $0 \le\alpha &amp;lt; \beta$.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Common to both bilateral and unilateral transforms&lt;/p&gt;&#10;\begin{align*}&#10; a^n x(n), \quad a \neq 0. &amp;amp;\leftrightarrow X \left( \frac{z}{a} \right), \quad \alpha |a| &amp;lt; |z| &amp;lt; \beta |a|. \\&#10; x_1(n) * x_2(n) &amp;amp;\leftrightarrow X_1(z) X_2(z), \quad \max(\alpha_1, \alpha_2) &amp;lt; |z| &amp;lt; \min(\beta_1, \beta_2). \\&#10; n^mx(n), \quad m &amp;gt; 0. &amp;amp;\leftrightarrow \left(-z\frac{d}{dz}\right)^m X(z), \quad \alpha &amp;lt; |z| &amp;lt; \beta.\\&#10; \frac{x(n)}{n+m}, \quad n+m &amp;gt; 0. &amp;amp;\leftrightarrow z^m \int_z^{\infty}X(\eta)\eta^{-(m+1)}d\eta, \quad \alpha &amp;lt; |z| &amp;lt; \beta. \\&#10; x^*(n) &amp;amp;\leftrightarrow X^*(z^*) \\&#10; x_1(n) * x_2(n) &amp;amp;\leftrightarrow X_1(z) X_2(z) \\&#10; x(-n) &amp;amp;\leftrightarrow X\left(\frac{1}{z}\right), \quad \frac{1}{\beta} &amp;lt; |z| &amp;lt; \frac{1}{\alpha}.\\&#10; \sum_{i=-\infty}^nx(i) &amp;amp;\leftrightarrow \frac{z}{z-1}X(z), \quad \max(\alpha, 1) &amp;lt; |z| &amp;lt; \beta.&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Dedicated to bilateral transform&lt;/p&gt;&#10;\begin{align*}&#10; x(n + m) \leftrightarrow z^m X(z), \quad \alpha &amp;lt; |z| &amp;lt; \beta \\&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Dedicated to unilateral transform&lt;/p&gt;&#10;\begin{align*}&#10; x(n-m), \quad m &amp;gt; 0. &amp;amp;\leftrightarrow z^{-m}X(z) + \sum_{n=0}^{m-1}x(n-m)z^{-n}, \quad |z| &amp;gt; \alpha. \\&#10; x(n+m), \quad m &amp;gt; 0. &amp;amp;\leftrightarrow z^mX(z) - \sum_{n=0}^{m-1}x(n)z^{m-n}, \quad |z| &amp;gt; \alpha.&#10;\end{align*}&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Initial Value Theorem&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;\begin{align*}&#10; x(0) = \lim_{z\to\infty}X(z)&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Final Value Theorem&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;\begin{align*}&#10; \lim_{n\to\infty}x(n) = \lim_{z\to 1}(z-1)X(z)&#10;\end{align*}&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Aurora - A LaTeX Plugin for Microsoft Word</title><link>https://shakaxi.github.io/posts/aurora/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/aurora/</guid><description>&lt;p&gt;&#10;&lt;a href="http://elevatorlady.ca"&gt;Aurora&lt;/a&gt; is an excellent LaTeX addon, which enables LaTeX based mathematical support, including a variety of symbols and equations.&lt;/p&gt;&#10;&lt;p&gt;&#10;For Microsoft Office-32, there is a dedicated tab for Aurora in Word. For Office-64, however, there is no tab at all. In this case, aurora has to be activated by &lt;code class="verbatim"&gt;insert&lt;/code&gt; → &lt;code class="verbatim"&gt;object&lt;/code&gt;. Clearly, the access is neither direct nor convenience. Targetting better convenience, macros can be defined and then placed in a card, e.g., following scripts define two macros, &lt;code class="verbatim"&gt;aurora_inline&lt;/code&gt; and &lt;code class="verbatim"&gt;aurora_display&lt;/code&gt;, to input inline and display style equations.&lt;/p&gt;</description></item><item><title>Blog on GitHub</title><link>https://shakaxi.github.io/posts/blog/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/blog/</guid><description>&lt;p&gt;&#10;It has been quite a long time for me not to write and publish blog since Google blogspot and WordPress were blocked. Recently, I have built a new blog site on &lt;a href="https://github.com"&gt;GitHub&lt;/a&gt;. This post is just written to summarize the procedure.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Preparation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;Softwares&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;p&gt;Above all, you should have &lt;a href="http://www.gnu.org/software/emacs/"&gt;Emacs&lt;/a&gt; and &lt;a href="http://orgmode.org/"&gt;Orgmode&lt;/a&gt; installed. Taking ArchLinux for instance, Emacs can be installed as follows&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S emacs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;The installation of Orgmode can be avoided since it has been already included as a built-in plugin.&lt;/p&gt;&#10;&lt;p&gt;&#10;In order to freely exchange data with GitHub, &lt;code class="verbatim"&gt;git&lt;/code&gt; is needed. Also taking ArchLinux for example, the installation can be performed by&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S git&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Account on GitHub&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;Of course, an account on GitHub is also indispensable. If you do not have an account, you have to sign up on &lt;a href="http://github.com."&gt;http://github.com.&lt;/a&gt; According to the description of &lt;a href="https://pages.github.com/"&gt;GitHub Pages&lt;/a&gt;, if your account is &lt;code class="verbatim"&gt;USERNAME&lt;/code&gt;, your blog site can be accessed via &lt;a href="http://USERNAME.github.io"&gt;http://USERNAME.github.io&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>C/C++ - switch</title><link>https://shakaxi.github.io/posts/cpp_switch/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/cpp_switch/</guid><description>&lt;p&gt;&#10;在C/C++语言中， &lt;code class="verbatim"&gt;switch&lt;/code&gt; 语句的通用格式为&lt;/p&gt;&#10;&lt;div class="src src-c"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;switch&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;int_expr&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;case&lt;/span&gt; &lt;span style="color:#900;font-weight:bold"&gt;label1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;statement&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;s&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;case&lt;/span&gt; &lt;span style="color:#900;font-weight:bold"&gt;label2&lt;/span&gt;&lt;span style="color:#1f2328"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;statement&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;s&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;...&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;default&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:&lt;/span&gt; &lt;span style="color:#6639ba"&gt;statement&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;s&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;顾名思义， &lt;code class="verbatim"&gt;int_expr&lt;/code&gt; 必须是一个结果为整数值的表达式。另外，每个标签都必须是整数常量表达式。最常见的标签是 &lt;code class="verbatim"&gt;int&lt;/code&gt; 或 &lt;code class="verbatim"&gt;char&lt;/code&gt; 常量（如1或‘a’），也可以是枚举常量。C++中的 &lt;code class="verbatim"&gt;case&lt;/code&gt; 标签只是行标签，而不是选项之间的界限。也就是说，程序跳到 &lt;code class="verbatim"&gt;switch&lt;/code&gt; 中特定代码后，将依次执行之后的所有语句，除非有明确的其他指示。程序不会执行到下一个 &lt;code class="verbatim"&gt;case&lt;/code&gt; 处自动停止，要让程序执行完一组特定语句后停止，必须使用 &lt;code class="verbatim"&gt;break&lt;/code&gt; 语句。这将导致程序跳到 &lt;code class="verbatim"&gt;switch&lt;/code&gt; 后面的语句处执行。&lt;/p&gt;&#10;&lt;p&gt;&#10;关于将枚举量用作标签，通常， &lt;code class="verbatim"&gt;cin&lt;/code&gt; 无法识别枚举类型（它不知道程序员是如何定义它们的），因此程序要求用户选择选项时输入整数。当 &lt;code class="verbatim"&gt;switch&lt;/code&gt; 语句将 &lt;code class="verbatim"&gt;int&lt;/code&gt; 值和枚举量标签进行比较时，将枚举量提升为 &lt;code class="verbatim"&gt;int&lt;/code&gt; 。另外，在 &lt;code class="verbatim"&gt;while&lt;/code&gt; 循环测试条件中，也会将枚举量提升为 &lt;code class="verbatim"&gt;int&lt;/code&gt; 类型。&lt;/p&gt;</description></item><item><title>C++ - IT++</title><link>https://shakaxi.github.io/posts/cpp_itpp/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/cpp_itpp/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;em&gt;IT++&lt;/em&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt; is a powerful C++ library, which is widely employed in the area of communication, esp. in simulation programming and computing. It has provided a variety of useful &lt;em&gt;classes&lt;/em&gt;, e.g. &lt;code class="verbatim"&gt;vector&lt;/code&gt;, &lt;code class="verbatim"&gt;matrix&lt;/code&gt;. With the aid of IT++, programming in C++ is very similar to programming in &lt;em&gt;MATLAB&lt;/em&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;IT++ is released under &lt;em&gt;GPL&lt;/em&gt;, and can work on all the platforms, including Unix/Linux, Windows an Mac OS X.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;Optionally, its functionality can be greatly extended based on existing open-source or commercial libraries, i.e.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Open-source libraries&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="http://www.netlib.org/blas/"&gt;BLAS&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://www.netlib.org/lapack/"&gt;LAPACK&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://www.fftw.org/"&gt;FFTW&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Commercial libraries&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="http://math-atlas.sourceforge.net/"&gt;ATLAS&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://software.intel.com/en-us/intel-mkl/"&gt;MKL&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://developer.amd.com/acml.aspx"&gt;ACML&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Install the third-party libraries&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;Herein, we take the open-source libraries above for instance. For &lt;em&gt;ArchLinux&lt;/em&gt;, the installation can be performed by&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S blas lapack fftw&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Install IT++&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;The lastest version of IT++ can be obtained via git, and installed to &lt;code class="verbatim"&gt;/opt/itpp&lt;/code&gt; by following commands.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone --depth&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt; git://git.code.sf.net/p/itpp/git itpp-git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;cd&lt;/span&gt; itpp-git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir build&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;cd&lt;/span&gt; build&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cmake .. -DCMAKE_INSTALL_PREFIX&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;/opt/itpp&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make install&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make clean&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;cd&lt;/span&gt; ..&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rm -rf build&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;What deserves notice, the commands above installs the &lt;em&gt;shared&lt;/em&gt; libraries. For the static version, option &lt;code class="verbatim"&gt;-DITPP_SHARED_LIB=off&lt;/code&gt; of &lt;code class="verbatim"&gt;cmake&lt;/code&gt; should be used.&lt;/p&gt;&#10;&lt;p&gt;&#10;BTW, HTML documentation will be installed by default. Therefore, &lt;em&gt;doxygen&lt;/em&gt; needs to be installed in advance. Otherwise, the documentation installation should be disabled by &lt;code class="verbatim"&gt;-DHTML_DOCS=off&lt;/code&gt; option of &lt;code class="verbatim"&gt;cmake&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>C++ - Multithread</title><link>https://shakaxi.github.io/posts/cpp_multithread/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/cpp_multithread/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;背景&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;C++98/03不支持多线程编程, 所以必须借助第三方库或目标操作系统中的多线程API. 这使得编写跨平台的多线程程序很困难. C++11引入了标准的多线程库, 使得多线程程序跨平台更加容易. 目前的C++11标准仅针对CPU, 不支持GPU.&lt;/p&gt;&#10;&lt;p&gt;&#10;多线程编程的难点之一是将算法并行化, 这个过程和算法的类型高度相关. 此外, 要防止竞争条件和死锁, 并考虑缓存的一致性.&lt;/p&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&#10;竞争条件&#10;&lt;/dt&gt;&#10;&lt;dd&gt;当多个线程要读/写共享内存位置时, 可能会发生竞争条件.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;死锁&#10;&lt;/dt&gt;&#10;&lt;dd&gt;线程因为等待另一个阻塞线程锁定的资源而造成的无限阻塞.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;撕裂&#10;&lt;/dt&gt;&#10;&lt;dd&gt;部分数据已写入内存, 但还有部分数据没有写入. 如果另一个线程在此时读取数据, 就会得到不一致的数据.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;缓存的一致性&#10;&lt;/dt&gt;&#10;&lt;dd&gt;如果一个线程写入了一段数据, 该线程会立即看到新数据, 但这并不意味着所有线程都会立即看到新数据. 所以, 在读写多个线程时, 即使是最简单的数据类型, 也需要同步.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;线程&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;C++线程库定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;thread&amp;gt;&lt;/code&gt; 中.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;通过函数指针创建线程&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;标准C++的 &lt;code class="verbatim"&gt;thread&lt;/code&gt; 类的构造函数是一个可变参数模板, 可以接受任意数目的参数. 第一个参数为函数名称, 其余参数为函数的参数. 如&lt;/p&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;lt;thread&amp;gt;&lt;/span&gt;&lt;span style="color:#57606a"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;using&lt;/span&gt; &lt;span style="color:#cf222e"&gt;namespace&lt;/span&gt; std&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;void&lt;/span&gt; &lt;span style="color:#6639ba"&gt;f&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; i&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;double&lt;/span&gt; j&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;bool&lt;/span&gt; k&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; &lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; argc&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;argv&lt;span style="color:#1f2328"&gt;[])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;thread&lt;/span&gt; t&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;f&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2.0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;true&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;join&lt;span style="color:#1f2328"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;默认情况下, 从不同线程中访问cout是线程安全的, 没有任何数据竞争, 除非在第一个输出或输入操作之前调用了 &lt;code class="verbatim"&gt;cout.sync_with_stdio(false)&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;通过函数对象创建线程&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;使用函数指针技术, 向线程传递信息的唯一方式是向函数传递参数. 而使用函数对象, 可向函数对象类添加成员变量, 并可以采用任何方式初始化和使用这些变量. 如&lt;/p&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;lt;thread&amp;gt;&lt;/span&gt;&lt;span style="color:#57606a"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;using&lt;/span&gt; &lt;span style="color:#cf222e"&gt;namespace&lt;/span&gt; std&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;A&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; A&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; i&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;double&lt;/span&gt; j&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;bool&lt;/span&gt; k&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;void&lt;/span&gt; &lt;span style="color:#6639ba"&gt;operator&lt;/span&gt;&lt;span style="color:#1f2328"&gt;()(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; i&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; &lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; argc&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;argv&lt;span style="color:#1f2328"&gt;[])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;thread&lt;/span&gt; t&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;A&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;));&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;join&lt;span style="color:#1f2328"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;函数对象总是复制到线程的某个内部存储中. 如果要在函数对象的某个特定实例上执行 &lt;code class="verbatim"&gt;operator()&lt;/code&gt; 而非进行复制, 那么应该使用头文件 &lt;code class="verbatim"&gt;&amp;lt;functional&amp;gt;&lt;/code&gt; 中的 &lt;code class="verbatim"&gt;std::ref()&lt;/code&gt; 或 &lt;code class="verbatim"&gt;std::cref()&lt;/code&gt; 传入该实例的引用或常引用.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;通过lambda表达式创建线程&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;p&gt;如&lt;/p&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;lt;thread&amp;gt;&lt;/span&gt;&lt;span style="color:#57606a"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;using&lt;/span&gt; &lt;span style="color:#cf222e"&gt;namespace&lt;/span&gt; std&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; &lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; argc&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;argv&lt;span style="color:#1f2328"&gt;[])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; i &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;thread&lt;/span&gt; t&lt;span style="color:#1f2328"&gt;([&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;i&lt;span style="color:#1f2328"&gt;]{&lt;/span&gt;i &lt;span style="color:#0550ae"&gt;+=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;});&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; t&lt;span style="color:#1f2328"&gt;.&lt;/span&gt;join&lt;span style="color:#1f2328"&gt;();&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;通过成员函数创建线程&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;p&gt;第一个参数为成员函数指针, 第二个参数为类对象指针, 其余参数为成员函数的参数.&lt;/p&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;#include&lt;/span&gt; &lt;span style="color:#57606a"&gt;&amp;lt;thread&amp;gt;&lt;/span&gt;&lt;span style="color:#57606a"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;using&lt;/span&gt; &lt;span style="color:#cf222e"&gt;namespace&lt;/span&gt; std&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;class&lt;/span&gt; &lt;span style="color:#1f2328"&gt;A&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;public&lt;/span&gt;&lt;span style="color:#0550ae"&gt;:&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; A&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; i&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;double&lt;/span&gt; j&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;bool&lt;/span&gt; k&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;void&lt;/span&gt; &lt;span style="color:#6639ba"&gt;process&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; i&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; &lt;span style="color:#6639ba"&gt;main&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#cf222e"&gt;int&lt;/span&gt; argc&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#cf222e"&gt;char&lt;/span&gt; &lt;span style="color:#0550ae"&gt;*&lt;/span&gt;argv&lt;span style="color:#1f2328"&gt;[])&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; A a&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;2.0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#6639ba"&gt;true&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;thread&lt;/span&gt; t&lt;span style="color:#1f2328"&gt;{&lt;/span&gt;&lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;A&lt;span style="color:#0550ae"&gt;::&lt;/span&gt;process&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;amp;&lt;/span&gt;a&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0550ae"&gt;3&lt;/span&gt;&lt;span style="color:#1f2328"&gt;};&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;return&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-3"&gt;&#10;&lt;h3 id="headline-7"&gt;&#10;线程本地存储&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-3"&gt;&#10;&lt;p&gt;通过关键字 &lt;code class="verbatim"&gt;thread_local&lt;/code&gt;, 可将任何变量标记为线程本地数据, 即每个线程都有这个变量的独立副本, 而且这个变量能在线程的整个生命周期中持续存在. 对于每个线程, 该变量正好初始化一次.&lt;/p&gt;&#10;&lt;p&gt;&#10;如果 &lt;code class="verbatim"&gt;thread_local&lt;/code&gt; 变量在函数作用域中声明, 那么这个变量的行为和声明为静态变量是一致的, 只不过每个线程都有自己独立的副本, 而且不论这个函数在线程中调用多少次, 每个线程只初始化一次这个变量.&lt;/p&gt;&#10;&lt;p&gt;&#10;以下代码中, 多个线程共享唯一的j副本, 而每个线程都有自己的i副本.&lt;/p&gt;&#10;&lt;div class="src src-c++"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;thread_local&lt;/span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; i&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;int&lt;/span&gt; j&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;void&lt;/span&gt; &lt;span style="color:#6639ba"&gt;process&lt;/span&gt;&lt;span style="color:#1f2328"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-3"&gt;&#10;&lt;h3 id="headline-8"&gt;&#10;取消线程&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-3"&gt;&#10;&lt;p&gt;标准没有在一个线程中取消另一个线程的机制. 实现这一目标的最好方法是提供两个线程都支持的某种通信机制. 最简单的机制是有一个共享变量, 目标线程定期检查这个变量, 判断是否应该终止. 其他线程可以设置这个共享变量, 间接指示线程关闭. 应避免读写这个共享变量带来的竞争条件和缓存一致性问题.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-3"&gt;&#10;&lt;h3 id="headline-9"&gt;&#10;从线程获得结果&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-3"&gt;&#10;&lt;p&gt;通过 &lt;code class="verbatim"&gt;future&lt;/code&gt; 能够方便地从线程获得结果, 也能方便地处理线程中发生的错误.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-10" class="outline-3"&gt;&#10;&lt;h3 id="headline-10"&gt;&#10;复制和重新抛出异常&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-10" class="outline-text-3"&gt;&#10;&lt;p&gt;每个线程都可以抛出自己的异常, 但它们必须在自己的线程内捕获异常. 一个线程抛出的异常不能在另一个线程中捕获. 使用 &lt;code class="verbatim"&gt;future&lt;/code&gt; 可以自动在线程之间传递异常.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>C++ - Polymorphism</title><link>https://shakaxi.github.io/posts/cpp_polymorphism/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/cpp_polymorphism/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;简介&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;strong&gt;多态&lt;/strong&gt; 是C++语言的一大特色。一个操作随着所传递或捆绑的对象类型的不同能够做出不同的反应，其行为模式称为多态&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;。而且，仅仅对于对象的指针和引用的间接访问，才会发生多态。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;虚函数&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;在使用类的C++语言中，抽象编程需要使用 &lt;strong&gt;虚函数&lt;/strong&gt; 机制。基类与派生类的同名操作，只要标记上 &lt;strong&gt;virtual&lt;/strong&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-2" href="#footnote-2"&gt;2&lt;/a&gt;&lt;/sup&gt; ，则该操作（虚函数）便具有多态性。一旦标记基类的函数为虚函数，便有连锁反应，后面继承的类中一切同名成员函数都变成了虚函数。这样一来，如果实际对象是基类对象，那么调用的就是基类成员函数；如果实际对象是派生类对象，那么调用的就是派生类成员函数。&lt;/p&gt;&#10;&lt;p&gt;&#10;虚函数仅用于继承结构层次中的基类和派生类。除了基类和派生类的函数名必须相同外，连参数类型、个数和顺序都要相同。也就是说，基类和派生类的虚函数不能只是名字重载，而且要一模一样&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-3" href="#footnote-3"&gt;3&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;只有类的成员函数才能声明为虚函数。&lt;/li&gt;&#10;&lt;li&gt;静态成员函数不能是虚函数。&lt;/li&gt;&#10;&lt;li&gt;内联函数不能是虚函数。&lt;/li&gt;&#10;&lt;li&gt;构造函数不能是虚函数。&lt;/li&gt;&#10;&lt;li&gt;析构函数可以是且通常声明为虚函数。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;纯虚函数&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;纯虚函数是指被标明为不具体实现的虚函数。纯虚函数一旦声明，就不用定义。声明形式是在虚函数声明形式后跟“ = 0”。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;抽象类&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;抽象类是指在类定义中至少声明一个纯虚函数的类。抽象类是不允许有实例对象的，即不能由抽象类创建实例对象，其用途只是为了继承。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-2"&gt;&#10;&lt;h2 id="headline-5"&gt;&#10;总结&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-2"&gt;&#10;&lt;p&gt;总之, 要想实现多态, 必须用虚函数(在基类中用关键字virtual). 对于派生类, 必须对虚函数进行实现. 对于基类, 有两个选择: 第一, 实现虚函数; 第二, 将虚函数声明为纯虚函数(相应地, 基类也就变成了抽象类).&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-2"&gt;&#10;&lt;h2 id="headline-6"&gt;&#10;Footnotes&#10;&lt;/h2&gt;&#10;&lt;/div&gt;&#10;&lt;div class="footnotes"&gt;&#10;&lt;hr class="footnotes-separatator"/&gt;&#10;&lt;div class="footnote-definitions"&gt;&#10;&lt;div class="footnote-definition"&gt;&#10;&lt;sup id="footnote-1"&gt;&lt;a href="#footnote-reference-1"&gt;1&lt;/a&gt;&lt;/sup&gt;&#10;&lt;div class="footnote-body"&gt;&#10;&lt;p&gt;钱能，“C++程序设计教程（第二版）”，清华大学出版社，2005年。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="footnote-definition"&gt;&#10;&lt;sup id="footnote-2"&gt;&lt;a href="#footnote-reference-2"&gt;2&lt;/a&gt;&lt;/sup&gt;&#10;&lt;div class="footnote-body"&gt;&#10;&lt;p&gt;虚函数在继承层次结构中总是会自动地从基类传播下去。因此，派生类中的虚函数的标识（virtual）可以省略。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="footnote-definition"&gt;&#10;&lt;sup id="footnote-3"&gt;&lt;a href="#footnote-reference-3"&gt;3&lt;/a&gt;&lt;/sup&gt;&#10;&lt;div class="footnote-body"&gt;&#10;&lt;p&gt;但是返回值可以不同。&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>C++ - 标准库</title><link>https://shakaxi.github.io/posts/cpp_sl/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/cpp_sl/</guid><description>&lt;p&gt;&#10;本文是阅读 &lt;em&gt;Professional C++, third edition&lt;/em&gt; 中文版&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;的读书笔记.&lt;/p&gt;&#10;&lt;p&gt;&#10;C++标准库的核心是泛型容器和泛型算法. 包括&lt;a href="./cpp_stl.html"&gt;标准模板库(Standard Template Library, STL)&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;所有标准库类和函数都在 &lt;code class="verbatim"&gt;std&lt;/code&gt; 名称空间中声明. 包括如下组件:&lt;/p&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&#10;字符串&#10;&lt;/dt&gt;&#10;&lt;dd&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;string&amp;gt;&lt;/code&gt; 中的 &lt;code class="verbatim"&gt;string&lt;/code&gt; 类.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;正则表达式&#10;&lt;/dt&gt;&#10;&lt;dd&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;regex&amp;gt;&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;I/O流&#10;&lt;/dt&gt;&#10;&lt;dd&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;fstream&amp;gt;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;lt;iomanip&amp;gt;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;lt;ios&amp;gt;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;lt;iosfwd&amp;gt;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;lt;iostream&amp;gt;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;lt;istream&amp;gt;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;lt;ostream&amp;gt;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;lt;sstream&amp;gt;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;lt;streambuf&amp;gt;&lt;/code&gt; 和 &lt;code class="verbatim"&gt;&amp;lt;strstream&amp;gt;&lt;/code&gt; 中.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;智能指针&#10;&lt;/dt&gt;&#10;&lt;dd&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;memory&amp;gt;&lt;/code&gt; 中的 &lt;code class="verbatim"&gt;unique_ptr&lt;/code&gt;, &lt;code class="verbatim"&gt;shared_ptr&lt;/code&gt;, &lt;code class="verbatim"&gt;weak_ptr&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;异常&#10;&lt;/dt&gt;&#10;&lt;dd&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;exception&amp;gt;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;lt;stdexcept&amp;gt;&lt;/code&gt; 和 &lt;code class="verbatim"&gt;&amp;lt;system_error&amp;gt;&lt;/code&gt;.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;数学工具&#10;&lt;/dt&gt;&#10;&lt;dd&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;complex&amp;gt;&lt;/code&gt; 中的复数类 &lt;code class="verbatim"&gt;complex&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;ratio&amp;gt;&lt;/code&gt; 中的有理数运算库.&lt;/li&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;valarray&amp;gt;&lt;/code&gt; 中的 &lt;code class="verbatim"&gt;valarray&lt;/code&gt; 类(与 &lt;code class="verbatim"&gt;vector&lt;/code&gt; 类类似, 但是对高性能数值应用做了特别的优化).&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;limits&amp;gt;&lt;/code&gt; 中的 &lt;code class="verbatim"&gt;numeric_limits&lt;/code&gt; 类模板, 如&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;numeric_limits&amp;lt;int&amp;gt;::max()&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;numeric_limits&amp;lt;int&amp;gt;::min()&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;numeric_limits&amp;lt;int&amp;gt;::lowest()&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;numeric_limits&amp;lt;double&amp;gt;::max()&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;numeric_limits&amp;lt;double&amp;gt;::min()&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;numeric_limits&amp;lt;double&amp;gt;::lowest()&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/dd&gt;&#10;&lt;dt&gt;&#10;时间工具&#10;&lt;/dt&gt;&#10;&lt;dd&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;chrono&amp;gt;&lt;/code&gt; 中的 &lt;code class="verbatim"&gt;Chrono&lt;/code&gt; 库.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;随机数&#10;&lt;/dt&gt;&#10;&lt;dd&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;random&amp;gt;&lt;/code&gt; 中的随机数库.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;初始化列表&#10;&lt;/dt&gt;&#10;&lt;dd&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;initializer_list&amp;gt;&lt;/code&gt; 中的初始化列表(用于编写参数数目可变的函数).&lt;/dd&gt;&#10;&lt;dt&gt;&#10;&lt;code class="verbatim"&gt;Pair&lt;/code&gt;&#10;&lt;/dt&gt;&#10;&lt;dd&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;utility&amp;gt;&lt;/code&gt; 中的 &lt;code class="verbatim"&gt;pair&lt;/code&gt; 模板, 用于存储两种不同类型的元素. 这称为存储异构元素. 每个值的类型都应该在编译时确定. C++14添加了一个功能, 允许根据类型使用 &lt;code class="verbatim"&gt;std::get&amp;lt;T&amp;gt;()&lt;/code&gt; 从tuple中提取元素, 其中T是要提取的元素的类型(而不是索引). 创建tuple的另一种方法是使用 &lt;code class="verbatim"&gt;std::make_tuple()&lt;/code&gt; 工具函数. 这个函数只需要实际值, 在编译时会自动推导出类型(所以不能通过 &lt;code class="verbatim"&gt;&amp;amp;&lt;/code&gt; 来指定引用). 如果需要通过 &lt;code class="verbatim"&gt;make_tuple()&lt;/code&gt; 生成一个包含引用或常量引用的tuple, 那么需要分别使用定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;functional&amp;gt;&lt;/code&gt; 中的 &lt;code class="verbatim"&gt;ref()&lt;/code&gt; 和 &lt;code class="verbatim"&gt;cref()&lt;/code&gt;. 通过 &lt;code class="verbatim"&gt;std::tuple_cat()&lt;/code&gt; 可将两个tuple串联为一个tuple.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;&lt;code class="verbatim"&gt;Tuple&lt;/code&gt;&#10;&lt;/dt&gt;&#10;&lt;dd&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;tuple&amp;gt;&lt;/code&gt; 中的 &lt;code class="verbatim"&gt;tuple&lt;/code&gt; 是 &lt;code class="verbatim"&gt;pair&lt;/code&gt; 的一种泛化, 它是固定大小的序列, 元组的元素可以是异构的, 其实例化的元素数目和类型在编译时固定不变.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;函数对象&#10;&lt;/dt&gt;&#10;&lt;dd&gt;实现了函数调用运算符的类的对象称为函数对象. 函数对象可以用作某些STL算法的谓词. 头文件 &lt;code class="verbatim"&gt;&amp;lt;functional&amp;gt;&lt;/code&gt; 定义了一些预定义的函数对象, 支持根据已有的函数对象创建新函数对象.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;多线程&#10;&lt;/dt&gt;&#10;&lt;dd&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;单个线程可以用头文件 &lt;code class="verbatim"&gt;&amp;lt;thread&amp;gt;&lt;/code&gt; 中的 &lt;code class="verbatim"&gt;thread&lt;/code&gt; 类创建.&lt;/li&gt;&#10;&lt;li&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;atomic&amp;gt;&lt;/code&gt; 中的原子性提供了对一段数据的线程安全的原子访问.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;&amp;lt;condition_variable&amp;gt;&lt;/code&gt; 和 &lt;code class="verbatim"&gt;&amp;lt;mutex&amp;gt;&lt;/code&gt; 提供了其他线程同步机制.&lt;/li&gt;&#10;&lt;li&gt;如果只需计算某个数据得到结果, 并具有相应的异常处理, 使用定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;future&amp;gt;&lt;/code&gt; 中的 &lt;code class="verbatim"&gt;async&lt;/code&gt; 和 &lt;code class="verbatim"&gt;future&lt;/code&gt; 要比直接使用 &lt;code class="verbatim"&gt;thread&lt;/code&gt; 类更容易.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/dd&gt;&#10;&lt;dt&gt;&#10;类型特质&#10;&lt;/dt&gt;&#10;&lt;dd&gt;定义在头文件 &lt;code class="verbatim"&gt;&amp;lt;type_traits&amp;gt;&lt;/code&gt; 中的类型特质提供了编译期间的类型信息. 编写高级模板时可以使用它.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Footnotes&#10;&lt;/h2&gt;&#10;&lt;/div&gt;&#10;&lt;div class="footnotes"&gt;&#10;&lt;hr class="footnotes-separatator"/&gt;&#10;&lt;div class="footnote-definitions"&gt;&#10;&lt;div class="footnote-definition"&gt;&#10;&lt;sup id="footnote-1"&gt;&lt;a href="#footnote-reference-1"&gt;1&lt;/a&gt;&lt;/sup&gt;&#10;&lt;div class="footnote-body"&gt;&#10;&lt;p&gt;Marc Gregoire著, 张永强译. C++高级编程(第3版), 清华大学出版社, 2015.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Convex Optimization</title><link>https://shakaxi.github.io/posts/cvx_opt/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/cvx_opt/</guid><description>&lt;p&gt;&#10;A mathematical optimization problem can be expressed as&lt;/p&gt;&#10;\begin{align*}&#10;\min &amp;amp; f_0(x) \\&#10;\text{subject to} &amp;amp; f_i(x) \le b_i, \quad i=1, \ldots, m&#10;\end{align*}&#10;&lt;p&gt;where&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;$x = (x_1, \ldots, x_n)$ are &lt;em&gt;optimization variables&lt;/em&gt;.&lt;/li&gt;&#10;&lt;li&gt;$f_0: \mathbf{R}^n \to \mathbf{R}$ is &lt;em&gt;objective function&lt;/em&gt;.&lt;/li&gt;&#10;&lt;li&gt;$f_i: \mathbf{R}^n \to \mathbf{R}, i=1, \ldots, m$ are &lt;em&gt;constraints functions&lt;/em&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Optimal solution $x^\star$ has the smallest value of $f_0$ among all vectors that satisfy the constraints.&lt;/p&gt;&#10;&lt;p&gt;&#10;In fact, a general optimization problem is very difficult to solve. Its solution cannot always be found. Even though it can, it suffers some compromise, e.g. very long computation time.&lt;/p&gt;</description></item><item><title>DOT</title><link>https://shakaxi.github.io/posts/dot/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/dot/</guid><description>&lt;p&gt;&#10;&lt;em&gt;DOT&lt;/em&gt; &lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt; is a language for drawing graphs. It has three main kinds of objects, &lt;code class="verbatim"&gt;graph&lt;/code&gt;, &lt;code class="verbatim"&gt;node&lt;/code&gt; and &lt;code class="verbatim"&gt;edge&lt;/code&gt;. Each object has a variety of attributes. Given a &lt;code class="verbatim"&gt;node&lt;/code&gt; or &lt;code class="verbatim"&gt;edge&lt;/code&gt;, its attribute(s) can be set as below respectively&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NODE_NAME &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;&lt;span style="color:#953800"&gt;ATTRIBUTE1&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;VALUE1, &lt;span style="color:#953800"&gt;ATTRIBUTE2&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;VALUE2, ...&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NODE_NAME1 -&amp;gt; NODE_NAME2 &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;&lt;span style="color:#953800"&gt;ATTRIBUTE1&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;VALUE1, &lt;span style="color:#953800"&gt;ATTRIBUTE2&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;VALUE2, ...&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;And the default values can be specified as below. And they will take effect afterwards.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;node &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;&lt;span style="color:#953800"&gt;ATTRIBUTE1&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;VALUE1, &lt;span style="color:#953800"&gt;ATTRIBUTE2&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;VALUE2, ...&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;edge &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;&lt;span style="color:#953800"&gt;ATTRIBUTE1&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;VALUE1, &lt;span style="color:#953800"&gt;ATTRIBUTE2&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;VALUE2, ...&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;graph&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;A graph can be directed or undirected, corresponding to &lt;code class="verbatim"&gt;digraph&lt;/code&gt; and &lt;code class="verbatim"&gt;graph&lt;/code&gt;, respectively. Within a graph, a &lt;code class="verbatim"&gt;subgraph&lt;/code&gt; can be defined as a subset of nodes and edges.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;rankdir&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;TB&lt;/code&gt;: from top to bottom (default value)&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;BT&lt;/code&gt;: from bottom to top&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;LR&lt;/code&gt;: from left to right&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;RL&lt;/code&gt;: from right to left&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;size&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;size&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;x,y&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;ratio&#10;&lt;/h3&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;rotate&#10;&lt;/h3&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;nodesep&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;p&gt;Separation between nodes of the same rank in inches.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-3"&gt;&#10;&lt;h3 id="headline-7"&gt;&#10;ranksep&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-3"&gt;&#10;&lt;p&gt;Separation between ranks in inches.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - Basic Configuration</title><link>https://shakaxi.github.io/posts/emacs_config/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_config/</guid><description>&lt;p&gt;&#10;As is well-known, &lt;a href="http://www.gnu.org/software/emacs"&gt;Emacs&lt;/a&gt; is a powerful editor. Due to its infinite customizability and extensibility, in some sense, it is an operation system (OS) rather than an editor. This page briefly introduces how to customize it.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Set values for predefined variables&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;variable&lt;/span&gt; &lt;span style="color:#953800"&gt;value&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Bind shortcut keys&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Set global shortcut key&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;global-set-key&lt;/span&gt; &lt;span style="color:#953800"&gt;key&lt;/span&gt; &lt;span style="color:#953800"&gt;command&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;where &lt;code class="verbatim"&gt;key&lt;/code&gt; is shortcut&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;, e.g. &lt;code class="verbatim"&gt;M-SPC&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;lt;f7&amp;gt;&lt;/code&gt;, and &lt;code class="verbatim"&gt;command&lt;/code&gt; is the command name with a prefix of single quotation mark.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Set shortcut key for specific modes&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;define-key&lt;/span&gt; &lt;span style="color:#953800"&gt;keymap&lt;/span&gt; &lt;span style="color:#953800"&gt;key&lt;/span&gt; &lt;span style="color:#953800"&gt;command&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;where &lt;code class="verbatim"&gt;keymap&lt;/code&gt; is associated to some mode, e.g. &lt;code class="verbatim"&gt;c-mode-map&lt;/code&gt;. Usually, each mode has its own keymap, which is the mode name appended with &lt;code class="verbatim"&gt;-map&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - C/C++ Programming</title><link>https://shakaxi.github.io/posts/emacs_cpp/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_cpp/</guid><description>&lt;p&gt;&#10;This page is written to summarize my configuration for C/C++ programming with Emacs.&lt;/p&gt;&#10;&lt;p&gt;&#10;Besides Emacs, following extensions are also needed. The installation can be finished by the built-in package manager, &lt;code class="verbatim"&gt;elpa&lt;/code&gt;. Before the installation, following configuration in &lt;code class="verbatim"&gt;~/.emacs&lt;/code&gt; for &lt;code class="verbatim"&gt;elpa&lt;/code&gt; is necessary.&lt;/p&gt;&#10;&lt;div class="src src-elisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-elisp" data-lang="elisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;package-archives&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;gnu&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;http://elpa.gnu.org/packages/&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;melpa&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;http://melpa.milkbox.net/packages/&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;package-initialize&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Through &lt;code class="verbatim"&gt;elpa&lt;/code&gt;, install following extensions.&lt;/p&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&#10;company&#10;&lt;/dt&gt;&#10;&lt;dd&gt;It represents &lt;em&gt;complete anything&lt;/em&gt;. Just as its name implies, it is used for completion. It is similar to &lt;code class="verbatim"&gt;auto-complete&lt;/code&gt;, but I prefer company. In order to enable automatical completion in C/C++ programming, I use &lt;code class="verbatim"&gt;clang&lt;/code&gt; &lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt; as backend in lieu of &lt;code class="verbatim"&gt;semantic&lt;/code&gt;, since semantic-based completion is too slow. However, as long as company is installed, semantic is already built-in, a.k.a. company-semantic. Moreover, it precedes clang-based backend. To deal with the problem, we remove semantic from the list of backend for company.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;div class="src src-elisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-elisp" data-lang="elisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;global-company-mode&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;company-idle-delay&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;company-backends&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;delete&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;company-semantic&lt;/span&gt; &lt;span style="color:#953800"&gt;company-backends&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-to-list&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;company-backends&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;company-c-headers&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;BTW, for sake of completion based on other third-party libraries, we can create an elisp file &lt;code class="verbatim"&gt;.dir-locals.el&lt;/code&gt; in the project root. E.g. &lt;em&gt;ITPP&lt;/em&gt; library installed in &lt;code class="verbatim"&gt;/opt/itpp&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Emacs - CDLaTeX</title><link>https://shakaxi.github.io/posts/emacs_cdlatex/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_cdlatex/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;CDLaTeX&lt;/code&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt; is a minor mode for fast LaTeX environment and macro insertion&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-2" href="#footnote-2"&gt;2&lt;/a&gt;&lt;/sup&gt;. In this sense, its functionalities are very similar to &lt;code class="verbatim"&gt;AUCTeX&lt;/code&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-3" href="#footnote-3"&gt;3&lt;/a&gt;&lt;/sup&gt;. What&amp;#39;s more, some of its convenience provided are also covered by &lt;code class="verbatim"&gt;AUCTeX&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;The package of &lt;code class="verbatim"&gt;cdlatex&lt;/code&gt; is available at &lt;code class="verbatim"&gt;melpa&lt;/code&gt;, which can be easily installed.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;p&gt;If &lt;code class="verbatim"&gt;AUCTeX&lt;/code&gt; is installed, &lt;code class="verbatim"&gt;CDLaTeX&lt;/code&gt; can be activated on top of it via&lt;/p&gt;&#10;&lt;div class="src src-emacs"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs" data-lang="emacs"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;LaTeX-mode-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;turn-on-cdlatex&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Otherwise, &lt;code class="verbatim"&gt;CDLaTeX&lt;/code&gt; can be directly turned on with latex mode, i.e.,&lt;/p&gt;&#10;&lt;div class="src src-emacs"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs" data-lang="emacs"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;latex-mode-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;turn-on-cdlatex&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Org&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;In &lt;code class="verbatim"&gt;org&lt;/code&gt; mode, instead of &lt;code class="verbatim"&gt;CDLaTeX&lt;/code&gt; itself, its light version &lt;code class="verbatim"&gt;org-cdlatex-mode&lt;/code&gt; should be used, which depends on &lt;code class="verbatim"&gt;cdlatex.el&lt;/code&gt; (in package &lt;code class="verbatim"&gt;CDLaTeX&lt;/code&gt;) and &lt;code class="verbatim"&gt;texmathp&lt;/code&gt; (in package &lt;code class="verbatim"&gt;AUCTeX&lt;/code&gt;). To automatically turn it on in a &lt;code class="verbatim"&gt;org&lt;/code&gt; file, add the following line in the emacs configuration file, e.g., &lt;code class="verbatim"&gt;~/init.el&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-emacs"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs" data-lang="emacs"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;org-mode-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;turn-on-org-cdlatex&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - CEDET</title><link>https://shakaxi.github.io/posts/emacs_cedet/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_cedet/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;CEDET&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt; stands for collection of Emacs development environment tools, which is written to make Emacs become a perfect development environment. With the aid of CEDET, a variety of amazing features can be provided, e.g. code completion, browsing, tag jumping, drawing UML diagram, etc.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;Through following commands, the latest version of CEDET can be installed into &lt;code class="verbatim"&gt;~/.emacs.d/cedet&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;cd&lt;/span&gt; ~/.emacs.d&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone http://git.code.sf.net/p/cedet/git cedet&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;;; load CEDET&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-to-list&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;load-path&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;~/.emacs.d/cedet&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;load-file&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;~/.emacs.d/cedet/cedet-devel-load.el&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;;; enable the required features&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;semantic-load-enable-minimum-features&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;semantic-load-enable-code-helpers&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;semantic-load-enable-gaudy-code-helpers&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;semantic-load-enable-excessive-code-helpers&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;semantic-load-enable-semantic-debugging-helpers&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-to-list&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic-default-submodes&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;global-semantic-idle-summary-mode&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-to-list&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic-default-submodes&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;global-semantic-idle-completions-mode&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-to-list&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic-default-submodes&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;global-cedet-m3-minor-mode&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-to-list&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic-default-submodes&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;global-semanticdb-minor-mode&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-to-list&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic-default-submodes&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;global-semantic-idle-scheduler-mode&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-to-list&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic-default-submodes&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;global-semantic-decoration-mode&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-to-list&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic-default-submodes&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;global-semantic-show-unmatched-syntax-mode&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-to-list&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic-default-submodes&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;global-semantic-show-parser-state-mode&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-to-list&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic-default-submodes&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;global-semantic-highlight-edits-mode&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-to-list&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic-default-submodes&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;global-semantic-highlight-func-mode&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;;; enable semantic mode&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;semantic-mode&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;;; enable semantic to access and parse the headers of system libaries, e.g. /usr/include, /usr/local/include, /opt/itpp/include.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;semantic-c-dependency-system-include-path&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;quote&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;/usr/include&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/usr/local/include&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/opt/itpp/include&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;require&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic/ia&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;require&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic/bovine/gcc&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;;; jump to tags&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;global-set-key&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;kbd&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;M-.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic-ia-fast-jump&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;;; jump back from tags&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;global-set-key&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;kbd&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;M-*&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semantic-mrub-switch-tags&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-2"&gt;&#10;&lt;h2 id="headline-4"&gt;&#10;Footnotes&#10;&lt;/h2&gt;&#10;&lt;/div&gt;&#10;&lt;div class="footnotes"&gt;&#10;&lt;hr class="footnotes-separatator"/&gt;&#10;&lt;div class="footnote-definitions"&gt;&#10;&lt;div class="footnote-definition"&gt;&#10;&lt;sup id="footnote-1"&gt;&lt;a href="#footnote-reference-1"&gt;1&lt;/a&gt;&lt;/sup&gt;&#10;&lt;div class="footnote-body"&gt;&#10;&lt;p&gt;&lt;a href="http://cedet.sourceforge.net/"&gt;http://cedet.sourceforge.net/&lt;/a&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - Company</title><link>https://shakaxi.github.io/posts/emacs_company/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_company/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;em&gt;Auto-completion&lt;/em&gt; is an important functionality in Emacs. It can greatly speed up our editing and programming. Generally speaking, the auto-completion can be divided into two parts, &lt;em&gt;frontend&lt;/em&gt; and &lt;em&gt;backend&lt;/em&gt;. As their names indicate, the former presents interface, while the latter provides contents. In a nutshell, the backend generates completion contents and feeds them to the frontend; then the frontend presents completion candidates to us for selection.&lt;/p&gt;&#10;&lt;p&gt;&#10;Up to now, there are a couple of popular frontends, &lt;code class="verbatim"&gt;auto-complete&lt;/code&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt; and &lt;code class="verbatim"&gt;company&lt;/code&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-2" href="#footnote-2"&gt;2&lt;/a&gt;&lt;/sup&gt;. The word &amp;#34;company&amp;#34; stands for &amp;#34;complete anything&amp;#34;. In fact, their functionalities are very similar. Both of them work well and their developments are fairly active. Both of them come with a variety of built-in backends. What&amp;#39;s more, you can customize your own backends for your special requirements.&lt;/p&gt;&#10;&lt;p&gt;&#10;It should be noticed that each of the both above provides backend for C/C++ programming, e.g. &lt;code class="verbatim"&gt;company-clang&lt;/code&gt; is a powerful backend based on &lt;code class="verbatim"&gt;clang&lt;/code&gt;. It enables company completing based on the semantic analysis provided by clang. With the aid of this backend, the programming experience and efficiency can be remarkably improved.&lt;/p&gt;&#10;&lt;p&gt;&#10;For myself, I have been using company since I began to use Emacs. Therefore, I just summarize the installation and configuration of company in this post.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - Flycheck</title><link>https://shakaxi.github.io/posts/emacs_flycheck/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_flycheck/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;em&gt;Flycheck&lt;/em&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt; is a on-the-fly syntax checking extension of Emacs, which supports a variety number of programming languages. It greatly facilitates the programming experience.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;Flycheck can be directly installed via &lt;em&gt;ELPA&lt;/em&gt;.&lt;/p&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;M-x&lt;/span&gt; &lt;span style="color:#953800"&gt;package-install&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;flycheck&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;;; Enable global flycheck mode&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;after-init-hook&lt;/span&gt; &lt;span style="color:#6639ba"&gt;#&amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;global-flycheck-mode&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;;; Clang support (C++14)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;flycheck-clang-language-standard&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;c++14&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;;; Elpy support (use flycheck instead of flymake)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;elpy-modules&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;delete&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;elpy-module-flymake&lt;/span&gt; &lt;span style="color:#953800"&gt;elpy-modules&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;elpy-mode-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;flycheck-mode&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-2"&gt;&#10;&lt;h2 id="headline-4"&gt;&#10;Footnotes&#10;&lt;/h2&gt;&#10;&lt;/div&gt;&#10;&lt;div class="footnotes"&gt;&#10;&lt;hr class="footnotes-separatator"/&gt;&#10;&lt;div class="footnote-definitions"&gt;&#10;&lt;div class="footnote-definition"&gt;&#10;&lt;sup id="footnote-1"&gt;&lt;a href="#footnote-reference-1"&gt;1&lt;/a&gt;&lt;/sup&gt;&#10;&lt;div class="footnote-body"&gt;&#10;&lt;p&gt;&lt;a href="http://www.flycheck.org/"&gt;http://www.flycheck.org/&lt;/a&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - Helm</title><link>https://shakaxi.github.io/posts/emacs_helm/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_helm/</guid><description>&lt;p&gt;&#10;&lt;em&gt;Helm&lt;/em&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt; is a framework to narrow selection. It can be installed by ELPA&lt;/p&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;M-x&lt;/span&gt; &lt;span style="color:#953800"&gt;package-install&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;helm&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;After that, it should be configured accordingly. Without loss of generality, following configurations can be used.&lt;/p&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;require&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;helm-config&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;helm-mode&lt;/span&gt; &lt;span style="color:#0550ae"&gt;1&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;define-key&lt;/span&gt; &lt;span style="color:#953800"&gt;global-map&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#953800"&gt;remap&lt;/span&gt; &lt;span style="color:#953800"&gt;find-file&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;helm-find-files&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;define-key&lt;/span&gt; &lt;span style="color:#953800"&gt;global-map&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#953800"&gt;remap&lt;/span&gt; &lt;span style="color:#953800"&gt;occur&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;helm-occur&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;define-key&lt;/span&gt; &lt;span style="color:#953800"&gt;global-map&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#953800"&gt;remap&lt;/span&gt; &lt;span style="color:#953800"&gt;list-buffers&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;helm-buffers-list&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;define-key&lt;/span&gt; &lt;span style="color:#953800"&gt;global-map&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#953800"&gt;remap&lt;/span&gt; &lt;span style="color:#953800"&gt;dabbrev-expand&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;helm-dabbrev&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;define-key&lt;/span&gt; &lt;span style="color:#953800"&gt;global-map&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#953800"&gt;remap&lt;/span&gt; &lt;span style="color:#953800"&gt;switch-to-buffer&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;helm-mini&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;define-key&lt;/span&gt; &lt;span style="color:#953800"&gt;global-map&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#953800"&gt;remap&lt;/span&gt; &lt;span style="color:#953800"&gt;yank-pop&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;helm-show-kill-ring&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;define-key&lt;/span&gt; &lt;span style="color:#953800"&gt;global-map&lt;/span&gt; &lt;span style="color:#1f2328"&gt;[&lt;/span&gt;&lt;span style="color:#953800"&gt;remap&lt;/span&gt; &lt;span style="color:#953800"&gt;execute-extended-command&lt;/span&gt;&lt;span style="color:#1f2328"&gt;]&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;helm-M-x&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;;; fuzzy match&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;helm-M-x-fuzzy-match&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;helm-buffers-fuzzy-matching&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;helm-recentf-fuzzy-match&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;;; follow mode&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;helm-follow-mode-persistent&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Alternatively, package &lt;code class="verbatim"&gt;helm-ag&lt;/code&gt; can be installed to accelerate the match, which is a &lt;code class="verbatim"&gt;the-silver-searcher&lt;/code&gt;-based multithread counterpart of &lt;code class="verbatim"&gt;ack&lt;/code&gt;. &lt;code class="verbatim"&gt;Helm-ag&lt;/code&gt; and &lt;code class="verbatim"&gt;the-silver-searcher&lt;/code&gt; can be installed by&lt;/p&gt;</description></item><item><title>Emacs - Language Server Protocol</title><link>https://shakaxi.github.io/posts/emacs_lsp/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_lsp/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Language server protocol (LSP) offers a uniform specification between a client and a server&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;The Language Server protocol is used between a tool (the client) and a language smartness provider (the server) to integrate features like auto complete, go to definition, find all references and alike into the tool&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;With LSP, different clients and development tools, e.g., integrated development environment (IDE), can share a common server. Taking C/C++ for instance, various clients, e.g., Emacs, Vim, Eclipse, etc. can communicate with a common server with their own clients. For Emacs, its client is enbodied as a mode, &lt;code class="verbatim"&gt;lsp-mode&lt;/code&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-2" href="#footnote-2"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#10;&lt;p&gt;&#10;Maskray has provided a good summary of &lt;code class="verbatim"&gt;cquery&lt;/code&gt; for reference&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-3" href="#footnote-3"&gt;3&lt;/a&gt;&lt;/sup&gt;. This post just records the installation and configuration of LSP for C/C++.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - Movement</title><link>https://shakaxi.github.io/posts/emacs_movement/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_movement/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Character-wise movement&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Key binding&lt;/th&gt;&#10;&lt;th&gt;Purpose&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-f&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move forward by a character&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-b&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move backward by a character&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-p&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move to previous line&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-n&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move to next line&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Word-wise movement&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Key binding&lt;/th&gt;&#10;&lt;th&gt;Purpose&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-f&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move forward by a word&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-b&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move backward by a word&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Line-wise movement&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Key binding&lt;/th&gt;&#10;&lt;th&gt;Purpose&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-a&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move point to the beginning of the line&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-e&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move point to the end of the line&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-m&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move point to the first non-whitespace character on this line&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-2"&gt;&#10;&lt;h2 id="headline-4"&gt;&#10;Sexp-wise movement&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Key binding&lt;/th&gt;&#10;&lt;th&gt;Purpose&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-M-f&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move forward by a s-expression (&lt;em&gt;sexp&lt;/em&gt;)&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-M-b&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move backward by a sexp&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-2"&gt;&#10;&lt;h2 id="headline-5"&gt;&#10;List-wise movement&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Key binding&lt;/th&gt;&#10;&lt;th&gt;Purpose&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-M-p&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move backward to the previous list&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-M-n&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move forward to the next list&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-M-u&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move up out of a list&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-M-d&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move down into a list&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-2"&gt;&#10;&lt;h2 id="headline-6"&gt;&#10;Sentence-wise movement&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Key binding&lt;/th&gt;&#10;&lt;th&gt;Purpose&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-a&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move to the beginning of a sentence&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-e&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move to the end of a sentence&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-2"&gt;&#10;&lt;h2 id="headline-7"&gt;&#10;Paragraph-wise movement&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Key binding&lt;/th&gt;&#10;&lt;th&gt;Purpose&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-{&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move to the beginning of a paragraph&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-}&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move to the end of a paragraph&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-2"&gt;&#10;&lt;h2 id="headline-8"&gt;&#10;Defun-wise movement&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Key binding&lt;/th&gt;&#10;&lt;th&gt;Purpose&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-M-a&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move to the beginning of a defun&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-M-e&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move to the end of a defun&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-2"&gt;&#10;&lt;h2 id="headline-9"&gt;&#10;Page-wise movement&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Key binding&lt;/th&gt;&#10;&lt;th&gt;Purpose&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-x [&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move backward by a page&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-x ]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move forward by a page&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-v&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Scroll down a page&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-v&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Scroll up a page&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-M-v&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Scroll down the other window&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-M-S-v&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Scroll up the other window&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-&amp;lt;&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move to the beginning of the buffer&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-&amp;gt;&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move to the end of the buffer&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - Mu4e</title><link>https://shakaxi.github.io/posts/emacs_mu4e/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_mu4e/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;a href="http://www.djcbsoftware.nl/code/mu/mu4e/index.html"&gt;mu4e&lt;/a&gt; is an excellent mail client for Emacs whereby sending/getting mails can be carried out in Emacs. For an Emacs user, the deep integration gives rise to great convenience and efficiency. This post provides a brief summary for the utilization of mu4e.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Dependencies&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;mu&lt;/code&gt; depends on &lt;a href="http://xapian.org"&gt;xapian&lt;/a&gt; and &lt;a href="http://spruce.sourceforge.net/gmime"&gt;gmime&lt;/a&gt;, which should be installed in advance.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S xapian-core gmime&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;&lt;code class="verbatim"&gt;mu&lt;/code&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone --depth&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#0550ae"&gt;1&lt;/span&gt; git://github.com/djcb/mu.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;cd&lt;/span&gt; mu&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;autoreconf -i&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./configure --prefix&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;/opt/mu&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make install&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ln -s /opt/mu/bin/mu /usr/local/bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;&lt;code class="verbatim"&gt;getmail&lt;/code&gt; and &lt;code class="verbatim"&gt;procmail&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S getmail procmail&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-2"&gt;&#10;&lt;h2 id="headline-6"&gt;&#10;Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-3"&gt;&#10;&lt;h3 id="headline-7"&gt;&#10;&lt;code class="verbatim"&gt;getmailrc&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;retriever&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;type&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; SimplePOP3SSLRetriever&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;server&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; POP_SERVER&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;port&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; PORT_NUM&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;username&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; USER_NAME&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;password&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; PASSWORD&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;destination&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;type&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; MDA_external&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;path&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; /usr/bin/procmail&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;options&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;read_all&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;delete&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#6639ba"&gt;false&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;verbose&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;message_log&lt;/span&gt; &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; &lt;span style="color:#953800"&gt;$HOME&lt;/span&gt;/.Mail/getmail.log&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-3"&gt;&#10;&lt;h3 id="headline-8"&gt;&#10;&lt;code class="verbatim"&gt;~/.procmailrc&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;MAILDIR&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#953800"&gt;$HOME&lt;/span&gt;/.Mail&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;DEFAULT&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#953800"&gt;$MAILDIR&lt;/span&gt;/inbox/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;LOGFILE&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;&lt;span style="color:#953800"&gt;$MAILDIR&lt;/span&gt;/procmail.log&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;VERBOSE&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; :0:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ,* ^&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;To&lt;span style="color:#1f2328"&gt;|&lt;/span&gt;Cc&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;: 3GPP_TSG_RAN_WG1@LIST.ETSI.ORG&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; r1/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; :0:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ,* ^&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;To&lt;span style="color:#1f2328"&gt;|&lt;/span&gt;Cc&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;: 3GPP_TSG_RAN_WG1_NR@LIST.ETSI.ORG&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; r1nr/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; :0:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ,* ^&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;To&lt;span style="color:#1f2328"&gt;|&lt;/span&gt;Cc&lt;span style="color:#0550ae"&gt;)&lt;/span&gt;: 3GPP_TSG_RAN@LIST.ETSI.ORG&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; rp/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-3"&gt;&#10;&lt;h3 id="headline-9"&gt;&#10;&lt;code class="verbatim"&gt;~/.emacs.d/init.el&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-3"&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-to-list&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;load-path&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/opt/mu/share/emacs/site-lisp/mu4e&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;require&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;mu4e&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;require&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;org-mu4e&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#6639ba"&gt;user-full-name&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;NAME&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;user-mail-address&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;EMAIL_ADDRESS&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-compose-signature&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;SIGNATURE&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;mu4e-maildir&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;~/.Mail&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-drafts-folder&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/drafts&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-sent-folder&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/sent&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-trash-folder&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/trash&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;mu4e-headers-fields&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;((&lt;/span&gt;&lt;span style="color:#6639ba"&gt;:human-date&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0550ae"&gt;12&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;:flags&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0550ae"&gt;6&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;:mailing-list&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0550ae"&gt;10&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;:from&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0550ae"&gt;22&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;:thread-subject&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;message-send-mail-function&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;smtpmail-send-it&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;smtpmail-default-smtp-server&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;SMTP_SERVER&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;smtpmail-smtp-server&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;SMTP_SERVER&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;smtpmail-stream-type&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;starttls&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;smtpmail-smtp-service&lt;/span&gt; &lt;span style="color:#953800"&gt;PORT_NUM&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;mu4e-get-mail-command&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;getmail --getmaildir=GETMAIL_CONFIG_DIR -r getmailrc&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;mail-user-agent&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;mu4e-user-agent&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-user-mail-address-list&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;EMAIL_ADDRESS&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-completing-read-function&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;quote&lt;/span&gt; &lt;span style="color:#6639ba"&gt;completing-read&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-confirm-quit&lt;/span&gt; &lt;span style="color:#0550ae"&gt;nil&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-attachment-dir&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;~/Downloads&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-html2text-command&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;w3m -dump -T text/html -M&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-use-fancy-chars&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-view-show-images&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-view-show-addresses&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-update-interval&lt;/span&gt; &lt;span style="color:#0550ae"&gt;180&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;mu4e-change-filenames-when-moving&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;message-kill-buffer-on-exit&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#953800"&gt;org-mu4e-convert-to-html&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-10" class="outline-3"&gt;&#10;&lt;h3 id="headline-10"&gt;&#10;&lt;code class="verbatim"&gt;~/.authinfo&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-10" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;machine SMTP_SERVER login USER password PASSWORD port PORT_NUM&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-11" class="outline-3"&gt;&#10;&lt;h3 id="headline-11"&gt;&#10;Others&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-11" class="outline-text-3"&gt;&#10;&lt;div id="outline-container-headline-12" class="outline-4"&gt;&#10;&lt;h4 id="headline-12"&gt;&#10;Create a maildir&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-12" class="outline-text-4"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkdir .Mail&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-13" class="outline-4"&gt;&#10;&lt;h4 id="headline-13"&gt;&#10;Get the mails&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-13" class="outline-text-4"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;getmail --getmaildir&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;GETMAIL_CONFIG_DIR -r getmailrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-14" class="outline-4"&gt;&#10;&lt;h4 id="headline-14"&gt;&#10;Index the mails&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-14" class="outline-text-4"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mu index --maildir&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;~/.Mail&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-15" class="outline-2"&gt;&#10;&lt;h2 id="headline-15"&gt;&#10;Footnotes&#10;&lt;/h2&gt;&#10;&lt;/div&gt;&#10;&lt;div class="footnotes"&gt;&#10;&lt;hr class="footnotes-separatator"/&gt;&#10;&lt;div class="footnote-definitions"&gt;&#10;&lt;div class="footnote-definition"&gt;&#10;&lt;sup id="footnote-1"&gt;&lt;a href="#footnote-reference-1"&gt;1&lt;/a&gt;&lt;/sup&gt;&#10;&lt;div class="footnote-body"&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;mu4e&lt;/code&gt; is essentially a part of &lt;code class="verbatim"&gt;mu&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - Wanderlust</title><link>https://shakaxi.github.io/posts/emacs_wl/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_wl/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Wanderlust is also a mail client within Emacs. This post aims to summarize the procedure of its installation and configurations.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;Wanderlust can be directly installed via ELPA. APEL, SEMI and FLIM are also installed as dependency.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;p&gt;We postulate that all the mails are stored in &lt;code class="verbatim"&gt;~/.Mail&lt;/code&gt;, in which there are a plurality of Maildir folders, e.g., &lt;code class="verbatim"&gt;draft&lt;/code&gt;, &lt;code class="verbatim"&gt;queue&lt;/code&gt;, &lt;code class="verbatim"&gt;sent&lt;/code&gt;, &lt;code class="verbatim"&gt;trash&lt;/code&gt;, &lt;code class="verbatim"&gt;boc&lt;/code&gt;, &lt;code class="verbatim"&gt;edas&lt;/code&gt;, &lt;code class="verbatim"&gt;home&lt;/code&gt;, &lt;code class="verbatim"&gt;office&lt;/code&gt;, &lt;code class="verbatim"&gt;linkedin&lt;/code&gt;, &lt;code class="verbatim"&gt;r1&lt;/code&gt;, &lt;code class="verbatim"&gt;r1nr&lt;/code&gt;, &lt;code class="verbatim"&gt;rp&lt;/code&gt;. Mails are periodically fetched by getmail or offlineimap, e.g.,&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; */10 * * * * /usr/bin/getmail --new --getmaildir&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;/PATH/TO/GETMAILRC --rcfile&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;GETMAILRC&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;or&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; */10 * * * * /usr/bin/offlineimap -c /PATH/TO/OFFLINEIMAPRC -a ACCOUNT&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;&#10;In this case, following configurations are needed for wanderlust.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;~/.config/emacs/init.el&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;use-package&lt;/span&gt; &lt;span style="color:#953800"&gt;wl&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;:ensure&lt;/span&gt; &lt;span style="color:#953800"&gt;wanderlust&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;:init&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;require&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;mime-w3m&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;autoload&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;wl&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;wl&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Wanderlust&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;autoload&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;wl-other-frame&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;wl&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Wanderlust on new frame.&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;autoload&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;wl-draft&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;wl-draft&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Write draft with Wanderlust.&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;autoload&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;wl-user-agent-compose&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;wl-draft&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;nil&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;:config&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;boundp&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;mail-user-agent&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;mail-user-agent&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;wl-user-agent&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;if&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;fboundp&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;define-mail-user-agent&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;define-mail-user-agent&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;wl-user-agent&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;wl-user-agent-compose&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;wl-draft-send&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;wl-draft-kill&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;mail-send-hook&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#6639ba"&gt;:custom&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-from&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Shaka &amp;lt;shaka@company.com&amp;gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;org-mime-library&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;semi&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-folder-check-async&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-stay-folder-window&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-fcc-force-as-read&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-interactive-exit&lt;/span&gt; &lt;span style="color:#0550ae"&gt;nil&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-insert-message-id&lt;/span&gt; &lt;span style="color:#0550ae"&gt;nil&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-quicksearch-folder&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;[]&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;elmo-search-default-engine&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;notmuch&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;;; Folders&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-folder-desktop-name&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;xi&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-folders-file&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;~/.config/emacs/xi/folders&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;elmo-maildir-folder-path&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;~/.Mail&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;elmo-localdir-folder-path&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;~/.Mail&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-temporary-file-directory&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/tmp&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-default-spec&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-trash-folder&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.trash&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-fcc&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.sent&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-draft-folder&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.draft&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-queue-folder&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.queue&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-summary-auto-refile-skip-marks&lt;/span&gt; &lt;span style="color:#0550ae"&gt;nil&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;;; Auto refile&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-refile-rule-alist&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(((&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;To&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;Cc&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;.*3gpp_tsg_ran@list\\.etsi\\.org.*&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.~/.Mail/rp&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;.*3gpp_tsg_ran_wg1@list\\.etsi\\.org.*&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.~/.Mail/r1&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;.*3gpp_tsg_ran_wg1_nr@list\\.etsi\\.org.*&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.~/.Mail/r1nr&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;From&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;.*personalservice@bank-of-china\\.com.*&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.~/.Mail/boc&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;.*10000bj@189\\.cn.*&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.~/.Mail/telecomm&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;.+@linkedin\\.com.*&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.~/.Mail/linkedin&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;Subject&amp;#34;&lt;/span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;.*EDAS-CFP.*&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.~/.Mail/edas&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;To&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;.*shaka@home\\.com.*&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.~/.Mail/home&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;.*shaka@company\\.com.*&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;.&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.~/.Mail/office&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;;; Send mail with msmtp.&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-draft-send-mail-function&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;wl-draft-send-mail-with-sendmail&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;message-sendmail-envelope-from&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;header&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;mail-envelope-from&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;header&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;mail-specify-envelope-from&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;sendmail-program&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/usr/bin/msmtp&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;;; Appearance&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;mime-header-accept-quoted-encoded-words&lt;/span&gt; &lt;span style="color:#0550ae"&gt;t&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-message-ignored-field-list&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-message-visible-field-list&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;^Subject:&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;^Date:&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;^From:&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;^\\(To\\|Cc\\):&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-summary-width&lt;/span&gt; &lt;span style="color:#0550ae"&gt;100&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-biff-check-folder-list&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;.~/.Mail/home&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;.~/.Mail/office&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;wl-summary-line-format&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;%5(%n%) %3(%T%P%) %15(%f%) %23(%Y-%M-%D(%W) %h:%m%) %t%C%s&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;~/.config/emacs/xi/folders&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;span style="color:#953800"&gt;~/.Mail/home&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;home&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;home{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;span style="color:#953800"&gt;~/.Mail/boc&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;boc&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;span style="color:#953800"&gt;~/.Mail/telecomm&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;telecomm&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;span style="color:#953800"&gt;~/.Mail/linkedin&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;linkedin&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;span style="color:#953800"&gt;~/.Mail/edas&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;edas&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;span style="color:#953800"&gt;~/.Mail/office&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;office&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;office{&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;span style="color:#953800"&gt;~/.Mail/rp&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;rp&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;span style="color:#953800"&gt;~/.Mail/r1&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;r1&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;span style="color:#953800"&gt;~/.Mail/r1nr&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;r1nr&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;span style="color:#953800"&gt;~/.Mail/sent&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;sent&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;span style="color:#953800"&gt;~/.Mail/draft&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;draft&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;.&lt;/span&gt;&lt;span style="color:#953800"&gt;~/.Mail/trash&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;trash&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;#&lt;/span&gt; &lt;span style="color:#953800"&gt;%INBOX:shaka/clear@imap.home.com:143&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;home&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f6f8fa;background-color:#82071e"&gt;#&lt;/span&gt; &lt;span style="color:#953800"&gt;%INBOX:shaka/clear@imap.company.com:993!&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;office&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Emacs - YCMD</title><link>https://shakaxi.github.io/posts/emacs_ycmd/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/emacs_ycmd/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;YouCompleteMe (YCM) is originally a completion framework for VIM&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;, and afterwards splitted into a general server and a client. The general server, namely YCM daemon (YCMD)&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-2" href="#footnote-2"&gt;2&lt;/a&gt;&lt;/sup&gt;, is able to provide interface to a variety of clients beyond VIM, e.g. Emacs. Moreover, both &lt;code class="verbatim"&gt;company&lt;/code&gt; and &lt;code class="verbatim"&gt;auto-complete&lt;/code&gt; can directly utilize what the server/daemon provides.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Emacs packages&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;Install the Emacs packages via ELPA, &lt;code class="verbatim"&gt;ycmd&lt;/code&gt;, &lt;code class="verbatim"&gt;company-ycmd&lt;/code&gt;, &lt;code class="verbatim"&gt;company&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Dependency&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;YCMD&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;p&gt;Install the &lt;code class="verbatim"&gt;YCMD&lt;/code&gt; to &lt;code class="verbatim"&gt;~/.emacs.d/ycmd&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;cd&lt;/span&gt; ~/.emacs.d&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/Valloric/ycmd.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#6639ba"&gt;cd&lt;/span&gt; ycmd&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git submodule update --init --recursive&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./build.py --clang-completer --system-libclang --system-boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;Configurations&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;~/.emacs.d/ycmd/global_config.py&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cp ~/.emacs.d/ycmd/examples/.ycm_extra_conf.py ~/.emacs.d/ycmd/global_config.py&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;After that, customize it to meet your requirements.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;~/.emacs&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;;;; Company&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;after-init-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;global-company-mode&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;setq&lt;/span&gt; &lt;span style="color:#953800"&gt;company-idle-delay&lt;/span&gt; &lt;span style="color:#0550ae"&gt;0&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;company-auctex-init&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;;;; Ycmd&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;add-hook&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;after-init-hook&lt;/span&gt; &lt;span style="color:#6639ba"&gt;#&amp;#39;&lt;/span&gt;&lt;span style="color:#953800"&gt;global-ycmd-mode&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;set-variable&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;ycmd-server-command&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;python2&amp;#34;&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/home/shaka/.emacs.d/ycmd/ycmd&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;))&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;set-variable&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;ycmd-global-config&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#34;/home/shaka/.emacs.d/ycmd/global_config.py&amp;#34;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#953800"&gt;company-ycmd-setup&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>GitLab</title><link>https://shakaxi.github.io/posts/gitlab/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/gitlab/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;a href="http://www.gitlab.com"&gt;Gitlab&lt;/a&gt; is a code management service based on &lt;a href="./git.html"&gt;git&lt;/a&gt;. It is very powerful and suitable to collaborated development within a team.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;Generally speaking, the deployment of gitlab is very difficult since it depends on many compenents, e.g., database, http server, etc. However, there is corresponding docker image of gitlab, which are ready. Consequently, gitlab can be easily deployed via docker. The procedure can be summarized as follows.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl &lt;span style="color:#6639ba"&gt;enable&lt;/span&gt; docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;systemctl start docker&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker pull gitlab/gitlab-ce:latest&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo docker run --detach --hostname localhost --net host --publish 443:443 --publish 80:80 --publish 22:22 --name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab --volume /srv/gitlab/logs:/var/log/gitlab --volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>GRUB</title><link>https://shakaxi.github.io/posts/grub/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/grub/</guid><description>&lt;p&gt;&#10;&lt;em&gt;GRUB&lt;/em&gt; is a powerful bootloader which can boot a variety of operation systems, including Unix, Linux and Windows. It is usually installed in the MBR of a disk. This article presents the method how to repair it if it is corrupted.&lt;/p&gt;&#10;&lt;p&gt;&#10;Above all, open a terminal or switch to a tty, then input commands below step by step:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;type &lt;code class="verbatim"&gt;grub&lt;/code&gt; to enter the interface of GRUB.&lt;/li&gt;&#10;&lt;li&gt;if separate &lt;code class="verbatim"&gt;/boot&lt;/code&gt; partition exists, input &lt;code class="verbatim"&gt;find /grub/stage1&lt;/code&gt;; otherwise, input &lt;code class="verbatim"&gt;find /boot/grub/stage1&lt;/code&gt; instead.&lt;/li&gt;&#10;&lt;li&gt;indicate the location for GRUB installation, &lt;code class="verbatim"&gt;root (hdX, Y)&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;set up GRUB to &lt;code class="verbatim"&gt;hdX&lt;/code&gt; ’s &lt;em&gt;MBR&lt;/em&gt;, &lt;code class="verbatim"&gt;setup (hdX)&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;quit the GRUB program, &lt;code class="verbatim"&gt;quit&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ol&gt;</description></item><item><title>LaTeX - Gantt Chart</title><link>https://shakaxi.github.io/posts/latex_gantt/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/latex_gantt/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Today, I found an interesting $\LaTeX$ package, &lt;em&gt;pgfgantt&lt;/em&gt;. This package provides a &lt;code class="verbatim"&gt;ganttchart&lt;/code&gt; environment and, as its name indicates, can produce &lt;em&gt;Gantt&lt;/em&gt; charts.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Usage&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;The framework of using the package can be illustrated as&lt;/p&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;pgfgantt&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\begin&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;ganttchart&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;[OPTIONS]&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;STARTING&lt;span style="color:#6639ba"&gt;}{&lt;/span&gt;ENDING&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; TITLE&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; CHARTELEMENT&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\end&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;ganttchart&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;where&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;OPTIONS&lt;/code&gt; can be&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;time slot format&lt;/code&gt; with candidates: &lt;code class="verbatim"&gt;simple&lt;/code&gt; / &lt;code class="verbatim"&gt;isodate&lt;/code&gt; / &lt;code class="verbatim"&gt;isodate-yearmonth&lt;/code&gt; / &lt;code class="verbatim"&gt;isodate-year&lt;/code&gt; / &lt;code class="verbatim"&gt;little-endian&lt;/code&gt; / &lt;code class="verbatim"&gt;middle-endian&lt;/code&gt; / &lt;code class="verbatim"&gt;big-endian&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;newline shortcut&lt;/code&gt; can turn &lt;code class="verbatim"&gt;\\&lt;/code&gt; into a new line break, equivalent to &lt;code class="verbatim"&gt;\ganttnewline&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;vgrid&lt;/code&gt; / &lt;code class="verbatim"&gt;hgrid&lt;/code&gt; specifies the presence and appearance of the vertical/horizontal grids.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;today&lt;/code&gt; can indidate the current day/month/year by a vertical rule at the provided time.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;today label&lt;/code&gt; can specify the label for &lt;code class="verbatim"&gt;today&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;inline&lt;/code&gt; can put the labels inside the corresponding bars.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;x unit&lt;/code&gt; / &lt;code class="verbatim"&gt;y unit&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;x unit title&lt;/code&gt; / &lt;code class="verbatim"&gt;y unit title&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;x unit chart&lt;/code&gt; / &lt;code class="verbatim"&gt;y unit chart&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;expand chart&lt;/code&gt; can automatically expand the chart horizontally, e.g., &lt;code class="verbatim"&gt;\textwidth&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;STARTING&lt;/code&gt; is the starting date of the chart.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;ENDING&lt;/code&gt; is the ending date of the chart.&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;TITLE&lt;/code&gt; can be&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\gantttitle[OPTIONS]{LABEL}{NUMBEROFTIMESLOTS}&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\gantttitlelist[OPTIONS]{LABELLIST}{LENGTHOFEACHELEMENT}&lt;/code&gt; defines a series of &lt;code class="verbatim"&gt;\gantttitle&lt;/code&gt; in a batch way.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\gantttitlecalendar[OPTIONS]{CALENDARLINES}&lt;/code&gt; with &lt;code class="verbatim"&gt;CALENDARLINES&lt;/code&gt; a comma-separated list of lines, e.g., &lt;code class="verbatim"&gt;decade&lt;/code&gt;, &lt;code class="verbatim"&gt;year&lt;/code&gt;, &lt;code class="verbatim"&gt;month=name/shortname&lt;/code&gt;, &lt;code class="verbatim"&gt;day&lt;/code&gt;, &lt;code class="verbatim"&gt;week&lt;/code&gt;, &lt;code class="verbatim"&gt;weekday=name/shortname&lt;/code&gt;, etc.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\gantttitlecalendar*[OPTIONS]{STARTING}{ENDING}{CALENDARLINES}&lt;/code&gt; is similar to &lt;code class="verbatim"&gt;\gantttitlecalendar[OPTIONS]{CALENDARLINES}&lt;/code&gt; but constrained to a range defined by &lt;code class="verbatim"&gt;STARTING&lt;/code&gt; and &lt;code class="verbatim"&gt;ENDING&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;CHARTELEMENT&lt;/code&gt; is predefined chart elements as follows.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\ganttgroup[OPTIONS]{LABEL}{STARTING}{ENDING}&lt;/code&gt; combines several subtasks (bars) into a single task.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\ganttbar[OPTIONS]{LABEL}{STARTING}{ENDING}&lt;/code&gt; indicates the duration of a task/subtask.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\ganttmilestone[OPTIONS]{LABEL}{TIME}&lt;/code&gt; signifies a milestone, e.g., the completion of a task.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\ganttlinkedgroup[OPTIONS]{LABEL}{STARTING}{ENDING}&lt;/code&gt; is similar to &lt;code class="verbatim"&gt;\ganttgroup[OPTIONS]{LABEL}{STARTING}{ENDING}&lt;/code&gt; but additionally draws a link from the previous element.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\ganttlinkedbar[OPTIONS]{LABEL}{STARTING}{ENDING}&lt;/code&gt; is similar to &lt;code class="verbatim"&gt;\ganttbar[OPTIONS]{LABEL}{STARTING}{ENDING}&lt;/code&gt; but additionally draws a link from the previous element.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\ganttlinkedmilestone[OPTIONS]{LABEL}{TIME}&lt;/code&gt; is similar to &lt;code class="verbatim"&gt;\ganttmilestone[OPTIONS]{LABEL}{TIME}&lt;/code&gt; but additionally draws a link from the previous element.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;CHARTELEMENT&lt;/code&gt; has an interesting option &lt;code class="verbatim"&gt;progress&lt;/code&gt;, whose value can be &lt;code class="verbatim"&gt;none&lt;/code&gt; / &lt;code class="verbatim"&gt;today&lt;/code&gt; / &lt;code class="verbatim"&gt;PERCENTILE&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>LaTeX - Pgfplots</title><link>https://shakaxi.github.io/posts/latex_pgfplots/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/latex_pgfplots/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;em&gt;Pgfplots&lt;/em&gt; is an excellent &lt;em&gt;LaTeX&lt;/em&gt; package to plot high quality graphs. This post just summaries its basic usages.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;Pgfplots is a built-in package in the &lt;a href="http://tug.org"&gt;texlive&lt;/a&gt;. As long as texlive is ready, pgfplots is out-of-the-box.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Usage&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;p&gt;Pgfplots depends on &lt;a href="./latex_pgf_tikz.html"&gt;pgf/tikz&lt;/a&gt;, and the statements are encapsulated in the environment of &lt;em&gt;tikzpicture&lt;/em&gt;. The basic plot commands are &lt;code class="verbatim"&gt;\addplot&lt;/code&gt; and &lt;code class="verbatim"&gt;\addplot3&lt;/code&gt; for 2D or 3D plot purpose, respectively. It should be noticed that each of them has a variant, i.e. &lt;code class="verbatim"&gt;\addplot+&lt;/code&gt; and &lt;code class="verbatim"&gt;\addplot3+&lt;/code&gt;. &lt;code class="verbatim"&gt;\addplot/\addplot3&lt;/code&gt; uses the provided local options only, while &lt;code class="verbatim"&gt;\addplot+/\addplot3+&lt;/code&gt; adopts both the global and local options.&lt;/p&gt;&#10;&lt;p&gt;&#10;Templates for pgfplots usage can be presented as follows.&lt;/p&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\usepackage&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;pgfplots&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\pgfplotsset&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;GLOBAL-OPTIONS&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% For single curve plot&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\begin&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;tikzpicture&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\begin&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;AXIS-TYPE&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;[AXIS-OPTIONS]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\addplot&lt;/span&gt;/&lt;span style="color:#cf222e"&gt;\addplot&lt;/span&gt;3[PLOT-OPTIONS] &lt;span style="color:#6639ba"&gt;{&lt;/span&gt;FORMULA&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\legend&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;LABEL&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\end&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;AXIS-TYPE&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\end&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;tikzpicture&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#57606a"&gt;% For multi-curve plot&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\begin&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;tikzpicture&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\begin&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;AXIS-TYPE&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;[AXIS-OPTIONS]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\addplot&lt;/span&gt;/&lt;span style="color:#cf222e"&gt;\addplot&lt;/span&gt;3[PLOT-OPTIONS] &lt;span style="color:#6639ba"&gt;{&lt;/span&gt;FORMULA1&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\addlegendentry&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;LABEL1&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\node&lt;/span&gt; at (AXIS-TYPE cs:x1,y1) &lt;span style="color:#6639ba"&gt;{&lt;/span&gt;TEXT&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;; &lt;span style="color:#57606a"&gt;% Annotation for the curve.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\addplot&lt;/span&gt;/&lt;span style="color:#cf222e"&gt;\addplot&lt;/span&gt;3[PLOT-OPTIONS] &lt;span style="color:#6639ba"&gt;{&lt;/span&gt;FORMULA2&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\addlegendentry&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;LABEL2&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\end&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;AXIS-TYPE&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#cf222e"&gt;\end&lt;/span&gt;&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;tikzpicture&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;&lt;code class="verbatim"&gt;AXIS-TYPE&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;The candidate values are &lt;code class="verbatim"&gt;axis/semilogxaxis/semilogyaxis/loglogaxis/polaraxis&lt;/code&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;&lt;code class="verbatim"&gt;FORMULA&lt;/code&gt;&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;plain function&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-2" href="#footnote-2"&gt;2&lt;/a&gt;&lt;/sup&gt;, e.g.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\addplot&lt;/span&gt; &lt;span style="color:#6639ba"&gt;{&lt;/span&gt;f(x)&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;parameter function, e.g.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\addplot&lt;/span&gt; (&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;x(t)&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;, &lt;span style="color:#6639ba"&gt;{&lt;/span&gt;y(t)&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;coordinates, e.g.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\addplot&lt;/span&gt; coordinates&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;(x1, y1)(x2, y2)...(xn, yn)&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;data in a file, e.g.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\addplot&lt;/span&gt; table [x = COLUMN1, y = COLUMN2]&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;DATA-FILE&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;with the content of &lt;code class="verbatim"&gt;DATA-FILE&lt;/code&gt; as below.&lt;/p&gt;&#10;&lt;div class="src src-text"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;COLUMN1 COLUMN2 COLUMN3&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a1 b1 c1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;a2 b2 c2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;... ... ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;shade a region, e.g.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#cf222e"&gt;\addplot&lt;/span&gt; [...] &lt;span style="color:#6639ba"&gt;{&lt;/span&gt;...&lt;span style="color:#6639ba"&gt;}&lt;/span&gt; &lt;span style="color:#cf222e"&gt;\closedcycle&lt;/span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;Options&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;p&gt;&lt;code class="verbatim"&gt;AXIS-OPTIONS&lt;/code&gt; and &lt;code class="verbatim"&gt;PLOT-OPTIONS&lt;/code&gt; are basically the same, and the latter overrides the former.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;title={TITLE}&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;domain=START: END&lt;/code&gt; specifies the range of the variable &lt;code class="verbatim"&gt;x&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;blue/red/brown/green/cyan/magenta/yellow/black/gray/white/darkgray/lightgray/lime/olive/orange/pink/purple/teal/violet&lt;/code&gt; can be mixed by &lt;code class="verbatim"&gt;COLOR1!PERCENTAGE!COLOR2&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;xlabel/ylabel={LABEL}&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;xtick/ytick={START, START+DELTA, ..., END}&lt;/code&gt; separates the ticks between &lt;code class="verbatim"&gt;START&lt;/code&gt; and &lt;code class="verbatim"&gt;END&lt;/code&gt; with step length &lt;code class="verbatim"&gt;DELTA&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;xticklabels/yticklabels={a, b, c, ...}&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;axis equal image&lt;/code&gt; equally scales the axes, and trims the width or height to suit.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;axis lines=box/left/middle/center/right/none&lt;/code&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-3" href="#footnote-3"&gt;3&lt;/a&gt;&lt;/sup&gt; specified the way the axes are drawn, e.g. &lt;code class="verbatim"&gt;middle&lt;/code&gt; make the axes intersect at the origin.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;grid&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;grid style=solid/dashed&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;xmajorgrids/ymajorgrids=true/false&lt;/code&gt; enables/disables grid lines at the tick positions on the x/y axis.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;legend pos=outer north east/north west/north east/south west/south east&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;legend cell align=left/right&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;xmin/xmax/ymin/ymax=BOUND&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;data cs=cart/polar&lt;/code&gt; specifies the coordinate, e.g. &lt;code class="verbatim"&gt;(x, y)&lt;/code&gt; or &lt;code class="verbatim"&gt;(angle, radius)&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;line width=WIDTH&lt;/code&gt;, e.g. &lt;code class="verbatim"&gt;line width=1pt&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;thin/ultra thin/very thin/thick/semithick/ultra thick/very thick&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;solid/dashed/dotted/dashdotted/dashdotdotted&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;customize font size&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-latex"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-latex" data-lang="latex"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;tick label style=&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;font=&lt;span style="color:#cf222e"&gt;\normalsize\small\footnotesize\tiny&lt;/span&gt;&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;label style=&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;font=&lt;span style="color:#cf222e"&gt;\normalsize\small\footnotesize\tiny&lt;/span&gt;&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;legend style=&lt;span style="color:#6639ba"&gt;{&lt;/span&gt;font=&lt;span style="color:#cf222e"&gt;\normalsize\small\footnotesize\tiny&lt;/span&gt;&lt;span style="color:#6639ba"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;samples=SAMPLE_NUMBER&lt;/code&gt; defines the number of points in the &lt;code class="verbatim"&gt;domain&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;smooth&lt;/code&gt; is an alternative to &lt;code class="verbatim"&gt;samples&lt;/code&gt;, which makes a smooth curves between data points.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;mark=*/x/+/|/o/asterisk/star/10-pointed star/oplus/oplus*/otimes/otimes*/square/square*/triangle/triangle*/diamond/halfdiamond*/halfsquare*/right*/left*/halfcircle/halfcircle*/pentagon/pentagon*/cubes&lt;/code&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-4" href="#footnote-4"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;no marks&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;mark repeat=N&lt;/code&gt; marks the data points every &lt;code class="verbatim"&gt;N&lt;/code&gt; ones instead of every one.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;only marks&lt;/code&gt; hides the line joining the data points.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;opacity=FRACTION&lt;/code&gt; makes something not transparent, e.g. &lt;code class="verbatim"&gt;fill opacity=0.6&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;xbar/ybar&lt;/code&gt; for bar plot.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Linux - Customize Console</title><link>https://shakaxi.github.io/posts/console/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/console/</guid><description>&lt;p&gt;&#10;Nowdays, a modern console can display many colors other than black and white. For example, 256-color can be enabled by adding the following entry into &lt;code class="verbatim"&gt;~/.bashrc&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0550ae"&gt;[[&lt;/span&gt; &lt;span style="color:#953800"&gt;$TERM&lt;/span&gt;&lt;span style="color:#0550ae"&gt;==&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;xterm&amp;#34;&lt;/span&gt; &lt;span style="color:#0550ae"&gt;]]&lt;/span&gt; &lt;span style="color:#0550ae"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color:#6639ba"&gt;export&lt;/span&gt; &lt;span style="color:#953800"&gt;TERM&lt;/span&gt;&lt;span style="color:#0550ae"&gt;=&lt;/span&gt;xterm-256color&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Linux - Microcode</title><link>https://shakaxi.github.io/posts/microcode/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/microcode/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;em&gt;Microcode&lt;/em&gt; is a technique that imposes an interpreter between the hardware and the architectural level of a computer. Processor vendors, e.g., Intel and AMD, release updates to the processor microcode for some reasons, e.g., bug fixes, which can be applied by the Linux kernel during boot.&lt;/p&gt;&#10;&lt;p&gt;&#10;For AMD processors, the microcode is covered by package &lt;code class="verbatim"&gt;linux-firmware&lt;/code&gt; which is installed as part of the base system. Therefore, no specific processing is needed. While for Intel processors, it is not the truth. Package &lt;code class="verbatim"&gt;intel-ucode&lt;/code&gt; must be manually installed.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>LTE - D2D</title><link>https://shakaxi.github.io/posts/lte_d2d/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/lte_d2d/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Overview&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;In LTE-Advanced systems, the link for D2D communication is termed &lt;em&gt;sidelink&lt;/em&gt; &lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;. A sidelink carries two physical signals&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;DMRS&lt;/li&gt;&#10;&lt;li&gt;Synchronization signal&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;and four physical channels&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Physical sidelink shared channel (PSSCH)&lt;/li&gt;&#10;&lt;li&gt;Physical sidelink control channel (PSCCH)&lt;/li&gt;&#10;&lt;li&gt;Physical sidelink discovery channel (PSDCH)&lt;/li&gt;&#10;&lt;li&gt;Physical sidelink broadcast channel (PSBCH)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;PSSCH, PSCCH and PSDCH are all on the same antenna port, &lt;code class="verbatim"&gt;R1000&lt;/code&gt;. PSBCH and synchronization signals are on &lt;code class="verbatim"&gt;R1010&lt;/code&gt; and &lt;code class="verbatim"&gt;R1020&lt;/code&gt;, respectively.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Physical channels&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Scrambling&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;The data stream is first scrambled by a random sequence. The scrambling sequence shall be initialized at the beginning of every PSSCH/PSCCH/PSDCH/PSBCH subframe. The corresponding random seeds are&lt;/p&gt;&#10;&lt;dl&gt;&#10;&lt;dt&gt;&#10;PSSCH&#10;&lt;/dt&gt;&#10;&lt;dd&gt;$c_\text{init} = n_\text{ID}^\text{SA} \cdot 2^{14} + n_\text{ssf}^\text{PSSCH} \cdot 2^9 + 510$, where $n_\text{ID}^\text{SA}$ is destination ID which can be obtained from PSDCH.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;PSCCH/PSDCH&#10;&lt;/dt&gt;&#10;&lt;dd&gt;$c_\text{init} = 510$.&lt;/dd&gt;&#10;&lt;dt&gt;&#10;PSBCH&#10;&lt;/dt&gt;&#10;&lt;dd&gt;$c_\text{init} = N_\text{ID}^\text{SL}$.&lt;/dd&gt;&#10;&lt;/dl&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Modulation&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;The scrambled sequence is then modulated as constellation symbols. The modulation schemes for the physical channels are&lt;/p&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Physical channel&lt;/th&gt;&#10;&lt;th&gt;Modulation scheme&lt;/th&gt;&#10;&lt;th class="align-right"&gt;&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;PSSCH&lt;/td&gt;&#10;&lt;td&gt;QPSK/16QAM&lt;/td&gt;&#10;&lt;td class="align-right"&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;PSCCH/PSDCH/PSBCH&lt;/td&gt;&#10;&lt;td&gt;QPSK&lt;/td&gt;&#10;&lt;td class="align-right"&gt;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Layer mapping&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;p&gt;There is only one layer for each physical channel above. Namely, for each physical channel, the single codeword is mapped to a single layer.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;Transform precoding&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-3"&gt;&#10;&lt;p&gt;Similar to uplink transmission, &lt;em&gt;SC-FDMA&lt;/em&gt; is adopted for sidelinks. For the 4 physical channels above, every $M_\text{sc}^\text{PSSCH}$ / $M_\text{sc}^\text{PSCCH}$ / $M_\text{sc}^\text{PSDCH}$ / $M_\text{sc}^\text{PSBCH}$ complex-valued symbols are FFT-processed.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-3"&gt;&#10;&lt;h3 id="headline-7"&gt;&#10;Precoding&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-3"&gt;&#10;&lt;p&gt;As mentioned above, there is only one layer for each physical channel over a sidelink. Therefore, the single layer can be directly mapped to the corresponding antenna port, i.e. &lt;code class="verbatim"&gt;R1000&lt;/code&gt; for PSSCH, and &lt;code class="verbatim"&gt;R1010&lt;/code&gt; for PSCCH/PSDCH/PSBCH.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-3"&gt;&#10;&lt;h3 id="headline-8"&gt;&#10;Mapping to physical resources&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-3"&gt;&#10;&lt;p&gt;The complex symbols are first scaled by $\beta_\text{PSSCH}$ / $\beta_\text{PSCCH}$ / $\beta_\text{PSDCH}$ / $\beta_\text{PSBCH}$ before mapping to the physical resource blocks (PRB&amp;#39;s). The mapping shall be in increasing order of first the index &lt;em&gt;k&lt;/em&gt;, and then the index &lt;em&gt;l&lt;/em&gt;, starting with the first slot in the subframe. Moreover, the PRB&amp;#39;s used for reference signal (RS&amp;#39;s) will be avoided in the mapping. Resource elements in the last SC-FDMA symbol within a subframe shall be counted in the mapping process but not transmitted.&lt;/p&gt;&#10;&lt;p&gt;&#10;Particularly for PSSCH, frequency hopping is supported. The details can be referred to the specification.&lt;/p&gt;&#10;&lt;p&gt;&#10;For PSBCH, the available PRB&amp;#39;s are in the central 6 PRB&amp;#39;s, i.e. 72 subcarriers, as synchronization signals.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>LTE - Discovery Signal</title><link>https://shakaxi.github.io/posts/lte_ds/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/lte_ds/</guid><description>&lt;p&gt;&#10;Just as its name indicates, &lt;em&gt;discovery signal&lt;/em&gt; is transmitted by a cell to be discovered and measured by UE&amp;#39;s. According to the standard&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;, a discovery signal occasion for a cell consists of&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;1~5 consecutive subframes for FDD&lt;/li&gt;&#10;&lt;li&gt;2~5 consecutive subframes for TDD&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Discovery signal is comprised of&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;CRS on antenna port 0 (R0)&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;PSS&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;in the 1st subframe for FDD&lt;/li&gt;&#10;&lt;li&gt;in the 2nd subframe for TDD&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;SSS in the 1st subframe&lt;/li&gt;&#10;&lt;li&gt;NZP CSI-RS in zero or more subframes&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Footnotes&#10;&lt;/h2&gt;&#10;&lt;/div&gt;&#10;&lt;div class="footnotes"&gt;&#10;&lt;hr class="footnotes-separatator"/&gt;&#10;&lt;div class="footnote-definitions"&gt;&#10;&lt;div class="footnote-definition"&gt;&#10;&lt;sup id="footnote-1"&gt;&lt;a href="#footnote-reference-1"&gt;1&lt;/a&gt;&lt;/sup&gt;&#10;&lt;div class="footnote-body"&gt;&#10;&lt;p&gt;Section 6.11A in 3GPP TS36.211&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>LTE - Frequency Domain Location of Carriers</title><link>https://shakaxi.github.io/posts/lte_fc_loc/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/lte_fc_loc/</guid><description>&lt;p&gt;&#10;An LTE carrier, in principle, can be positioned anywhere within the spectrum range. In order to save the time consumption of carrier search for UE&amp;#39;s, it is necessary to introduce additional restrictions on top of the specification.&lt;/p&gt;&#10;&lt;p&gt;&#10;Within each supported frequency band, LTE carriers always exist on a 100 kHz carrier grid/raster, i.e., the center of a carrier frequency can be written as $n \cdot 100$ kHz, where $n$ is an integer.&lt;/p&gt;</description></item><item><title>LTE - Mobility Management</title><link>https://shakaxi.github.io/posts/lte_mobility_mgmt/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/lte_mobility_mgmt/</guid><description>&lt;p&gt;&#10;The most remarkable character of mobile communication, which differs from other communication methods, is its mobility. The mobility can fall into two categories, intra-radio access technology (RAT) and inter-RAT mobility. Just as its name indicates, intra-RAT mobility means that the UE moves within one RAT, while inter-RAT mobility is the case that the UE move from one RAT to another. Namely, the source cell and the destination cell belong to two different RATs. Moreover, according to whether the destination cell operates on the same frequency as the serving cell, intra-RAT mobility can be further divided into intra-frequency and inter-frequency mobility two types.&lt;/p&gt;</description></item><item><title>LTE - PDCCH &amp; EPDCCH</title><link>https://shakaxi.github.io/posts/lte_pdcch_epdcch/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/lte_pdcch_epdcch/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;This post provides a brief summary on &lt;em&gt;physical downlink control channel (PDCCH)&lt;/em&gt; and &lt;em&gt;enhanced physical downlink control channel (EPDCCH)&lt;/em&gt; in long term evolution (LTE). Note the summary is based on the famous book, &lt;em&gt;4G, LTE-Advanced Pro and the Road to 5G&lt;/em&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;PDCCH&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;PDCCH carries &lt;em&gt;downlink control information (DCI)&lt;/em&gt;, e.g. scheduling decisions and power control commands. Since each scheduling message is transmitted on a separate PDCCH, there are multiple simultaneous PDCCH transmission within each cell. From a UE perspective, each UE can receive multiple DCI messages in the same subframe, e.g. it is scheduled simultaneously in uplink and downlink.&lt;/p&gt;&#10;&lt;p&gt;&#10;Different control information can be categorized into different &lt;em&gt;DCI formats&lt;/em&gt;, each of which corresponds with a certain message size&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-2" href="#footnote-2"&gt;2&lt;/a&gt;&lt;/sup&gt; and usage.&lt;/p&gt;&#10;&lt;p&gt;&#10;A DCI payload is first attached with a CRC which is scrambled by a &lt;em&gt;radio network temporary identifier (RNTI)&lt;/em&gt;&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-3" href="#footnote-3"&gt;3&lt;/a&gt;&lt;/sup&gt;, and then coded with a 1/3 tail-biting convolutional code&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-4" href="#footnote-4"&gt;4&lt;/a&gt;&lt;/sup&gt; and rate-matched to fit the amount of resources for PDCCH transmission. After the rate matching, the bit sequence is scrambled by a cell-specific and subframe-specific scrambling sequence to whiten and randomize the inter-cell interference (ICI) before QPSK modulation and mapping to resource elements (RE&amp;#39;s).&lt;/p&gt;&#10;&lt;p&gt;&#10;The mapping of PDCCH is based on a conception of &lt;em&gt;control channel element (CCE)&lt;/em&gt;, which is essentially a simple representation of 9 REG&amp;#39;s, i.e. 36 RE&amp;#39;s. Each PDCCH can take up 1, 2, 4 or 8 CCE&amp;#39;s for link adaptation. The number of CCE&amp;#39;s used for a PDCCH is termed &lt;em&gt;aggregation level&lt;/em&gt;. The number of CCE&amp;#39;s available for PDCCH depends on the size of control region, the cell bandwidth, the number of antenna ports in the downlink, and the resources occupied by PHICH.&lt;/p&gt;&#10;&lt;p&gt;&#10;Since a UE is not signalled about the aggregation level of each PDCCH, it has to blindly decode it. In order to reduce the computational complexity, some restrictions are imposed, e.g. each aggregated CCE can only start with the CCE&amp;#39;s with their indices divisible by its aggregation level.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Machine Learning</title><link>https://shakaxi.github.io/posts/ml/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/ml/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introducation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Machine learning (ML) is a subfield of artificial intelligence (AI).&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Application&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Image processing&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Image tagging&lt;/li&gt;&#10;&lt;li&gt;Optical character recognition (OCR)&lt;/li&gt;&#10;&lt;li&gt;Self-driving cars&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Text analysis&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Spam filtering&lt;/li&gt;&#10;&lt;li&gt;Sentiment analysis&lt;/li&gt;&#10;&lt;li&gt;Information extract&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;Data mining&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;p&gt;Discover patterns and make predictions from data.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Anomaly detection&lt;/li&gt;&#10;&lt;li&gt;Association rules&lt;/li&gt;&#10;&lt;li&gt;Grouping&lt;/li&gt;&#10;&lt;li&gt;Predictions&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-3"&gt;&#10;&lt;h3 id="headline-6"&gt;&#10;Video games &amp;amp; robotics&#10;&lt;/h3&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-2"&gt;&#10;&lt;h2 id="headline-7"&gt;&#10;Algorithms&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;ML algorithms try to solve the same problem: learn to transform every input to the correct output.&lt;/li&gt;&#10;&lt;li&gt;ML algorithms try to make generalizations, and create the simplest hypothesis (with fewest assumptions) that explains most of the training examples.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-3"&gt;&#10;&lt;h3 id="headline-8"&gt;&#10;Categories&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-3"&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-4"&gt;&#10;&lt;h4 id="headline-9"&gt;&#10;Supervised learning&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-4"&gt;&#10;&lt;p&gt;For each training example, the correct output must be provided.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-10" class="outline-4"&gt;&#10;&lt;h4 id="headline-10"&gt;&#10;Unsupervised learning&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-10" class="outline-text-4"&gt;&#10;&lt;p&gt;The training examples but not the desired output are the input.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-11" class="outline-3"&gt;&#10;&lt;h3 id="headline-11"&gt;&#10;Algorithms&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-11" class="outline-text-3"&gt;&#10;&lt;div id="outline-container-headline-12" class="outline-4"&gt;&#10;&lt;h4 id="headline-12"&gt;&#10;Support vector machines (SVM&amp;#39;s)&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-12" class="outline-text-4"&gt;&#10;&lt;p&gt;The model tries to build a set of hyperplanes in a high dimensional space which tries to separate instances of different classes by getting the largest separation between the nearest instances from different classes.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-13" class="outline-4"&gt;&#10;&lt;h4 id="headline-13"&gt;&#10;Probabilistic models&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-13" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The models try to predict the correct response by modeling the problem with a probability distribution, e.g., Naive Bayes classifiers.&lt;/li&gt;&#10;&lt;li&gt;It returns the prediction as well as the corresponding degree of certainty.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-14" class="outline-4"&gt;&#10;&lt;h4 id="headline-14"&gt;&#10;Deep learning&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-14" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;It is based on the artificial neural network models. They try to emulate (in a very simplified way) the way the brain works.&lt;/li&gt;&#10;&lt;li&gt;The network consist of a huge set of interconnected neurons, i.e., the basic processing unit, organized in various layers.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-15" class="outline-3"&gt;&#10;&lt;h3 id="headline-15"&gt;&#10;Feature engineering&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-15" class="outline-text-3"&gt;&#10;&lt;div id="outline-container-headline-16" class="outline-4"&gt;&#10;&lt;h4 id="headline-16"&gt;&#10;Feature extraction&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-16" class="outline-text-4"&gt;&#10;&lt;p&gt;Before fed to the ML algorithms, the raw data should be tranformed into a vector of features.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-17" class="outline-4"&gt;&#10;&lt;h4 id="headline-17"&gt;&#10;Feature selection&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-17" class="outline-text-4"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Score each feature and return only the most valuable ones.&lt;/li&gt;&#10;&lt;li&gt;Do not use huge feature sets.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-18" class="outline-3"&gt;&#10;&lt;h3 id="headline-18"&gt;&#10;Performance metric&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-18" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The instances for training and testing must be disjoint.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Matched Filter</title><link>https://shakaxi.github.io/posts/matched_filter/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/matched_filter/</guid><description>&lt;p&gt;&#10;设时间\([0, T]\)内的观察信号\(r(t)\)为信号\(s(t)\)和噪声\(n(t)\)的叠加，也即&lt;/p&gt;&#10;\begin{align*}&#10; r(t) = s(t) + n(t), \quad t \in [0, T]&#10;\end{align*}&#10;&lt;p&gt;如果要设计一个冲激响应为\(h(t)\)的滤波器，使得其输出在\(t = T\)时的信噪比(signal to noise power ratio, SNR)最大，这样的滤波器称为匹配滤波器(matched filter, MF)。其冲激响应为&lt;/p&gt;&#10;\begin{align*}&#10; h(t) = C s^*(T - t),&#10;\end{align*}&#10;&lt;p&gt;其中，\(C\)为非零常数。&lt;/p&gt;&#10;&lt;p&gt;&#10;证明过程如下:&#10;滤波器在\(t = T\)时的SNR为&lt;/p&gt;&#10;\begin{align*}&#10; \gamma(T) = \frac{\left|\int_{-\infty}^{\infty}S(f)H(f)e^{j2 \pi f T}df\right|^2}&#10; {N_0 \left|\int_{-\infty}^{\infty}H(f)e^{j2 \pi f T}df\right|^2},&#10;\end{align*}&#10;&lt;p&gt;其中，\(S(f)\)和\(H(f)\)分别为\(s(t)\)和\(h(t)\)的Fourier变换，\(N_0\)为噪声的功率谱密度。&lt;/p&gt;&#10;&lt;p&gt;&#10;根据Cauchy-Schwartz不等式有&lt;/p&gt;&#10;\begin{align*}&#10; \gamma(T) &amp;amp;\le \frac{\left|\int_{-\infty}^{\infty}S(f)e^{j2 \pi f T}df\right|^2 \cdot \left|\int_{-\infty}^{\infty}H(f)e^{j2 \pi f T}df\right|^2}&#10; {N_0 \left|\int_{-\infty}^{\infty}H(f)e^{j2 \pi f T}df\right|^2} \\&#10;&amp;amp;= \frac{\left|\int_{-\infty}^{\infty}S(f)e^{j2 \pi f T}df\right|^2}{N_0}&#10;\end{align*}&#10;&lt;p&gt;当且仅当\(H(f) = C S^*(f) e^{-j 2 \pi f T}\)也即\(h(t) = C s^{*}(T - t)\)时等号成立，其中，\(C\)为非零常数。&lt;/p&gt;</description></item><item><title>MATLAB - Figure Data Abstraction</title><link>https://shakaxi.github.io/posts/matlab_fig/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/matlab_fig/</guid><description>&lt;p&gt;&#10;Provided a MATLAB figure file, e.g. &lt;code class="verbatim"&gt;FILE.fig&lt;/code&gt;, the original data can be abstracted by following procedure.&lt;/p&gt;&#10;&lt;div class="src src-matlab"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-matlab" data-lang="matlab"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;open&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#39;FILE.fig&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt; &lt;span style="color:#57606a"&gt;% open the figure file&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fig_handle &lt;span style="color:#1f2328"&gt;=&lt;/span&gt; findall&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;gca&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;line&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt; &lt;span style="color:#57606a"&gt;% get figure handle&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;x &lt;span style="color:#1f2328"&gt;=&lt;/span&gt; get&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;fig_handle&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;xdata&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt; &lt;span style="color:#57606a"&gt;% get data of X-axis&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;y &lt;span style="color:#1f2328"&gt;=&lt;/span&gt; get&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;fig_handle&lt;span style="color:#1f2328"&gt;,&lt;/span&gt; &lt;span style="color:#0a3069"&gt;&amp;#39;ydata&amp;#39;&lt;/span&gt;&lt;span style="color:#1f2328"&gt;);&lt;/span&gt; &lt;span style="color:#57606a"&gt;% get data of Y-axis&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>MATLAB over SSH</title><link>https://shakaxi.github.io/posts/matlab_ssh/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/matlab_ssh/</guid><description>&lt;p&gt;&#10;If MATLAB is installed on a secure shell (&lt;a href="./ssh.html"&gt;SSH&lt;/a&gt;) server, which is avaiable for access, we can run MATLAB remotely through SSH. In this way, MATLAB is running in symbol environment without X display, and the results can be saved in a file for further post-processing. What&amp;#39;s important, MATLAB keeps running after logout (SSH) until the MATLAB script ends or error happens.&lt;/p&gt;&#10;&lt;p&gt;&#10;Running MATLAB remotely can be realized by the command&lt;/p&gt;</description></item><item><title>Mutt</title><link>https://shakaxi.github.io/posts/mutt/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/mutt/</guid><description>&lt;p&gt;&#10;Mutt is a text-based but powerful mail user agent (MUA) in the world of Unix/Linux. Originally, it is nothing but a MUA. However, it can make use of other programs to edit, send and receive mails. For example, it uses vim to edit mails, msmtp to send mails and getmail to receive mails. This is just the philosophy of Unix.&lt;/p&gt;&#10;&lt;p&gt;&#10;In ArchLinux operation system (OS), the mutt package is compiled with interactive mail access protocol (IMAP), post office protocol (POP) 3 and simple message transfer protocol (SMTP) support. In this case, mutt not only can manage mails, but also can send and receive mails. At least for me, it’s the best choice.&lt;/p&gt;</description></item><item><title>Orgmode - Export to HTML5 Slide</title><link>https://shakaxi.github.io/posts/org_ioslide/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/org_ioslide/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;As is well-known, &lt;a href="http://orgmode.org"&gt;orgmode&lt;/a&gt; is a famous major mode of &lt;a href="http://www.gnu.org/software/emacs/"&gt;Emacs&lt;/a&gt;. What deserves notice, it can export org files to a variety of formats, e.g. \LaTeX, pdf, text, freemind.&lt;/p&gt;&#10;&lt;p&gt;&#10;Today, I found an interesting export backend, &lt;code class="verbatim"&gt;ox-ioslide&lt;/code&gt;, whereby org files can be directly exported to html5 slides.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;It can be easily installed via Emacs&amp;#39;s &lt;code class="verbatim"&gt;ELPA&lt;/code&gt; system.&lt;/p&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#953800"&gt;M-x&lt;/span&gt; &lt;span style="color:#953800"&gt;package-install&lt;/span&gt; &lt;span style="color:#953800"&gt;ox-ioslide&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;After that, the backend can be automatically loaded by adding the following line in &lt;code class="verbatim"&gt;.emacs&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div class="src src-emacs-lisp"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-emacs-lisp" data-lang="emacs-lisp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#1f2328"&gt;(&lt;/span&gt;&lt;span style="color:#6639ba"&gt;require&lt;/span&gt; &lt;span style="color:#032f62"&gt;&amp;#39;ox-ioslide&lt;/span&gt;&lt;span style="color:#1f2328"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Orgmode - Link</title><link>https://shakaxi.github.io/posts/org_link/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/org_link/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;a href="http://orgmode.org"&gt;Orgmode&lt;/a&gt; is an extremely powerful tool for get thing done (GTD), project planning, note keeping, etc.&lt;/p&gt;&#10;&lt;p&gt;&#10;Orgmode makes it fairly easy to insert, edit, and reference to a variety types of links.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Format&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;The general format for a link looks like &lt;code class="verbatim"&gt;[[link][description]]&lt;/code&gt; or &lt;code class="verbatim"&gt;[[link]]&lt;/code&gt;. If the description is a file name or URL that points to an image, HTML export will inline the image as a clickable button. If there is no description and the link points to an image, the image will be inlined into the exported HTML file.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-3"&gt;&#10;&lt;h3 id="headline-3"&gt;&#10;Internal links&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-3"&gt;&#10;&lt;p&gt;An internal link is used to mark an object and assign it a number. The marked object can be referenced by links pointing to it. Particularly, links without description appear as the number assigned.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;An entry with the &lt;code class="verbatim"&gt;CUSTOM_ID&lt;/code&gt; property of &lt;code class="verbatim"&gt;my-custom-id&lt;/code&gt; can be referenced to as &lt;code class="verbatim"&gt;[[#my-custom-id]]&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;[[My Target]]&lt;/code&gt; or &lt;code class="verbatim"&gt;[[My Target][Find my target]]&lt;/code&gt; leads to a text search in the current file for the corresponding target &lt;code class="verbatim"&gt;&amp;lt;&amp;lt;My Target&amp;gt;&amp;gt;&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;Targeted links&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;p&gt;File links can contain additional information for more precise jumping, which can be a line number or a search option after a double colon.&lt;/p&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Link&lt;/th&gt;&#10;&lt;th&gt;Target&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[[file:/path/to/filename::9]]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Line 9 of the target file.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[[file:/path/to/filename::My Target]]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Find &lt;code class="verbatim"&gt;&amp;lt;&amp;lt;My Target&amp;gt;&amp;gt;&lt;/code&gt; in the target file.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[[file:/path/to/filename::*My Target]]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Find headline &lt;code class="verbatim"&gt;My Target&lt;/code&gt; in the target file.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[[file:/path/to/filename::#my-custom-id]]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Find entry with the &lt;code class="verbatim"&gt;CUSTOM_ID&lt;/code&gt; property of &lt;code class="verbatim"&gt;my-custom-id&lt;/code&gt;.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;[[file:/path/to/filename::/regexp/]]&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Find regular expression &lt;code class="verbatim"&gt;regexp&lt;/code&gt; in the target file.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Orgmode - Table</title><link>https://shakaxi.github.io/posts/org_tab/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/org_tab/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;a href="http://orgmode.org"&gt;Orgmode&lt;/a&gt; provides a minor mode &lt;em&gt;orgtbl-mode&lt;/em&gt;, which makes table creating and editing extremely easy.&lt;/p&gt;&#10;&lt;p&gt;&#10;Any line with &lt;code class="verbatim"&gt;|&lt;/code&gt; as the first non-whitespace character is treated as a part of a table. &lt;/p&gt;&#10;&lt;p&gt;&#10;The fastest way to create a table is to directly type &lt;code class="verbatim"&gt;|Column1|Column2|Column3&lt;/code&gt; followed by &lt;code class="verbatim"&gt;C-c RET&lt;/code&gt;. Then a 3-column table will be created immediately, with the head of &lt;code class="verbatim"&gt;Column1&lt;/code&gt;, &lt;code class="verbatim"&gt;Column2&lt;/code&gt;, and &lt;code class="verbatim"&gt;Column3&lt;/code&gt; respectively.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Keybinding&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Keybinding&lt;/th&gt;&#10;&lt;th&gt;Functionality&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-c&lt;/code&gt; |&lt;/td&gt;&#10;&lt;td&gt;Convert the active region to a table.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-c SPC&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Clear the current cell.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-c C-c&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Re-align the table.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;TAB&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Re-align the table move to the next column.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;S-TAB&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Re-align the table move to the previous column.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-a&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move the beginning of the current cell, or on to the previous cell.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-e&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move the end of the current cell, or on to the next cell.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;RET&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Re-align the table and move to the next row.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-left/right&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move the current column left/right.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-up/down&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Move the current row up/down.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-S-left&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Kill the current column.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-S-up&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Kill the current row.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-S-right&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Insert a new column to the right.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;M-S-down&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Insert a new row above.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-c -&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Insert a horizontal line below.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-u C-c -&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Insert a horizontal line above.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;C-c +&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;Sum the numbers in the current column, or a active region.&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Alignment and width&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;&amp;lt;l&amp;gt;&lt;/code&gt;, &lt;code class="verbatim"&gt;&amp;lt;r&amp;gt;&lt;/code&gt;, and &lt;code class="verbatim"&gt;&amp;lt;c&amp;gt;&lt;/code&gt; can align the column at point to the left, right, and center respectively.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;&amp;lt;N&amp;gt;&lt;/code&gt; can fix the width of the column at point to &lt;code class="verbatim"&gt;N&lt;/code&gt; characters.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-2"&gt;&#10;&lt;h2 id="headline-4"&gt;&#10;Reference&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-2"&gt;&#10;&lt;table&gt;&#10;&lt;thead&gt;&#10;&lt;tr&gt;&#10;&lt;th&gt;Symbol&lt;/th&gt;&#10;&lt;th&gt;Reference&lt;/th&gt;&#10;&lt;/tr&gt;&#10;&lt;/thead&gt;&#10;&lt;tbody&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;@r&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;r-th row&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;$c&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;c-th column&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;@r$c&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;The cell in r-th row c-th column&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;@r1..@r2&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;The rows from r1 to r2&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&lt;code class="verbatim"&gt;$c1..$c2&lt;/code&gt;&lt;/td&gt;&#10;&lt;td&gt;The columns from c1 to c2&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Orgmode - Tikz</title><link>https://shakaxi.github.io/posts/org_tikz/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/org_tikz/</guid><description>&lt;p&gt;&#10;Tikz/pgf is an excellent LaTeX package to draw pictures. It can be used in Emacs &lt;code class="verbatim"&gt;org mode&lt;/code&gt;. An example can be provided as follows.&lt;/p&gt;&#10;&lt;div class="src src-shell"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ,#+BEGIN_SRC latex :file FILE.png :imagemagick yes :headers &lt;span style="color:#f6f8fa;background-color:#82071e"&gt;&amp;#39;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;(&lt;/span&gt;&lt;span style="color:#0a3069"&gt;&amp;#34;\\usepackage{tikz}&amp;#34;&lt;/span&gt;&lt;span style="color:#0550ae"&gt;)&lt;/span&gt; :fit yes :iminoptions -density &lt;span style="color:#0550ae"&gt;600&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;\b&lt;/span&gt;egin&lt;span style="color:#0550ae"&gt;{&lt;/span&gt;tikzpicture&lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tikz statements&lt;span style="color:#1f2328"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0a3069"&gt;\e&lt;/span&gt;nd&lt;span style="color:#0550ae"&gt;{&lt;/span&gt;tikzpicture&lt;span style="color:#0550ae"&gt;}&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ,#+END_SRC&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Python - Package Management</title><link>https://shakaxi.github.io/posts/python_pkg_mgmt/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/python_pkg_mgmt/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;One of the most charmful characters of Python is its a rich number of packages. Accordingly, package managers emerge, e.g., &lt;code class="verbatim"&gt;pip&lt;/code&gt;, &lt;code class="verbatim"&gt;setuptools&lt;/code&gt;. This post just briefly introduce the usage of &lt;code class="verbatim"&gt;pip&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;In ArchLinux system, &lt;code class="verbatim"&gt;pip&lt;/code&gt; can be easily installed by&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S python-pip&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;As a dependency, &lt;code class="verbatim"&gt;python&lt;/code&gt; will also be installed if it has not yet.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Configuration&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;p&gt;Similar to the package manager of Linux operation systems, &lt;code class="verbatim"&gt;pip&lt;/code&gt; connects with, synchronizes to, and downloads from websites. For the sake of download speed maximization, &lt;code class="verbatim"&gt;pip&lt;/code&gt; is encouraged to visit the nearest mirror site, which can be configured by editing &lt;code class="verbatim"&gt;/etc/pip.conf&lt;/code&gt;, e.g.,&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#0550ae"&gt;[&lt;/span&gt;global&lt;span style="color:#0550ae"&gt;]&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; index-url &lt;span style="color:#0550ae"&gt;=&lt;/span&gt; https://mirrors.163.com/pypi/simple&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Regular Expression</title><link>https://shakaxi.github.io/posts/reg_exp/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/reg_exp/</guid><description>&lt;p&gt;&#10;正则表达式是指用于字符串匹配的一种模式,最早出现于20世纪40年代.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;字符集(字符组) &lt;code class="verbatim"&gt;[]&lt;/code&gt;&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;[0-9]&lt;/code&gt; 可以匹配0到9范围内的任意数字.可以简写为 &lt;code class="verbatim"&gt;\d&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\D&lt;/code&gt; 可以匹配非数字字符.相当于 &lt;code class="verbatim"&gt;[^0-9]&lt;/code&gt; 或 &lt;code class="verbatim"&gt;[^\d]&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\t&lt;/code&gt; 可以匹配水平制表符.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\v&lt;/code&gt; 可以匹配垂直制表符.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\f&lt;/code&gt; 可以匹配换页符.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\n&lt;/code&gt; 可以匹配换行符.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\r&lt;/code&gt; 可以匹配回车符.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\s&lt;/code&gt; 可以匹配空白字符.相当于 &lt;code class="verbatim"&gt;[\t\n\r]&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\S&lt;/code&gt; 可以匹配非空白字符.相当于 &lt;code class="verbatim"&gt;[^\t\n\r]&lt;/code&gt; 或 &lt;code class="verbatim"&gt;[^\s]&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;通配符&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;.&lt;/code&gt; 可以匹配任意字符&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;^&lt;/code&gt; 行起始符.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;$&lt;/code&gt; 行结束符.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\b&lt;/code&gt; 单词边界&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-2" href="#footnote-2"&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;\B&lt;/code&gt; 非单词边界.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;捕获与反向引用&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;可以使用圆括号 &lt;code class="verbatim"&gt;()&lt;/code&gt; 创建捕获分组,之后可以对其进行反向引用,如 &lt;code class="verbatim"&gt;$1&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-2"&gt;&#10;&lt;h2 id="headline-4"&gt;&#10;量词&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;{}&lt;/code&gt; 中的数字表示确切的匹配次数.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;+&lt;/code&gt; 表示一次或者多次.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;?&lt;/code&gt; 表示零次或者一次.&lt;/li&gt;&#10;&lt;li&gt;&lt;code class="verbatim"&gt;*&lt;/code&gt; 表示零次或者多次.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-2"&gt;&#10;&lt;h2 id="headline-5"&gt;&#10;Footnotes&#10;&lt;/h2&gt;&#10;&lt;/div&gt;&#10;&lt;div class="footnotes"&gt;&#10;&lt;hr class="footnotes-separatator"/&gt;&#10;&lt;div class="footnote-definitions"&gt;&#10;&lt;div class="footnote-definition"&gt;&#10;&lt;sup id="footnote-1"&gt;&lt;a href="#footnote-reference-1"&gt;1&lt;/a&gt;&lt;/sup&gt;&#10;&lt;div class="footnote-body"&gt;&#10;&lt;p&gt;某些情况下不能匹配行起始符.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div class="footnote-definition"&gt;&#10;&lt;sup id="footnote-2"&gt;&lt;a href="#footnote-reference-2"&gt;2&lt;/a&gt;&lt;/sup&gt;&#10;&lt;div class="footnote-body"&gt;&#10;&lt;p&gt;在旧语法中,指定单词首尾边界分别使用 &lt;code class="verbatim"&gt;\&amp;lt;&lt;/code&gt; 和 &lt;code class="verbatim"&gt;\&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>SSH</title><link>https://shakaxi.github.io/posts/ssh/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/ssh/</guid><description>&lt;p&gt;&#10;Secure shell (SSH) is the most popular and efficient method for remote access. This post introduces SSH relevant issues, from installation to configuration.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;Take Archlinux for instance here.&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S openssh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Transmission over asymmetrical encryption&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Generate key pair on the client&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh-keygen -t rsa&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Copy the public key to the server&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;scp ~/.ssh/id_rsa.pub USERNAME@SERVER:~/.ssh/authorized_keys&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#57606a"&gt;#or&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh-copy-id -i ~/.ssh/id_rsa.pub USERNAME@SERVER&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-2"&gt;&#10;&lt;h2 id="headline-3"&gt;&#10;Enable &lt;code class="verbatim"&gt;X11 forwarding&lt;/code&gt; to run GUI programs over SSH&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-3"&gt;&#10;&lt;h3 id="headline-4"&gt;&#10;On server&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-3"&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Installation&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pacman -S xorg-xauth&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Configuration&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Add following line in &lt;code class="verbatim"&gt;/etc/ssh/sshd_config&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;X11Forwarding yes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-3"&gt;&#10;&lt;h3 id="headline-5"&gt;&#10;On client&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-3"&gt;&#10;&lt;p&gt;Add following lines in &lt;code class="verbatim"&gt;/etc/ssh/ssh_config&lt;/code&gt;&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ForwardAgent yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ForwardX11 yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ForwardX11Trusted yes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>Virtual Console Switch</title><link>https://shakaxi.github.io/posts/switch_virtual_console/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/switch_virtual_console/</guid><description>&lt;p&gt;&#10;Unix and Linux operation systems (OS) originally provided textual interfaces only, but now, we can already enjoy the perfect graphic experience through their desktop systems, e.g. &lt;em&gt;Gnome&lt;/em&gt;, &lt;em&gt;KDE&lt;/em&gt;, &lt;em&gt;XFCE&lt;/em&gt;. This post only aims to present the methods of switching between textual and graphical interfaces.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Switch from graphical interface to textual interface: press &lt;code class="verbatim"&gt;Ctrl + Alt + Fn&lt;/code&gt;, where &lt;code class="verbatim"&gt;n = 1, 2, ...&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Switch from textual interface to graphical interface: press &lt;code class="verbatim"&gt;Alt + Fm&lt;/code&gt;, where the value of integer &lt;code class="verbatim"&gt;m&lt;/code&gt; is different from OS to OS. For most Linux OS, &lt;code class="verbatim"&gt;m = 7&lt;/code&gt;.&lt;/li&gt;&#10;&lt;li&gt;Switch from textual interface &lt;code class="verbatim"&gt;i&lt;/code&gt; to textual interface &lt;code class="verbatim"&gt;j&lt;/code&gt;: press &lt;code class="verbatim"&gt;Alt + Fj&lt;/code&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Wiener Filter</title><link>https://shakaxi.github.io/posts/wiener_filter/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/wiener_filter/</guid><description>&lt;p&gt;&#10;设观测信号\(x(t)\)为期望信号\(s(t)\)和噪声信号\(n(t)\)的叠加，也即&lt;/p&gt;&#10;\begin{align*}&#10; x(t) = s(t) + n(t).&#10;\end{align*}&#10;&lt;p&gt;其中，\(s(t)\)和\(n(t)\)是宽平稳过程，且相互联合宽平稳，观测信号\(x(t)\)和期望信号\(s(t)\)的自相关函数和互相关函数分别为\(R_x(\tau)\)、\(R_s(\tau)\)和\(R_{sx}(\tau)\)，功率谱密度函数及其互功率谱密度函数分别为\(S_x(f)\)、\(S_s(f)\)和\(S_{sx}(f)\)。&lt;/p&gt;&#10;&lt;p&gt;&#10;如果要设计一个冲激响应为\(h(t)\)的滤波器，使得其输出信号和期望信号\(s(t)\)的均方误差达到最小，这样的滤波器称为Wiener滤波器，又称均方滤波器。其冲激响应\(h(t)\)满足Wiener-Hopf方程。&lt;/p&gt;&#10;\begin{align*}&#10; \int_{-\infty}^{\infty}R_{x}(t - \tau) h^*(\tau)d\tau = R_{sx}(t).&#10;\end{align*}&#10;&lt;p&gt;相应地，其传递函数为&lt;/p&gt;&#10;\begin{align*}&#10; H^*(f) = \frac{S_{sx}(f)}{S_x(f)}.&#10;\end{align*}</description></item><item><title>ZC</title><link>https://shakaxi.github.io/posts/zc/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/zc/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;The &lt;em&gt;Zadoff-Chu (ZC)&lt;/em&gt; sequence&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-1" href="#footnote-1"&gt;1&lt;/a&gt;&lt;/sup&gt; is named after Solomon A. Zadoff and D. C. Chu, which is a constant amplitude zero auto-correlation (CAZAC) sequence&lt;sup class="footnote-reference"&gt;&lt;a id="footnote-reference-2" href="#footnote-2"&gt;2&lt;/a&gt;&lt;/sup&gt; with its cylically shifted versions are zero correlated, i.e. orthogonal to each other. A ZC sequence without cyclic shift is termed a &lt;em&gt;root sequence&lt;/em&gt;, which can be expressed as&lt;/p&gt;&#10;\begin{align*}&#10;x_u(n) = e^{-j\frac{\pi u n (n+1+2q)}{L}}, \quad n = 0, 1, \ldots, L-1,&#10;\end{align*}&#10;&lt;p&gt;where $u$ is the index of the root sequence, $L$ is the length and $q \in \mathbb{Z}$.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>归去来兮辞</title><link>https://shakaxi.github.io/posts/guiqulaixici/</link><pubDate>Sat, 29 Feb 2020 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/guiqulaixici/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;序&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;余家贫，耕植不足以自给。幼稚盈室，瓶无储粟，生生所资，未见其术。亲故多劝余为长吏，脱然有怀，求之靡途。会有四方之事，诸侯以惠爱为德，家叔以余贫苦，遂见用于小邑。于时风波未静，心惮远役，彭泽去家百里，公田之利，足以为酒。故便求之。及少日，眷然有归欤之情。何则？质性自然，非矫厉所得。饥冻虽切，违己交病。尝从人事，皆口腹自役。于是怅然慷慨，深愧平生之志。犹望一稔，当敛裳宵逝。寻程氏妹丧于武昌，情在骏奔，自免去职。仲秋至冬，在官八十余日。因事顺心，命篇曰《归去来兮》。乙巳岁十一月也。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;正文&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;归去来兮，田园将芜胡不归？既自以心为形役，奚惆怅而独悲？悟已往之不谏，知来者之可追。实迷途其未远，觉今是而昨非。舟遥遥以轻飏，风飘飘而吹衣。问征夫以前路，恨晨光之熹微。&lt;/p&gt;&#10;&lt;p&gt;&#10;乃瞻衡宇，载欣载奔。僮仆欢迎，稚子候门。三径就荒，松菊犹存。携幼入室，有酒盈樽。引壶觞以自酌，眄庭柯以怡颜。倚南窗以寄傲，审容膝之易安。园日涉以成趣，门虽设而常关。策扶老以流憩，时矫首而遐观。云无心以出岫，鸟倦飞而知还。景翳翳以将入，抚孤松而盘桓。&lt;/p&gt;&#10;&lt;p&gt;&#10;归去来兮，请息交以绝游。世与我而相违，复驾言兮焉求？悦亲戚之情话，乐琴书以消忧。农人告余以春及，将有事于西畴。或命巾车，或棹孤舟。既窈窕以寻壑，亦崎岖而经丘。木欣欣以向荣，泉涓涓而始流。善万物之得时，感吾生之行休。&lt;/p&gt;&#10;&lt;p&gt;&#10;已矣乎！寓形宇内复几时？曷不委心任去留？胡为乎遑遑欲何之？富贵非吾愿，帝乡不可期。怀良辰以孤往，或植杖而耘耔。登东皋以舒啸，临清流而赋诗。聊乘化以归尽，乐夫天命复奚疑！&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item><item><title>C++ - Thread Pool</title><link>https://shakaxi.github.io/posts/cpp_tp/</link><pubDate>Thu, 19 Dec 2019 00:00:00 +0000</pubDate><guid>https://shakaxi.github.io/posts/cpp_tp/</guid><description>&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;Introduction&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;p&gt;&lt;a href="http://www.sourceforge.net/projects/threadpool"&gt;Threadpool&lt;/a&gt; is a C++ thread pool written by Philipp Henkel based on &lt;a href="http://www.boost.org"&gt;boost&lt;/a&gt; library. It provides a variety of thread pools with easy usage.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-2"&gt;&#10;&lt;h2 id="headline-2"&gt;&#10;Installation&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-2"&gt;&#10;&lt;p&gt;As a prequisite, boost library should be installed in advance, e.g.,&lt;/p&gt;&#10;&lt;div class="src src-sh"&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; pacman -S boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Threadpool consists only of header files, and therefore the building operation is not needed. The only operation is to copy the header file &lt;code class="verbatim"&gt;threadpool.hpp&lt;/code&gt; and folder &lt;code class="verbatim"&gt;threadpool/&lt;/code&gt; to directory &lt;code class="verbatim"&gt;/usr/include/boost&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;</description></item></channel></rss>