<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://dashvvood.github.io/blog/feed.xml" rel="self" type="application/atom+xml" /><link href="https://dashvvood.github.io/blog/" rel="alternate" type="text/html" /><updated>2025-09-21T08:55:03+00:00</updated><id>https://dashvvood.github.io/blog/feed.xml</id><title type="html">Empty Attic</title><subtitle>I consider that a man&apos;s brain originally is like a little empty attic,  and you have to stock it with such furniture as you choose.</subtitle><entry><title type="html">AutoHotkey-Usage</title><link href="https://dashvvood.github.io/blog/2025/09/21/autohotkey-usage.html" rel="alternate" type="text/html" title="AutoHotkey-Usage" /><published>2025-09-21T07:01:00+00:00</published><updated>2025-09-21T07:01:00+00:00</updated><id>https://dashvvood.github.io/blog/2025/09/21/autohotkey-usage</id><content type="html" xml:base="https://dashvvood.github.io/blog/2025/09/21/autohotkey-usage.html"><![CDATA[<script>
  MathJax = {
    tex: {
      inlineMath: [['$', '$'], ['\\(', '\\)']],
      displayMath: [['$$', '$$'], ['\\[', '\\]']],
      processEscapes: true,
      processEnvironments: true
    },
    options: {
      skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre']
    }
  };
</script>

<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js" async=""></script>

<p><a href="https://github.com/AutoHotkey/AutoHotkey">https://github.com/AutoHotkey/AutoHotkey</a></p>

<h2 id="win10-examples">Win10 Examples</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#Requires AutoHotkey v2.0

; 免于挂起：这个热键即使在挂起状态下也能工作
#SuspendExempt True   ; 开启豁免
+XButton1:: {
    Suspend(-1)
    if A_IsSuspended {
        TrayTip "", "AHK 已禁用",  "Mute Icon!"
    } else {
        TrayTip "", "AHK 已启用",  "Mute Iconi" 
    }
    SetTimer () =&gt; TrayTip(), -1024
}
#SuspendExempt False  ; 结束豁免


; Shift + 侧键X2 = 打开任务视图
+XButton2:: {
    Send "#{Tab}"
}


; Shift + 鼠标滚轮向上 = 切换上一个虚拟桌面
+WheelUp:: {
    Send("^#{Left}")
    ToolTip("任务视图已打开")  ; 显示提示
    SetTimer(() =&gt; ToolTip(), -1000)  ; 1秒后移除提示
}

; Shift + 鼠标滚轮向下 = 切换下一个虚拟桌面
+WheelDown:: {
    Send("^#{Right}")
}
</code></pre></div></div>]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">OCR and Anti-OCR</title><link href="https://dashvvood.github.io/blog/2025/09/04/ocr-and-anti-ocr.html" rel="alternate" type="text/html" title="OCR and Anti-OCR" /><published>2025-09-04T04:10:00+00:00</published><updated>2025-09-04T04:10:00+00:00</updated><id>https://dashvvood.github.io/blog/2025/09/04/ocr-and-anti-ocr</id><content type="html" xml:base="https://dashvvood.github.io/blog/2025/09/04/ocr-and-anti-ocr.html"><![CDATA[<script>
  MathJax = {
    tex: {
      inlineMath: [['$', '$'], ['\\(', '\\)']],
      displayMath: [['$$', '$$'], ['\\[', '\\]']],
      processEscapes: true,
      processEnvironments: true
    },
    options: {
      skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre']
    }
  };
</script>

<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js" async=""></script>]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Technical Hodgepodge</title><link href="https://dashvvood.github.io/blog/2025/08/31/technical-hodgepodge.html" rel="alternate" type="text/html" title="Technical Hodgepodge" /><published>2025-08-31T04:00:00+00:00</published><updated>2025-08-31T04:00:00+00:00</updated><id>https://dashvvood.github.io/blog/2025/08/31/technical-hodgepodge</id><content type="html" xml:base="https://dashvvood.github.io/blog/2025/08/31/technical-hodgepodge.html"><![CDATA[<h2 id="linux">Linux</h2>

<h3 id="ssh">ssh</h3>
<p><strong>interactive shell</strong></p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">shopt</span> <span class="nt">-q</span> login_shell <span class="o">&amp;&amp;</span> <span class="nb">echo</span> <span class="s2">"登录式Shell"</span> <span class="o">||</span> <span class="nb">echo</span> <span class="s2">"非登录式Shell"</span>

<span class="c"># solve this, create ~/.bash_profile and insert</span>
<span class="k">if</span> <span class="o">[</span> <span class="nt">-f</span> ~/.bashrc <span class="o">]</span><span class="p">;</span> <span class="k">then
    </span><span class="nb">source</span> ~/.bashrc
<span class="k">fi</span>
</code></pre></div></div>

<p><strong>SSH key-based authentication</strong></p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen <span class="nt">-t</span> ed25519 <span class="nt">-C</span> <span class="s2">"your_email@example.com"</span>

<span class="c"># if use ssh-copy-id</span>
ssh-copy-id <span class="nt">-i</span> ~/.ssh/id_ed25519.pub username@remote_server_ip
<span class="c"># else</span>
<span class="nb">mkdir</span> <span class="nt">-p</span> ~/.ssh
<span class="nb">echo</span> <span class="s2">"&lt;pub key&gt;"</span> <span class="o">&gt;&gt;</span> ~/.ssh/authorized_keys
<span class="nb">chmod </span>600 ~/.ssh/authorized_keys
<span class="c"># endif</span>
</code></pre></div></div>

<h3 id="parallel-zip">Parallel Zip</h3>
<p><strong>pigz</strong>(Parallel Implementation of GZip)
<strong>Install</strong>:</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Debian</span>
<span class="nb">sudo </span>apt <span class="nb">install </span>pigz
<span class="c"># CentOS/RHEL</span>
<span class="nb">sudo </span>yum <span class="nb">install </span>pigz
</code></pre></div></div>
<p><strong>Compress into tar.gz</strong></p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">tar</span> <span class="nt">-cvf</span> - &lt;target&gt; | pigz <span class="nt">-p</span> 8 <span class="o">&gt;</span> output.tar.gz
<span class="nb">tar</span> <span class="nt">--use-compress-program</span><span class="o">=</span><span class="s2">"pigz -p 8"</span> <span class="nt">-cvf</span> output.tar.gz &lt;target&gt;

<span class="c"># pigz supports compression levels (-1 fastest to -9 highest compression):</span>
<span class="nb">tar</span> <span class="nt">-cvf</span> - directory/file | pigz <span class="nt">-9</span> <span class="nt">-p</span> 8 <span class="o">&gt;</span> output.tar.gz  <span class="c"># high compression</span>
</code></pre></div></div>

<p><strong>Decompress tar.gz</strong></p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pigz <span class="nt">-d</span> <span class="nt">-p</span> 8 <span class="nt">-c</span> input.tar.gz | <span class="nb">tar</span> <span class="nt">-xvf</span> -
<span class="nb">tar</span> <span class="nt">--use-compress-program</span><span class="o">=</span><span class="s2">"pigz -d -p 8"</span> <span class="nt">-xvf</span> input.tar.gz
</code></pre></div></div>

<h3 id="offline-machine">Offline Machine</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Online Machine</span>
conda <span class="nb">install</span> <span class="nt">-c</span> conda-forge conda-pack
conda pack <span class="nt">-n</span> my_env <span class="nt">-o</span> my_env.tar.gz
conda pack <span class="nt">-n</span> my_env <span class="nt">-o</span> numpy.tar.gz <span class="nt">--filter</span><span class="o">=</span>numpy 
<span class="c"># Offline</span>
<span class="nb">mkdir</span> <span class="nt">-p</span> /opt/miniconda3/envs/my_env 
<span class="nb">tar</span> <span class="nt">-xzf</span> my_env.tar.gz <span class="nt">-C</span> /opt/miniconda3/envs/my_env
conda activate my_env
</code></pre></div></div>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Online Machine</span>
<span class="c"># Create a new Conda environment named 'offline_env' with Python 3.9</span>
conda create <span class="nt">-n</span> offline_env <span class="nv">python</span><span class="o">=</span>3.9  
<span class="c"># Install numpy and pandas into the environment, but only download packages (no installation)</span>
conda <span class="nb">install</span> <span class="nt">-n</span> offline_env numpy pandas <span class="nt">--download-only</span> <span class="nt">-d</span> ./offline_packages

<span class="c"># pass offline_packages from online machine to offline machine</span>

<span class="c"># Offline Machine</span>
<span class="c"># Create an empty environment named 'my_env' (no internet access)</span>
conda create <span class="nt">-n</span> my_env <span class="nt">--offline</span>  
<span class="c"># Install packages from local .tar.bz2 files</span>
conda <span class="nb">install</span> <span class="nt">-n</span> my_env <span class="nt">--offline</span> <span class="nt">--use-local</span> ./offline_packages/<span class="k">*</span>.tar.bz2
</code></pre></div></div>

<h3 id="document-to-file">Document to file</h3>
<p><a href="https://en.wikipedia.org/wiki/Here_document"><strong>Here Document</strong></a></p>

<p>无内置格式化功能，完全保留文本原貌</p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cat</span> <span class="o">&gt;</span> config.yml <span class="o">&lt;&lt;</span><span class="no">EOF</span><span class="sh">
server:
  port: 8080
  host: </span><span class="nv">$HOSTNAME</span><span class="sh">
</span><span class="no">EOF
</span></code></pre></div></div>

<p><strong>echo</strong></p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo</span> <span class="nt">-e</span> <span class="s2">"Line 1</span><span class="se">\n</span><span class="s2">Line 2</span><span class="se">\t</span><span class="s2">Tabbed"</span> <span class="o">&gt;</span> file.txt <span class="c"># \n换行，\t制表符</span>
</code></pre></div></div>

<h3 id="pipe-viewer-pv">Pipe Viewer (pv)</h3>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 获取进度</span>
<span class="nb">tar</span> <span class="nt">-cf</span> - <span class="nv">$dir</span> | pv <span class="nt">-s</span> <span class="si">$(</span><span class="nb">du</span> <span class="nt">-sb</span> <span class="nv">$dir</span> | <span class="nb">awk</span> <span class="s1">'{print $1}'</span><span class="si">)</span> <span class="o">&gt;</span> <span class="nv">$dir</span>.tar
<span class="nb">tar</span> <span class="nt">-cf</span> - <span class="nv">$dir</span> | pv <span class="nt">-s</span> <span class="si">$(</span><span class="nb">du</span> <span class="nt">-sb</span> <span class="nv">$dir</span> | <span class="nb">awk</span> <span class="s1">'{print $1}'</span><span class="si">)</span> | pigz <span class="nt">-p</span> 8 <span class="o">&gt;</span> <span class="nv">$dir</span>.tar.gz
<span class="c"># -: 代表stdout; pv -s根据文件大小评估进度</span>
</code></pre></div></div>

<h3 id="tail">tail</h3>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">tail</span> <span class="nt">-n</span> +K：表示​​从文件的第 K 行开始输出，一直输出到文件末尾​​。
<span class="nb">tail</span> <span class="nt">-n</span> K（或 <span class="nb">tail</span> <span class="nt">-K</span>）：表示​​输出文件的最后 K 行​​。
</code></pre></div></div>

<h3 id="parallel">parallel</h3>

<blockquote>
  <p>这个程序太NB了, 怎么啥功能都有</p>
</blockquote>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">-a</span> file​​	parallel <span class="nt">-a</span> files.txt <span class="nb">wc</span> <span class="nt">-l</span>	参数列表已存在于文件中时最方便
​​:::: file​​	parallel <span class="nb">wc</span> <span class="nt">-l</span> :::: files.txt	功能同 <span class="nt">-a</span>，另一种语法，可读性更好
​​:::​​	parallel <span class="nb">wc</span> <span class="nt">-l</span> ::: file1.txt file2.txt	参数数量较少，直接写在命令行时

<span class="c"># 甚至可以试运行</span>
parallel <span class="nt">--dry-run</span> <span class="nt">-a</span> tmp.txt <span class="nt">-j</span> 4 <span class="s1">'cos cp "cos://asr-dig-data-1256237915/{}" "$(basename {})"'</span>
</code></pre></div></div>

<h3 id="print0的用法">print0的用法</h3>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>find downloads/ <span class="nt">-name</span> <span class="s2">"*.mp3"</span> <span class="nt">-print0</span> | <span class="nb">head</span> <span class="nt">-z</span> <span class="nt">-n</span> 100 | <span class="nb">tar</span> <span class="nt">--use-compress-program</span><span class="o">=</span><span class="s2">"pigz -p 8"</span> <span class="nt">-cf</span> first_100_mp3.tar.gz <span class="nt">--null</span> <span class="nt">-T</span> -
<span class="c"># head -z</span>
<span class="c"># tar --null</span>
</code></pre></div></div>

<h3 id="shell-扩展名获取">Shell 扩展名获取</h3>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">filename</span><span class="o">=</span><span class="s2">"</span><span class="k">${</span><span class="nv">fullfile</span><span class="p">##*/</span><span class="k">}</span><span class="s2">"</span>   <span class="c"># 先从路径中提取出带扩展名的文件名</span>
<span class="nv">name</span><span class="o">=</span><span class="s2">"</span><span class="k">${</span><span class="nv">filename</span><span class="p">%.*</span><span class="k">}</span><span class="s2">"</span>        <span class="c"># 移除从最后一个 '.' 开始的后缀，得到文件名</span>
<span class="nv">extension</span><span class="o">=</span><span class="s2">"</span><span class="k">${</span><span class="nv">filename</span><span class="p">##*.</span><span class="k">}</span><span class="s2">"</span>  <span class="c"># 移除直到最后一个 '.' 的前缀，得到扩展名</span>
</code></pre></div></div>

<h3 id="变量存储时间点">变量存储时间点</h3>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/bash</span>

<span class="c"># 获取当前时间戳（秒级，作为唯一数据源）</span>
<span class="nv">current_timestamp</span><span class="o">=</span><span class="si">$(</span><span class="nb">date</span> +%s<span class="si">)</span>

<span class="c"># 从同一时间戳生成两种格式</span>
<span class="nv">datetime_full</span><span class="o">=</span><span class="si">$(</span><span class="nb">date</span> <span class="nt">-d</span> <span class="s2">"@</span><span class="nv">$current_timestamp</span><span class="s2">"</span> +%Y%m%d%H%M%S<span class="si">)</span>
<span class="nv">date_only</span><span class="o">=</span><span class="si">$(</span><span class="nb">date</span> <span class="nt">-d</span> <span class="s2">"@</span><span class="nv">$current_timestamp</span><span class="s2">"</span> +%Y%m%d<span class="si">)</span>

<span class="c"># 输出结果</span>
<span class="nb">echo</span> <span class="s2">"完整日期时间: </span><span class="nv">$datetime_full</span><span class="s2">"</span>
<span class="nb">echo</span> <span class="s2">"仅日期: </span><span class="nv">$date_only</span><span class="s2">"</span>
</code></pre></div></div>

<h3 id="awk-实用样例">awk 实用样例</h3>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 多重引号:</span>
watch <span class="nt">-n</span> 5 <span class="s1">'ls -lh *.tar | awk '</span><span class="se">\'</span><span class="s1">'{print $5, $9}'</span><span class="se">\'</span><span class="s1">''</span>

<span class="c"># 对比找新的前10个</span>
<span class="nb">awk</span> <span class="s1">'BEGIN { IGNORECASE=1 } NR==FNR { archive[$0]; next } !($0 in archive) &amp;&amp; !seen[$0]++ { print; if (++count &gt;= '</span><span class="k">${</span><span class="nv">batch</span><span class="k">}</span><span class="s1">') exit }'</span> <span class="k">${</span><span class="nv">archive_file</span><span class="k">}</span> <span class="k">${</span><span class="nv">input_file</span><span class="k">}</span> <span class="o">&gt;</span> <span class="k">${</span><span class="nv">tmpfile</span><span class="k">}</span>
</code></pre></div></div>

<h3 id="shell-遍历方法归纳">Shell 遍历方法归纳</h3>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/bashsou</span>
<span class="nv">servers</span><span class="o">=(</span><span class="s2">"Server1"</span> <span class="s2">"Server2"</span> <span class="s2">"Server3"</span> <span class="s2">"Server4"</span><span class="o">)</span>
<span class="c"># 遍历 servers 数组的每一个元素</span>
<span class="k">for </span>server <span class="k">in</span> <span class="s2">"</span><span class="k">${</span><span class="nv">servers</span><span class="p">[@]</span><span class="k">}</span><span class="s2">"</span><span class="p">;</span> <span class="k">do
    </span><span class="nb">echo</span> <span class="s2">"当前服务器: </span><span class="nv">$server</span><span class="s2">"</span>
<span class="k">done</span>
</code></pre></div></div>
<p><strong>Shell 数组遍历方式对比表</strong></p>

<h3 id="shell-数组遍历方式对比表">Shell 数组遍历方式对比表</h3>

<p><strong>example</strong></p>
<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 测试数组（包含空格元素）</span>
<span class="nv">files</span><span class="o">=(</span><span class="s2">"Project A"</span> <span class="s2">"Project B"</span> <span class="s2">"Project C"</span><span class="o">)</span>

<span class="c"># 1. 正确做法："${files[@]}"</span>
<span class="k">for </span>file <span class="k">in</span> <span class="s2">"</span><span class="k">${</span><span class="nv">files</span><span class="p">[@]</span><span class="k">}</span><span class="s2">"</span><span class="p">;</span> <span class="k">do
    </span><span class="nb">echo</span> <span class="s2">"文件: </span><span class="nv">$file</span><span class="s2">"</span>
<span class="k">done</span>
<span class="c"># 输出：3次循环，元素保持完整</span>
<span class="c"># 文件: Project A</span>
<span class="c"># 文件: Project B</span>
<span class="c"># 文件: Project C</span>

<span class="c"># 2. 错误示例："${files[*]}"</span>
<span class="k">for </span>file <span class="k">in</span> <span class="s2">"</span><span class="k">${</span><span class="nv">files</span><span class="p">[*]</span><span class="k">}</span><span class="s2">"</span><span class="p">;</span> <span class="k">do
    </span><span class="nb">echo</span> <span class="s2">"文件: </span><span class="nv">$file</span><span class="s2">"</span>
<span class="k">done</span>
<span class="c"># 输出：1次循环，所有元素合并</span>
<span class="c"># 文件: Project A Project B Project C</span>

<span class="c"># 3. 危险做法：${files[@]} (无引号)</span>
<span class="k">for </span>file <span class="k">in</span> <span class="k">${</span><span class="nv">files</span><span class="p">[@]</span><span class="k">}</span><span class="p">;</span> <span class="k">do
    </span><span class="nb">echo</span> <span class="s2">"文件: </span><span class="nv">$file</span><span class="s2">"</span>
<span class="k">done</span>
<span class="c"># 输出：4次循环，元素被空格拆分</span>
<span class="c"># 文件: Project</span>
<span class="c"># 文件: A</span>
<span class="c"># 文件: Project</span>
<span class="c"># 文件: B</span>
<span class="c"># 文件: Project C</span>
</code></pre></div></div>]]></content><author><name></name></author><summary type="html"><![CDATA[Linux]]></summary></entry><entry><title type="html">Jupyter Usage</title><link href="https://dashvvood.github.io/blog/2025/07/27/jupyter-usage.html" rel="alternate" type="text/html" title="Jupyter Usage" /><published>2025-07-27T18:09:00+00:00</published><updated>2025-07-27T18:09:00+00:00</updated><id>https://dashvvood.github.io/blog/2025/07/27/jupyter-usage</id><content type="html" xml:base="https://dashvvood.github.io/blog/2025/07/27/jupyter-usage.html"><![CDATA[<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>conda activate <span class="nb">test</span>
<span class="c"># inside test env</span>
pip <span class="nb">install </span>jupyterlab ipykernel
<span class="c"># add a new kernel</span>
python <span class="nt">-m</span> ipykernel <span class="nb">install</span> <span class="nt">--user</span> <span class="nt">--name</span> <span class="nb">test</span> <span class="nt">--display-name</span> <span class="s2">"conda env(test)"</span>
<span class="c"># use that kernel, select it in jupyter</span>
jupyter lab 
<span class="c"># remove that kernel</span>
jupyter kernelspec uninstall <span class="nb">test</span>
<span class="c"># List all kernels installed</span>
jupyter kernelspec list
</code></pre></div></div>]]></content><author><name></name></author><summary type="html"><![CDATA[conda activate test # inside test env pip install jupyterlab ipykernel # add a new kernel python -m ipykernel install --user --name test --display-name "conda env(test)" # use that kernel, select it in jupyter jupyter lab # remove that kernel jupyter kernelspec uninstall test # List all kernels installed jupyter kernelspec list]]></summary></entry><entry><title type="html">Welcome to Jekyll!</title><link href="https://dashvvood.github.io/blog/jekyll/update/2025/07/26/welcome-to-jekyll.html" rel="alternate" type="text/html" title="Welcome to Jekyll!" /><published>2025-07-26T21:46:33+00:00</published><updated>2025-07-26T21:46:33+00:00</updated><id>https://dashvvood.github.io/blog/jekyll/update/2025/07/26/welcome-to-jekyll</id><content type="html" xml:base="https://dashvvood.github.io/blog/jekyll/update/2025/07/26/welcome-to-jekyll.html"><![CDATA[<p>You’ll find this post in your <code class="language-plaintext highlighter-rouge">_posts</code> directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run <code class="language-plaintext highlighter-rouge">jekyll serve</code>, which launches a web server and auto-regenerates your site when a file is updated.</p>

<p>Jekyll requires blog post files to be named according to the following format:</p>

<p><code class="language-plaintext highlighter-rouge">YEAR-MONTH-DAY-title.MARKUP</code></p>

<p>Where <code class="language-plaintext highlighter-rouge">YEAR</code> is a four-digit number, <code class="language-plaintext highlighter-rouge">MONTH</code> and <code class="language-plaintext highlighter-rouge">DAY</code> are both two-digit numbers, and <code class="language-plaintext highlighter-rouge">MARKUP</code> is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works.</p>

<p>Jekyll also offers powerful support for code snippets:</p>

<figure class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">def</span> <span class="nf">print_hi</span><span class="p">(</span><span class="nb">name</span><span class="p">)</span>
  <span class="nb">puts</span> <span class="s2">"Hi, </span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="n">print_hi</span><span class="p">(</span><span class="s1">'Tom'</span><span class="p">)</span>
<span class="c1">#=&gt; prints 'Hi, Tom' to STDOUT.</span></code></pre></figure>

<p>Check out the <a href="https://jekyllrb.com/docs/home">Jekyll docs</a> for more info on how to get the most out of Jekyll. File all bugs/feature requests at <a href="https://github.com/jekyll/jekyll">Jekyll’s GitHub repo</a>. If you have questions, you can ask them on <a href="https://talk.jekyllrb.com/">Jekyll Talk</a>.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">foo</span><span class="p">():</span>
  <span class="k">return</span> <span class="mi">0</span>
</code></pre></div></div>]]></content><author><name></name></author><category term="jekyll" /><category term="update" /><summary type="html"><![CDATA[You’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run jekyll serve, which launches a web server and auto-regenerates your site when a file is updated.]]></summary></entry><entry><title type="html">Tutorial</title><link href="https://dashvvood.github.io/blog/none/2025/01/01/tutorial.html" rel="alternate" type="text/html" title="Tutorial" /><published>2025-01-01T00:00:00+00:00</published><updated>2025-01-01T00:00:00+00:00</updated><id>https://dashvvood.github.io/blog/none/2025/01/01/tutorial</id><content type="html" xml:base="https://dashvvood.github.io/blog/none/2025/01/01/tutorial.html"><![CDATA[<script>
  MathJax = {
    tex: {
      inlineMath: [['$', '$'], ['\\(', '\\)']],
      displayMath: [['$$', '$$'], ['\\[', '\\]']],
      processEscapes: true,
      processEnvironments: true
    },
    options: {
      skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre']
    }
  };
</script>

<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js" async=""></script>

<p>abc: $\alpha$, $abc$</p>

\[\begin{aligned}
  &amp; \phi(x,y) = \phi \left(\sum_{i=1}^n x_ie_i, \sum_{j=1}^n y_je_j \right)
  = \sum_{i=1}^n \sum_{j=1}^n x_i y_j \phi(e_i, e_j) = \\
  &amp; (x_1, \ldots, x_n) \left( \begin{array}{ccc}
      \phi(e_1, e_1) &amp; \cdots &amp; \phi(e_1, e_n) \\
      \vdots &amp; \ddots &amp; \vdots \\
      \phi(e_n, e_1) &amp; \cdots &amp; \phi(e_n, e_n)
    \end{array} \right)
  \left( \begin{array}{c}
      y_1 \\
      \vdots \\
      y_n
    \end{array} \right)
\end{aligned}\]

<table>
  <thead>
    <tr>
      <th>Header 1</th>
      <th>Header 2</th>
      <th>Header 3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Row 1, Col 1</td>
      <td>Row 1, Col 2</td>
      <td>Row 1, Col 3</td>
    </tr>
    <tr>
      <td>Row 2, Col 1</td>
      <td>Row 2, Col 2</td>
      <td>Row 2, Col 3</td>
    </tr>
  </tbody>
</table>

<hr />

<table>
  <thead>
    <tr>
      <th>Header 1</th>
      <th style="text-align: center">Header 2</th>
      <th style="text-align: right">Header 3</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Row 1 Col 1</td>
      <td style="text-align: center">Row 1 Col 2</td>
      <td style="text-align: right">Row 1 Col 3</td>
    </tr>
    <tr>
      <td>Row 2 Col 1</td>
      <td style="text-align: center">Row 2 Col 2</td>
      <td style="text-align: right">Row 2 Col 3</td>
    </tr>
  </tbody>
</table>]]></content><author><name></name></author><category term="None" /><summary type="html"><![CDATA[]]></summary></entry></feed>