<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>腾图工作室,威远博客,威远工作室,Ease</title>
    <link>/</link>
    <description>Recent content on 腾图工作室,威远博客,威远工作室,Ease</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sun, 15 Mar 2026 07:52:31 +0000</lastBuildDate>
    <atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>关于我...</title>
      <link>/other/about/</link>
      <pubDate>Sat, 27 Jul 2019 22:37:50 +0800</pubDate>
      <guid>/other/about/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../about.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;  &lt;strong&gt;&lt;a href=&#34;/other/message.html&#34;&gt;点击给我发消息&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt; &lt;strong&gt;姓 名&lt;/strong&gt;：易云&lt;/p&gt;&#xA;&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt; &lt;strong&gt;昵 称&lt;/strong&gt;：Ease&lt;/p&gt;&#xA;&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt; &lt;strong&gt;年 龄&lt;/strong&gt;: &amp;lt;８0&lt;/p&gt;&#xA;&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt; &lt;strong&gt;技 能&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;- 开发：Golang.Python.C#.前后端都能搞一些.美工差点.&#xA;- 维护：企业网络维护．设计．维修．善于利用周边知识多方案解决问题．&#xA;- 电子：单片机应用．PLC开发&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt;　&lt;strong&gt;特 点&lt;/strong&gt;:&lt;/p&gt;</description>
    </item>
    <item>
      <title>工具/软件 下载以及本站资源</title>
      <link>/it/2020/102108-tools/</link>
      <pubDate>Wed, 21 Oct 2020 08:01:21 +0800</pubDate>
      <guid>/it/2020/102108-tools/</guid>
      <description>&lt;h3 id=&#34;本站资源&#34;&gt;本站资源&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://u.scwy.net/&#34;&gt;文件共享&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://s.scwy.net/&#34;&gt;腾图信使&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;del&gt;&lt;a href=&#34;https://y.scwy.net/&#34;&gt;疫情图片合成&lt;/a&gt;&lt;/del&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;del&gt;&lt;a href=&#34;https://scwy.net&#34;&gt;腾图小抄&lt;/a&gt;&lt;/del&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://c.scwy.net&#34;&gt;语音聊天室&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://k.scwy.net&#34;&gt;腾图短地址生成&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;del&gt;&lt;a href=&#34;http://v.scwy.net&#34;&gt;语音转文字&lt;/a&gt;&lt;/del&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;del&gt;&lt;a href=&#34;https://d.scwy.net&#34;&gt;音乐站&lt;/a&gt;&lt;/del&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;del&gt;&lt;a href=&#34;https://o.scwy.net&#34;&gt;管道传输服务器&lt;/a&gt;  &lt;a href=&#34;https://i.scwy.net/it/2022/071718-piping/&#34;&gt;介绍文档看这里&lt;/a&gt;&lt;/del&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;del&gt;&lt;a href=&#34;https://mail.scwy.net&#34;&gt;腾图免费邮箱&lt;/a&gt;&lt;/del&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://i.scwy.net/it/2023/%E6%8B%BC%E9%9F%B3%E7%AC%94%E7%94%BB.html&#34;&gt;显示汉字笔画、拼音的小工具&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://a.scwy.net&#34;&gt;音频电子书&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;del&gt;&lt;a href=&#34;https://pd.scwy.net&#34;&gt;下载代理&lt;/a&gt;&lt;/del&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://day.scwy.net&#34;&gt;纪念日提醒&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://res.scwy.net&#34;&gt;音视频资源站&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;原创部份&#34;&gt;原创部份&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;编号&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;名称&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;功能&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;截图&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;版本&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;下载&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;日期&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;del&gt;001&lt;/del&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://i.scwy.net/it/2022/102416-crocoat/&#34;&gt;Crocoat&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;croc外壳文件&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;0.1.6&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;/down/crocoat/crocoat_win64.zip&#34;&gt;Win64&lt;/a&gt; &lt;a href=&#34;/down/crocoat/crocoat_linux64.tar.gz&#34;&gt;Linux64&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2022.10&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;del&gt;002&lt;/del&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;电影爬&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;电影爬取，直接观看。命令行工具，跨平台，包括Linux和Win端。&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2.0&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;/down/down.html?001&#34;&gt;下载地址&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2020.12&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;del&gt;003&lt;/del&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;喜马拉爬&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;喜马拉雅音频下载命令行工具。&lt;!-- raw HTML omitted --&gt;跨平台，包括Linux和Win端。 &lt;!-- raw HTML omitted --&gt;使用方法有命令行显示。&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;1.0&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;/down/down.html?002&#34;&gt;下载地址&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2020.10&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;演示&#34;&gt;演示&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;编号&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;名称&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;功能&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;下载&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;日期&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&amp;mdash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&amp;mdash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&amp;mdash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&amp;mdash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&amp;mdash;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;工具部份&#34;&gt;工具部份&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;编号&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;名称&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;功能&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;下载&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;日期&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;001&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Croc&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;跨平台内网对传工具&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;/down/croc/croc_win64.exe&#34;&gt;Win64&lt;/a&gt; &lt;a href=&#34;/down/croc/croc_win32.exe&#34;&gt;Win32&lt;/a&gt; &lt;a href=&#34;/down/croc/croc_linux64&#34;&gt;Linux64&lt;/a&gt; &lt;a href=&#34;/down/croc/croc_linux32&#34;&gt;Linux32&lt;/a&gt; &lt;a href=&#34;/down/croc/croc_arm&#34;&gt;ARM&lt;/a&gt; &lt;a href=&#34;/down/croc/croc_arm64&#34;&gt;ARM64&lt;/a&gt; &lt;a href=&#34;/down/croc/croc_win_arm64.exe&#34;&gt;Win_ARM64&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2021-11-4&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;002&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Caddy&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Web服务器&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;/down/caddy/caddy_linux64&#34;&gt;Linux64&lt;/a&gt; &lt;a href=&#34;/down/caddy/caddy_linux32&#34;&gt;Linux32&lt;/a&gt; &lt;a href=&#34;/down/caddy/caddy_arm64&#34;&gt;ARM64&lt;/a&gt; &lt;a href=&#34;/down/caddy/caddy_arm&#34;&gt;ARM&lt;/a&gt; &lt;a href=&#34;/down/caddy/caddy_win64.exe&#34;&gt;Win64&lt;/a&gt; &lt;a href=&#34;/down/caddy/caddy_win32.exe&#34;&gt;Win32&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2021-11-4&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;003&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;文件加密&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;直接通过网页加密文件,无需服务器交换数据&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;/down/vault/&#34;&gt;Web&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2025-11-27&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&amp;mdash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&amp;mdash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&amp;mdash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&amp;mdash;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&amp;mdash;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;</description>
    </item>
    <item>
      <title>Hugo静态博客及研究,最新版v0.145.0 （更新2025.4.10）</title>
      <link>/other/2019/072718-first/</link>
      <pubDate>Sun, 28 Jul 2019 18:44:32 +0800</pubDate>
      <guid>/other/2019/072718-first/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://github.com/gohugoio/hugo/releases&#34;&gt;最新版下载http://github.com/gohugoio/hugo/releases&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;2025.4.12&lt;/p&gt;&#xA;&lt;p&gt;考虑将持续更新的贴子单独放一个链接中，方便查找。&lt;/p&gt;&#xA;&lt;p&gt;2025.4.10&lt;/p&gt;&#xA;&lt;p&gt;关税战、金融战也不能影响我思考：&lt;br&gt;&#xA;虽然手相上编辑或添加文章后，可以通过Zerotier实现跳过本地服务器更新到其它主机，但毕竟还是需要开启手机上的Zerotier客户端。考虑在DG或CW100服务器上开启一个端口映射来直接同步。&lt;/p&gt;</description>
    </item>
    <item>
      <title>与U1打印机(Klipper)通信，获取打印数据</title>
      <link>/code/2026/031515-u1/</link>
      <pubDate>Sun, 15 Mar 2026 07:52:31 +0000</pubDate>
      <guid>/code/2026/031515-u1/</guid>
      <description>&lt;p&gt;以下代码在命令行获取Snapmaker U1打印机(Klipper系统)的实时打印信息&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../031515-u1-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#&#xA;# 实时显示U1打印机信息&#xA;# 2026.3.15&#xA;# https://i.scwy.net&#xA;# Ease&#xA;#&#xA;&#xA;import asyncio&#xA;import websockets&#xA;import json&#xA;import aiohttp&#xA;from datetime import datetime, timedelta&#xA;import sys&#xA;import os&#xA;import subprocess&#xA;&#xA;# ===================== 打印机配置 =====================&#xA;MOONRAKER_IP = &amp;#34;192.168.1.81&amp;#34;&#xA;MOONRAKER_PORT = 7125&#xA;MOONRAKER_WS_URL = f&amp;#34;ws://{MOONRAKER_IP}:{MOONRAKER_PORT}/websocket&amp;#34;&#xA;QUERY_INTERVAL = 5  # 基础刷新间隔（秒）&#xA;MATERIAL_REFRESH_INTERVAL = 12  # 材料数据刷新间隔（单位：基础刷新次数）&#xA;TIMEOUT = 10&#xA;# 支持4个挤出机配置&#xA;EXTRUDERS = [&amp;#34;extruder&amp;#34;, &amp;#34;extruder1&amp;#34;, &amp;#34;extruder2&amp;#34;, &amp;#34;extruder3&amp;#34;]&#xA;# ======================================================&#xA;&#xA;# ========== 美化相关配置 ==========&#xA;class Colors:&#xA;    &amp;#34;&amp;#34;&amp;#34;终端颜色配置（仅Windows PowerShell/CMD支持）&amp;#34;&amp;#34;&amp;#34;&#xA;    RESET = &amp;#34;\033[0m&amp;#34;&#xA;    RED = &amp;#34;\033[31m&amp;#34;&#xA;    GREEN = &amp;#34;\033[32m&amp;#34;&#xA;    YELLOW = &amp;#34;\033[33m&amp;#34;&#xA;    BLUE = &amp;#34;\033[34m&amp;#34;&#xA;    PURPLE = &amp;#34;\033[35m&amp;#34;&#xA;    CYAN = &amp;#34;\033[36m&amp;#34;&#xA;    WHITE = &amp;#34;\033[37m&amp;#34;&#xA;    BOLD = &amp;#34;\033[1m&amp;#34;&#xA;    UNDERLINE = &amp;#34;\033[4m&amp;#34;&#xA;&#xA;# 兼容Windows终端颜色&#xA;if sys.platform.startswith(&amp;#39;win&amp;#39;):&#xA;    # 启用Windows终端ANSI颜色支持&#xA;    os.system(&amp;#39;&amp;#39;)&#xA;&#xA;def init_console():&#xA;    &amp;#34;&amp;#34;&amp;#34;初始化控制台（新增PowerShell标题初始化）&amp;#34;&amp;#34;&amp;#34;&#xA;    if sys.platform.startswith(&amp;#39;win&amp;#39;):&#xA;        import io&#xA;        sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding=&amp;#39;utf-8&amp;#39;, line_buffering=True)&#xA;        os.system(&amp;#39;cls&amp;#39;)&#xA;        # 初始化PowerShell标题&#xA;        set_powershell_title(&amp;#34;3D打印机监控 - 初始化中...&amp;#34;)&#xA;    else:&#xA;        sys.stdout.reconfigure(line_buffering=True) if hasattr(sys.stdout, &amp;#39;reconfigure&amp;#39;) else None&#xA;        os.system(&amp;#39;clear&amp;#39;)&#xA;&#xA;def set_powershell_title(title):&#xA;    &amp;#34;&amp;#34;&amp;#34;&#xA;    设置PowerShell窗口标题（仅Windows生效）&#xA;    :param title: 标题文本&#xA;    &amp;#34;&amp;#34;&amp;#34;&#xA;    if not sys.platform.startswith(&amp;#39;win&amp;#39;):&#xA;        return&#xA;    &#xA;    # 限制标题最大长度（PowerShell建议不超过80字符）&#xA;    MAX_TITLE_LENGTH = 80&#xA;    if len(title) &amp;gt; MAX_TITLE_LENGTH:&#xA;        title = title[:MAX_TITLE_LENGTH - 3] + &amp;#34;...&amp;#34;&#xA;    &#xA;    try:&#xA;        # 方法1：通过PowerShell命令设置标题（使用转义处理）&#xA;        # 替换单引号为双引号避免语法错误&#xA;        escaped_title = title.replace(&amp;#34;&amp;#39;&amp;#34;, &amp;#34;\&amp;#34;&amp;#34;)&#xA;        subprocess.run(&#xA;            [&amp;#34;powershell&amp;#34;, &amp;#34;-Command&amp;#34;, f&amp;#34;$Host.UI.RawUI.WindowTitle = &amp;#39;{escaped_title}&amp;#39;&amp;#34;],&#xA;            capture_output=True,&#xA;            encoding=&amp;#39;utf-8&amp;#39;,&#xA;            timeout=1&#xA;        )&#xA;    except Exception:&#xA;        try:&#xA;            # 备用方法：通过cmd title命令（更稳定）&#xA;            # cmd title命令不支持特殊字符，简化处理&#xA;            simple_title = title.replace(&amp;#34;|&amp;#34;, &amp;#34;-&amp;#34;).replace(&amp;#34;:&amp;#34;, &amp;#34;=&amp;#34;)&#xA;            os.system(f&amp;#34;title {simple_title}&amp;#34;)&#xA;        except:&#xA;            pass&#xA;&#xA;def safe_get(data, keys, default=None):&#xA;    &amp;#34;&amp;#34;&amp;#34;安全获取嵌套字典值&amp;#34;&amp;#34;&amp;#34;&#xA;    if not isinstance(data, dict):&#xA;        return default&#xA;    current = data&#xA;    for key in keys:&#xA;        if isinstance(current, dict) and key in current:&#xA;            current = current[key]&#xA;        else:&#xA;            return default&#xA;    return current if current is not None else default&#xA;&#xA;def safe_float(value, default=0.0):&#xA;    &amp;#34;&amp;#34;&amp;#34;安全转换为浮点数&amp;#34;&amp;#34;&amp;#34;&#xA;    try:&#xA;        return float(value) if value is not None else default&#xA;    except:&#xA;        return default&#xA;&#xA;def safe_int(value, default=0):&#xA;    &amp;#34;&amp;#34;&amp;#34;安全转换为整数&amp;#34;&amp;#34;&amp;#34;&#xA;    try:&#xA;        return int(value) if value is not None and value != &amp;#34;&amp;#34; else default&#xA;    except:&#xA;        return default&#xA;&#xA;def format_seconds_short(seconds):&#xA;    &amp;#34;&amp;#34;&amp;#34;精简版时间格式化（适配标题显示：7h19m）&amp;#34;&amp;#34;&amp;#34;&#xA;    sec = safe_float(seconds)&#xA;    if sec &amp;lt;= 0:&#xA;        return &amp;#34;未知&amp;#34;&#xA;    hours = int(sec // 3600)&#xA;    mins = int((sec % 3600) // 60)&#xA;    parts = []&#xA;    if hours &amp;gt; 0:&#xA;        parts.append(f&amp;#34;{hours}h&amp;#34;)&#xA;    parts.append(f&amp;#34;{mins}m&amp;#34;)&#xA;    return &amp;#34;&amp;#34;.join(parts)&#xA;&#xA;def format_seconds(seconds):&#xA;    &amp;#34;&amp;#34;&amp;#34;完整时间格式化（界面显示：7h 19m 47s）&amp;#34;&amp;#34;&amp;#34;&#xA;    sec = safe_float(seconds)&#xA;    if sec &amp;lt;= 0:&#xA;        return &amp;#34;未知&amp;#34;&#xA;    hours = int(sec // 3600)&#xA;    mins = int((sec % 3600) // 60)&#xA;    secs = int(sec % 60)&#xA;    parts = []&#xA;    if hours &amp;gt; 0:&#xA;        parts.append(f&amp;#34;{hours}h&amp;#34;)&#xA;    if mins &amp;gt; 0 or hours &amp;gt; 0:  # 有小时就显示分钟&#xA;        parts.append(f&amp;#34;{mins}m&amp;#34;)&#xA;    parts.append(f&amp;#34;{secs}s&amp;#34;)&#xA;    return &amp;#34; &amp;#34;.join(parts)&#xA;&#xA;def calculate_remaining_time(print_duration, progress):&#xA;    &amp;#34;&amp;#34;&amp;#34;&#xA;    计算剩余时间&#xA;    :param print_duration: 已打印时间（秒）&#xA;    :param progress: 打印进度（百分比）&#xA;    :return: 剩余时间（秒）&#xA;    &amp;#34;&amp;#34;&amp;#34;&#xA;    if progress &amp;lt;= 0 or print_duration &amp;lt;= 0:&#xA;        return 0&#xA;    &#xA;    # 总预计时间 = 已打印时间 / 进度&#xA;    total_estimated = print_duration / (progress / 100)&#xA;    # 剩余时间 = 总预计时间 - 已打印时间&#xA;    remaining = total_estimated - print_duration&#xA;    &#xA;    return max(0, remaining)&#xA;&#xA;def get_status_color(print_state):&#xA;    &amp;#34;&amp;#34;&amp;#34;根据打印状态返回对应颜色&amp;#34;&amp;#34;&amp;#34;&#xA;    state_map = {&#xA;        &amp;#34;printing&amp;#34;: Colors.GREEN,      # 打印中 - 绿色&#xA;        &amp;#34;paused&amp;#34;: Colors.YELLOW,       # 暂停 - 黄色&#xA;        &amp;#34;standby&amp;#34;: Colors.BLUE,        # 待机 - 蓝色&#xA;        &amp;#34;error&amp;#34;: Colors.RED,           # 错误 - 红色&#xA;        &amp;#34;complete&amp;#34;: Colors.PURPLE      # 完成 - 紫色&#xA;    }&#xA;    return state_map.get(print_state.lower(), Colors.WHITE)&#xA;&#xA;# ========== 料盘数据获取函数（独立封装） ==========&#xA;async def get_filament_info():&#xA;    &amp;#34;&amp;#34;&amp;#34;获取料盘（材料）数据&amp;#34;&amp;#34;&amp;#34;&#xA;    try:&#xA;        async with websockets.connect(MOONRAKER_WS_URL, ping_interval=5) as ws:&#xA;            # 查询所有关键数据（你的原始请求）&#xA;            req = json.dumps({&#xA;                &amp;#34;jsonrpc&amp;#34;: &amp;#34;2.0&amp;#34;,&#xA;                &amp;#34;method&amp;#34;: &amp;#34;printer.objects.query&amp;#34;,&#xA;                &amp;#34;params&amp;#34;: {&#xA;                    &amp;#34;objects&amp;#34;: {&#xA;                        &amp;#34;print_task_config&amp;#34;: None,  # 颜色数据所在&#xA;                    }&#xA;                },&#xA;                &amp;#34;id&amp;#34;: 1&#xA;            })&#xA;            await ws.send(req)&#xA;&#xA;            while True:&#xA;                msg = await ws.recv()&#xA;                data = json.loads(msg)&#xA;&#xA;                if data.get(&amp;#34;id&amp;#34;) == 1 and &amp;#34;result&amp;#34; in data:&#xA;                    status = data[&amp;#34;result&amp;#34;][&amp;#34;status&amp;#34;]&#xA;                    &#xA;                    # 读取 print_task_config 里的颜色数据（你的代码）&#xA;                    task_config = status.get(&amp;#34;print_task_config&amp;#34;, {})&#xA;                    rgba_list = task_config.get(&amp;#34;filament_color_rgba&amp;#34;, [&amp;#34;未知&amp;#34;]*4)&#xA;                    filament_type = task_config.get(&amp;#34;filament_type&amp;#34;, [&amp;#34;未知&amp;#34;]*4)&#xA;                    &#xA;                    # 转换为中文颜色名称（你的代码）&#xA;                    def rgba_hex_to_color_name(rgba_hex):&#xA;                        &amp;#34;&amp;#34;&amp;#34;把RGBA十六进制（如FFFFFFFF）转成中文颜色名称&amp;#34;&amp;#34;&amp;#34;&#xA;                        # 只取前6位RGB（忽略最后2位A）&#xA;                        rgb_hex = rgba_hex[:6].upper() if rgba_hex != &amp;#34;未知&amp;#34; else &amp;#34;未知&amp;#34;&#xA;                        &#xA;                        # 常见颜色映射（可根据你的实际颜色扩展）&#xA;                        color_map = {&#xA;                            &amp;#34;FFFFFF&amp;#34;: &amp;#34;白色&amp;#34;,&#xA;                            &amp;#34;000000&amp;#34;: &amp;#34;黑色&amp;#34;,&#xA;                            &amp;#34;FF0000&amp;#34;: &amp;#34;红色&amp;#34;,&#xA;                            &amp;#34;00FF00&amp;#34;: &amp;#34;绿色&amp;#34;,&#xA;                            &amp;#34;0000FF&amp;#34;: &amp;#34;蓝色&amp;#34;,&#xA;                            &amp;#34;FFFF00&amp;#34;: &amp;#34;黄色&amp;#34;,&#xA;                            &amp;#34;FF00FF&amp;#34;: &amp;#34;紫色&amp;#34;,&#xA;                            &amp;#34;00FFFF&amp;#34;: &amp;#34;青色&amp;#34;,&#xA;                            &amp;#34;DE1619&amp;#34;: &amp;#34;红色&amp;#34;,&#xA;                            &amp;#34;808080&amp;#34;: &amp;#34;灰色&amp;#34;,&#xA;                            &amp;#34;FFA500&amp;#34;: &amp;#34;橙色&amp;#34;&#xA;                        }&#xA;                        &#xA;                        # 匹配预设颜色，匹配不到则显示原始值&#xA;                        return color_map.get(rgb_hex, f&amp;#34;#{rgb_hex}&amp;#34;)&#xA;                    &#xA;                    colors = [rgba_hex_to_color_name(rgba) for rgba in rgba_list]&#xA;                    &#xA;                    # 整理4卷耗材信息&#xA;                    multi_filament = []&#xA;                    for i in range(4):&#xA;                        multi_filament.append({&#xA;                            &amp;#34;index&amp;#34;: i+1,&#xA;                            &amp;#34;type&amp;#34;: filament_type[i] if i &amp;lt; len(filament_type) else &amp;#34;未配置&amp;#34;,&#xA;                            &amp;#34;color&amp;#34;: colors[i] if i &amp;lt; len(colors) else &amp;#34;未配置&amp;#34;,&#xA;                            &amp;#34;diameter&amp;#34;: &amp;#34;1.75mm&amp;#34;&#xA;                        })&#xA;                    &#xA;                    return {&#xA;                        &amp;#34;multi_filament&amp;#34;: multi_filament,&#xA;                        &amp;#34;filament_type&amp;#34;: filament_type,&#xA;                        &amp;#34;colors&amp;#34;: colors&#xA;                    }&#xA;                    &#xA;    except Exception as e:&#xA;        print(f&amp;#34;{Colors.RED}⚠️ 获取料盘数据异常: {type(e).__name__} - {e}{Colors.RESET}&amp;#34;)&#xA;        # 返回默认值&#xA;        return {&#xA;            &amp;#34;multi_filament&amp;#34;: [&#xA;                {&amp;#34;index&amp;#34;:1, &amp;#34;type&amp;#34;:&amp;#34;未配置&amp;#34;, &amp;#34;color&amp;#34;:&amp;#34;未配置&amp;#34;, &amp;#34;diameter&amp;#34;:&amp;#34;1.75mm&amp;#34;},&#xA;                {&amp;#34;index&amp;#34;:2, &amp;#34;type&amp;#34;:&amp;#34;未配置&amp;#34;, &amp;#34;color&amp;#34;:&amp;#34;未配置&amp;#34;, &amp;#34;diameter&amp;#34;:&amp;#34;1.75mm&amp;#34;},&#xA;                {&amp;#34;index&amp;#34;:3, &amp;#34;type&amp;#34;:&amp;#34;未配置&amp;#34;, &amp;#34;color&amp;#34;:&amp;#34;未配置&amp;#34;, &amp;#34;diameter&amp;#34;:&amp;#34;1.75mm&amp;#34;},&#xA;                {&amp;#34;index&amp;#34;:4, &amp;#34;type&amp;#34;:&amp;#34;未配置&amp;#34;, &amp;#34;color&amp;#34;:&amp;#34;未配置&amp;#34;, &amp;#34;diameter&amp;#34;:&amp;#34;1.75mm&amp;#34;}&#xA;            ],&#xA;            &amp;#34;filament_type&amp;#34;: [&amp;#34;未配置&amp;#34;]*4,&#xA;            &amp;#34;colors&amp;#34;: [&amp;#34;未配置&amp;#34;]*4&#xA;        }&#xA;&#xA;async def get_file_metadata(filename):&#xA;    &amp;#34;&amp;#34;&amp;#34;获取打印文件的详细元数据（包含切片预估时间）&amp;#34;&amp;#34;&amp;#34;&#xA;    if not filename or filename == &amp;#34;无&amp;#34;:&#xA;        return {}&#xA;    &#xA;    try:&#xA;        async with aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=TIMEOUT)) as session:&#xA;            # 获取文件详细信息（包含切片时的预估时间）&#xA;            url = f&amp;#34;http://{MOONRAKER_IP}:{MOONRAKER_PORT}/server/files/metadata?filename={filename}&amp;#34;&#xA;            async with session.get(url) as resp:&#xA;                if resp.status == 200:&#xA;                    return await resp.json()&#xA;                else:&#xA;                    print(f&amp;#34;{Colors.YELLOW}⚠️ 获取文件元数据失败，状态码: {resp.status}{Colors.RESET}&amp;#34;)&#xA;                    return {}&#xA;    except Exception as e:&#xA;        print(f&amp;#34;{Colors.RED}⚠️ 获取文件元数据异常: {str(e)}{Colors.RESET}&amp;#34;)&#xA;        return {}&#xA;&#xA;async def get_full_printer_data():&#xA;    &amp;#34;&amp;#34;&amp;#34;获取完整的打印机数据（新增print_stats.estimated_time字段）&amp;#34;&amp;#34;&amp;#34;&#xA;    # 请求所有需要的字段（新增estimated_time获取）&#xA;    url = (&#xA;        f&amp;#34;http://{MOONRAKER_IP}:{MOONRAKER_PORT}/printer/objects/query?&amp;#34;&#xA;        &amp;#34;print_stats=filename,state,print_duration,total_duration,filament_used,estimated_time&amp;amp;&amp;#34;  # 新增estimated_time&#xA;        &amp;#34;virtual_sdcard=progress,remaining_time,file_position,metadata,estimated_time&amp;amp;&amp;#34;  # 新增estimated_time&#xA;        &amp;#34;gcode_move=current_layer,position,extruder,absolute_coordinates&amp;amp;&amp;#34;&#xA;        &amp;#34;heater_bed=temperature,target,power&amp;amp;&amp;#34;&#xA;        &amp;#34;extruder=temperature,target,power&amp;amp;&amp;#34;&#xA;        &amp;#34;extruder1=temperature,target,power&amp;amp;&amp;#34;&#xA;        &amp;#34;extruder2=temperature,target,power&amp;amp;&amp;#34;&#xA;        &amp;#34;extruder3=temperature,target,power&amp;amp;&amp;#34;&#xA;        &amp;#34;filament_switch_sensor=enabled&amp;amp;&amp;#34;&#xA;        &amp;#34;configfile=settings&amp;amp;&amp;#34;&#xA;        &amp;#34;layer_display=current_layer,total_layers&amp;#34;  # 添加layer_display支持&#xA;    )&#xA;&#xA;    try:&#xA;        async with aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=TIMEOUT)) as session:&#xA;            async with session.get(url) as resp:&#xA;                if resp.status == 200:&#xA;                    return await resp.json()&#xA;                else:&#xA;                    print(f&amp;#34;{Colors.YELLOW}⚠️ 获取打印机数据失败，状态码: {resp.status}{Colors.RESET}&amp;#34;)&#xA;                    return {}&#xA;    except Exception as e:&#xA;        print(f&amp;#34;{Colors.RED}⚠️ 获取打印机数据异常: {str(e)}{Colors.RESET}&amp;#34;)&#xA;        return {}&#xA;&#xA;async def main():&#xA;    &amp;#34;&amp;#34;&amp;#34;主程序：显示完整的打印机数据（材料数据间隔刷新）&amp;#34;&amp;#34;&amp;#34;&#xA;    init_console()&#xA;    print(f&amp;#34;{Colors.BOLD}{Colors.CYAN}{&amp;#39;=&amp;#39;*100}{Colors.RESET}&amp;#34;)&#xA;    print(f&amp;#34;{Colors.BOLD}{Colors.CYAN}📡 3D打印机监控系统 v1.0 | 连接地址: {MOONRAKER_IP}:{MOONRAKER_PORT}{Colors.RESET}&amp;#34;)&#xA;    print(f&amp;#34;{Colors.BOLD}{Colors.CYAN}{&amp;#39;=&amp;#39;*100}{Colors.RESET}&amp;#34;)&#xA;    &#xA;    # 初始化变量&#xA;    refresh_counter = 0  # 刷新计数器&#xA;    filament_info = None  # 料盘数据缓存&#xA;    &#xA;    # 首次启动强制获取料盘数据&#xA;    print(f&amp;#34;\n{Colors.BLUE}🔄 首次获取料盘数据...{Colors.RESET}&amp;#34;)&#xA;    filament_info = await get_filament_info()&#xA;    print(f&amp;#34;{Colors.GREEN}✅ 料盘数据初始化完成{Colors.RESET}&amp;#34;)&#xA;    &#xA;    while True:&#xA;        # ========== 1. 料盘数据间隔刷新逻辑 ==========&#xA;        refresh_counter += 1&#xA;        # 每MATERIAL_REFRESH_INTERVAL次刷新才获取一次料盘数据&#xA;        if refresh_counter &amp;gt;= MATERIAL_REFRESH_INTERVAL:&#xA;            print(f&amp;#34;\n{Colors.BLUE}🔄 达到{MATERIAL_REFRESH_INTERVAL}次刷新，更新料盘数据...{Colors.RESET}&amp;#34;)&#xA;            filament_info = await get_filament_info()&#xA;            refresh_counter = 0  # 重置计数器&#xA;            print(f&amp;#34;{Colors.GREEN}✅ 料盘数据更新完成{Colors.RESET}&amp;#34;)&#xA;        &#xA;        # ========== 2. 实时获取核心数据（进度、时间等） ==========&#xA;        printer_data_task = asyncio.create_task(get_full_printer_data())&#xA;        data = await printer_data_task&#xA;        &#xA;        status = safe_get(data, [&amp;#34;result&amp;#34;, &amp;#34;status&amp;#34;], {})&#xA;        current_time = datetime.now().strftime(&amp;#34;%Y-%m-%d %H:%M:%S&amp;#34;)&#xA;        &#xA;        # 基础打印信息&#xA;        print_stats = safe_get(status, [&amp;#34;print_stats&amp;#34;], {})&#xA;        print_state = safe_get(print_stats, [&amp;#34;state&amp;#34;], &amp;#34;standby&amp;#34;)&#xA;        print_file = safe_get(print_stats, [&amp;#34;filename&amp;#34;], &amp;#34;无&amp;#34;) if print_state == &amp;#34;printing&amp;#34; else &amp;#34;无&amp;#34;&#xA;        # 超精简文件名（仅保留前15字符）&#xA;        short_filename = print_file.split(&amp;#34;/&amp;#34;)[-1] if print_file != &amp;#34;无&amp;#34; else &amp;#34;无&amp;#34;&#xA;        if len(short_filename) &amp;gt; 15:&#xA;            short_filename = short_filename[:12] + &amp;#34;...&amp;#34;&#xA;        &#xA;        print_duration = safe_get(print_stats, [&amp;#34;print_duration&amp;#34;], 0)&#xA;        total_duration = safe_get(print_stats, [&amp;#34;total_duration&amp;#34;], 0)&#xA;        filament_used = safe_get(print_stats, [&amp;#34;filament_used&amp;#34;], 0)&#xA;        &#xA;        # 进度和时间&#xA;        virtual_sd = safe_get(status, [&amp;#34;virtual_sdcard&amp;#34;], {})&#xA;        progress = safe_float(safe_get(virtual_sd, [&amp;#34;progress&amp;#34;], 0)) * 100&#xA;        remaining_time = safe_get(virtual_sd, [&amp;#34;remaining_time&amp;#34;], 0)&#xA;        file_position = safe_get(virtual_sd, [&amp;#34;file_position&amp;#34;], 0)&#xA;        &#xA;        # 获取Klipper网页同款切片剩余时间&#xA;        slicer_remaining_time = 0&#xA;        slicer_total_time = 0&#xA;        &#xA;        # 方案1: 优先从print_stats获取&#xA;        print_stats_estimated = safe_get(print_stats, [&amp;#34;estimated_time&amp;#34;], 0)&#xA;        if print_stats_estimated &amp;gt; 0 and print_state == &amp;#34;printing&amp;#34;:&#xA;            slicer_total_time = print_stats_estimated&#xA;            slicer_remaining_time = max(0, slicer_total_time - print_duration)&#xA;        &#xA;        # 方案2: 从virtual_sdcard获取备用&#xA;        elif safe_get(virtual_sd, [&amp;#34;estimated_time&amp;#34;], 0) &amp;gt; 0 and print_state == &amp;#34;printing&amp;#34;:&#xA;            slicer_total_time = safe_get(virtual_sd, [&amp;#34;estimated_time&amp;#34;], 0)&#xA;            slicer_remaining_time = max(0, slicer_total_time - print_duration)&#xA;        &#xA;        # 方案3: 从文件元数据获取切片原始预估时间&#xA;        elif print_file != &amp;#34;无&amp;#34;:&#xA;            file_metadata = await get_file_metadata(print_file)&#xA;            slicer_total_time = safe_get(file_metadata, [&amp;#34;result&amp;#34;, &amp;#34;estimated_time&amp;#34;], 0)&#xA;            if slicer_total_time &amp;gt; 0 and print_state == &amp;#34;printing&amp;#34;:&#xA;                slicer_remaining_time = max(0, slicer_total_time - print_duration)&#xA;        &#xA;        # 待机状态重置切片剩余时间&#xA;        if print_state != &amp;#34;printing&amp;#34;:&#xA;            slicer_remaining_time = 0&#xA;            slicer_total_time = 0&#xA;        &#xA;        # 原有剩余时间计算逻辑&#xA;        if remaining_time &amp;lt;= 0 and print_state == &amp;#34;printing&amp;#34; and progress &amp;gt; 0:&#xA;            remaining_time = calculate_remaining_time(print_duration, progress)&#xA;        &#xA;        if remaining_time &amp;lt;= 0 and print_file != &amp;#34;无&amp;#34;:&#xA;            file_metadata = await get_file_metadata(print_file)&#xA;            estimated_time = safe_get(file_metadata, [&amp;#34;result&amp;#34;, &amp;#34;estimated_time&amp;#34;], 0)&#xA;            if estimated_time &amp;gt; 0:&#xA;                remaining_time = estimated_time - print_duration&#xA;        &#xA;        # 层数信息&#xA;        current_layer = 0&#xA;        total_layers = 0&#xA;        &#xA;        layer_display = safe_get(status, [&amp;#34;layer_display&amp;#34;], {})&#xA;        current_layer = safe_int(layer_display.get(&amp;#34;current_layer&amp;#34;), 0)&#xA;        total_layers = safe_int(layer_display.get(&amp;#34;total_layers&amp;#34;), 0)&#xA;        &#xA;        if current_layer == 0:&#xA;            gcode_move = safe_get(status, [&amp;#34;gcode_move&amp;#34;], {})&#xA;            current_layer = safe_int(gcode_move.get(&amp;#34;current_layer&amp;#34;), 0)&#xA;        &#xA;        if total_layers == 0:&#xA;            metadata = safe_get(virtual_sd, [&amp;#34;metadata&amp;#34;], {})&#xA;            total_layers = safe_int(metadata.get(&amp;#34;layer_count&amp;#34;), 0)&#xA;        &#xA;        if total_layers == 0 and print_file != &amp;#34;无&amp;#34;:&#xA;            file_metadata = await get_file_metadata(print_file)&#xA;            total_layers = safe_int(safe_get(file_metadata, [&amp;#34;result&amp;#34;, &amp;#34;layer_count&amp;#34;], 0), 0)&#xA;        &#xA;        if current_layer == 0 and total_layers &amp;gt; 0 and progress &amp;gt; 0 and print_state == &amp;#34;printing&amp;#34;:&#xA;            current_layer = int(total_layers * progress / 100)&#xA;        &#xA;        # 待机状态优化&#xA;        if print_state != &amp;#34;printing&amp;#34;:&#xA;            current_layer = &amp;#34;待机中&amp;#34;&#xA;            total_layers = &amp;#34;待机中&amp;#34;&#xA;            remaining_time = 0&#xA;        else:&#xA;            if current_layer == 0:&#xA;                current_layer = &amp;#34;获取中&amp;#34;&#xA;            if total_layers == 0:&#xA;                total_layers = &amp;#34;未知&amp;#34;&#xA;        &#xA;        # ========== 更新PowerShell标题（核心修复） ==========&#xA;        if print_state == &amp;#34;printing&amp;#34;:&#xA;            # 精简标题格式：核心信息+短格式&#xA;            title = (&#xA;                f&amp;#34;3D打印进度{progress:.0f}% | 剩余{format_seconds_short(slicer_remaining_time)} &amp;#34;&#xA;            )&#xA;        else:&#xA;            # 待机标题精简&#xA;            title = f&amp;#34;3D打印机状态:{print_state.upper()} | {datetime.now().strftime(&amp;#39;%H:%M:%S&amp;#39;)}&amp;#34;&#xA;        &#xA;        # 设置标题&#xA;        set_powershell_title(title)&#xA;        &#xA;        # 热床信息&#xA;        heater_bed = safe_get(status, [&amp;#34;heater_bed&amp;#34;], {})&#xA;        bed_temp = safe_get(heater_bed, [&amp;#34;temperature&amp;#34;], 0)&#xA;        bed_target = safe_get(heater_bed, [&amp;#34;target&amp;#34;], 0)&#xA;        bed_power = safe_get(heater_bed, [&amp;#34;power&amp;#34;], 0) * 100&#xA;        &#xA;        # 挤出机信息&#xA;        extruders_data = []&#xA;        for extruder_name in EXTRUDERS:&#xA;            extruder = safe_get(status, [extruder_name], {})&#xA;            extruders_data.append({&#xA;                &amp;#34;name&amp;#34;: extruder_name,&#xA;                &amp;#34;temp&amp;#34;: safe_get(extruder, [&amp;#34;temperature&amp;#34;], 0),&#xA;                &amp;#34;target&amp;#34;: safe_get(extruder, [&amp;#34;target&amp;#34;], 0),&#xA;                &amp;#34;power&amp;#34;: safe_get(extruder, [&amp;#34;power&amp;#34;], 0) * 100&#xA;            })&#xA;        &#xA;        # ========== 清屏并显示美化后的数据 ==========&#xA;        os.system(&amp;#39;cls&amp;#39; if sys.platform.startswith(&amp;#39;win&amp;#39;) else &amp;#39;clear&amp;#39;)&#xA;        &#xA;        # 构建美化后的输出内容&#xA;        output = [&#xA;            # 头部标题&#xA;            f&amp;#34;{Colors.BOLD}{Colors.CYAN}{&amp;#39;=&amp;#39;*100}{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;{Colors.BOLD}{Colors.WHITE}📊 3D打印机实时监控 | {MOONRAKER_IP}:{MOONRAKER_PORT} | {current_time}{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;{Colors.BOLD}{Colors.CYAN}{&amp;#39;=&amp;#39;*100}{Colors.RESET}&amp;#34;,&#xA;            &amp;#34;&amp;#34;,&#xA;            # 基础信息区域&#xA;            f&amp;#34;{Colors.BOLD}{Colors.WHITE}【基础信息】{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;  📄 打印文件: {Colors.PURPLE}{print_file:&amp;lt;50}{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;  📌 打印状态: {get_status_color(print_state)}{print_state.upper():&amp;lt;10}{Colors.RESET} &amp;#34;&#xA;            f&amp;#34;📈 进度: {Colors.GREEN}{progress:&amp;gt;5.1f}%{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;&amp;#34;, &#xA;            # 层数信息区域&#xA;            # f&amp;#34;{Colors.BOLD}{Colors.WHITE}【打印层数】{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;  📑 当前层数: {Colors.YELLOW}{current_layer:&amp;gt;5}{Colors.RESET} / &amp;#34;&#xA;            f&amp;#34;总层数: {Colors.YELLOW}{total_layers:&amp;lt;5}{Colors.RESET}&amp;#34;,&#xA;            # f&amp;#34;{Colors.LIGHT_GRAY}{&amp;#39;-&amp;#39;*90}{Colors.RESET}&amp;#34;,&#xA;            # 热床信息区域&#xA;            # f&amp;#34;{Colors.BOLD}{Colors.WHITE}【热床状态】{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;  🔥 当前温度: {Colors.RED}{bed_temp:&amp;gt;5.1f}°C{Colors.RESET} / &amp;#34;&#xA;            f&amp;#34;目标温度: {Colors.RED}{bed_target:&amp;gt;5.1f}°C{Colors.RESET} / &amp;#34;&#xA;            f&amp;#34;功率: {Colors.RED}{bed_power:&amp;gt;5.0f}%{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;&amp;#34;,&#xA;            f&amp;#34;&amp;#34;,&#xA;            # 时间信息区域 - 修改为左对齐&#xA;            f&amp;#34;{Colors.BOLD}{Colors.WHITE}【时间统计】{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;  ⏱️  已打印时间: {Colors.BLUE}{format_seconds(print_duration):&amp;lt;15}{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;  ⏳  计算剩余时间: {Colors.BLUE}{format_seconds(remaining_time):&amp;lt;15}{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;  🎯  切片剩余时间: {Colors.BLUE}{format_seconds(slicer_remaining_time):&amp;lt;15}{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;  🕒  切片总耗时: {Colors.BLUE}{format_seconds(slicer_total_time):&amp;lt;15}{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;  🕒  总计时间: {Colors.BLUE}{format_seconds(total_duration):&amp;lt;15}{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;  🧵  已用耗材: {Colors.BLUE}{filament_used:&amp;lt;15.2f}mm{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;  📍  文件位置: {Colors.BLUE}{file_position:&amp;lt;15} 字节{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;&amp;#34;, &#xA;            f&amp;#34;&amp;#34;, &#xA;            # 挤出机信息区域&#xA;            f&amp;#34;{Colors.BOLD}{Colors.WHITE}【挤出机温度】{Colors.RESET}&amp;#34;,&#xA;            f&amp;#34;  {&amp;#39;&amp;#39;:&amp;lt;4}{Colors.BOLD}名称{Colors.RESET:&amp;lt;12} {Colors.BOLD}当前温度{Colors.RESET:&amp;lt;12} {Colors.BOLD}目标温度{Colors.RESET:&amp;lt;12} {Colors.BOLD}功率{Colors.RESET:&amp;lt;8}&amp;#34;,&#xA;            f&amp;#34;  {&amp;#39;&amp;#39;:&amp;lt;4}{&amp;#39;-&amp;#39;*12} {&amp;#39;-&amp;#39;*12} {&amp;#39;-&amp;#39;*12} {&amp;#39;-&amp;#39;*8}&amp;#34;,&#xA;        ]&#xA;        &#xA;        # 添加挤出机数据（美化对齐）&#xA;        for ext in extruders_data:&#xA;            temp_color = Colors.RED if ext[&amp;#34;temp&amp;#34;] &amp;gt; 0 else Colors.WHITE&#xA;            target_color = Colors.ORANGE if ext[&amp;#34;target&amp;#34;] &amp;gt; 0 else Colors.WHITE&#xA;            power_color = Colors.YELLOW if ext[&amp;#34;power&amp;#34;] &amp;gt; 0 else Colors.WHITE&#xA;            &#xA;            output.append(&#xA;                f&amp;#34;  {&amp;#39;&amp;#39;:&amp;lt;4}{ext[&amp;#39;name&amp;#39;]:&amp;lt;12} {temp_color}{ext[&amp;#39;temp&amp;#39;]:&amp;gt;8.1f}°C{Colors.RESET} &amp;#34;&#xA;                f&amp;#34;{target_color}{ext[&amp;#39;target&amp;#39;]:&amp;gt;10.1f}°C{Colors.RESET} &amp;#34;&#xA;                f&amp;#34;{power_color}{ext[&amp;#39;power&amp;#39;]:&amp;gt;8.0f}%{Colors.RESET}&amp;#34;&#xA;            )&#xA;        &#xA;        # 耗材信息（最下方，美化）&#xA;        output.extend([&#xA;            f&amp;#34;&amp;#34;,&#xA;            f&amp;#34;&amp;#34;, &#xA;            f&amp;#34;{Colors.BOLD}{Colors.WHITE}【耗材信息】&amp;#34;&#xA;        ])&#xA;        &#xA;        # 添加料盘数据（使用缓存，美化显示）&#xA;        if filament_info and filament_info[&amp;#34;multi_filament&amp;#34;]:&#xA;            for fil in filament_info[&amp;#34;multi_filament&amp;#34;]:&#xA;                color_display = fil[&amp;#39;color&amp;#39;]&#xA;                # 给颜色名称添加对应颜色&#xA;                if fil[&amp;#39;color&amp;#39;] in [&amp;#34;红色&amp;#34;, &amp;#34;绿色&amp;#34;, &amp;#34;蓝色&amp;#34;, &amp;#34;黄色&amp;#34;, &amp;#34;紫色&amp;#34;, &amp;#34;青色&amp;#34;, &amp;#34;白色&amp;#34;, &amp;#34;黑色&amp;#34;]:&#xA;                    color_map = {&#xA;                        &amp;#34;红色&amp;#34;: Colors.RED,&#xA;                        &amp;#34;绿色&amp;#34;: Colors.GREEN,&#xA;                        &amp;#34;蓝色&amp;#34;: Colors.BLUE,&#xA;                        &amp;#34;黄色&amp;#34;: Colors.YELLOW,&#xA;                        &amp;#34;紫色&amp;#34;: Colors.PURPLE,&#xA;                        &amp;#34;青色&amp;#34;: Colors.CYAN,&#xA;                        &amp;#34;白色&amp;#34;: Colors.WHITE,&#xA;                        &amp;#34;黑色&amp;#34;: Colors.BLACK&#xA;                    }&#xA;                    color_display = f&amp;#34;{color_map[fil[&amp;#39;color&amp;#39;]]}{fil[&amp;#39;color&amp;#39;]}{Colors.RESET}&amp;#34;&#xA;                &#xA;                output.append(&#xA;                    f&amp;#34;  {&amp;#39;&amp;#39;:&amp;lt;4}{fil[&amp;#39;index&amp;#39;]:&amp;lt;6} {fil[&amp;#39;type&amp;#39;]:&amp;lt;15} {color_display:&amp;lt;15} {fil[&amp;#39;diameter&amp;#39;]:&amp;lt;10}&amp;#34;&#xA;                )&#xA;        &#xA;        output.append(&amp;#34;&amp;#34;)&#xA;        &#xA;        # 打印所有美化后的信息&#xA;        for line in output:&#xA;            print(line, flush=True)&#xA;        &#xA;        # 倒计时刷新（美化显示）&#xA;        for i in range(QUERY_INTERVAL, 0, -1):&#xA;            print(f&amp;#34;\r{Colors.BLUE}⏳ 下次刷新倒计时: {i}秒{Colors.RESET}&amp;#34;, end=&amp;#34;&amp;#34;, flush=True)&#xA;            await asyncio.sleep(1)&#xA;&#xA;# 补充缺失的颜色常量&#xA;Colors.LIGHT_GRAY = &amp;#34;\033[37m&amp;#34;&#xA;Colors.GRAY = &amp;#34;\033[90m&amp;#34;&#xA;Colors.BLACK = &amp;#34;\033[30m&amp;#34;&#xA;Colors.ORANGE = &amp;#34;\033[38;5;208m&amp;#34;&#xA;&#xA;# ===================== 启动程序 =====================&#xA;if __name__ == &amp;#34;__main__&amp;#34;:&#xA;    # 安装依赖&#xA;    try:&#xA;        import websockets&#xA;    except ImportError:&#xA;        print(f&amp;#34;{Colors.RED}⚠️ 缺少websockets依赖，正在安装...{Colors.RESET}&amp;#34;)&#xA;        os.system(&amp;#34;pip install websockets&amp;#34; if sys.platform.startswith(&amp;#39;win&amp;#39;) else &amp;#34;pip3 install websockets&amp;#34;)&#xA;        import websockets&#xA;    &#xA;    try:&#xA;        import aiohttp&#xA;    except ImportError:&#xA;        print(f&amp;#34;{Colors.RED}⚠️ 缺少aiohttp依赖，正在安装...{Colors.RESET}&amp;#34;)&#xA;        os.system(&amp;#34;pip install aiohttp&amp;#34; if sys.platform.startswith(&amp;#39;win&amp;#39;) else &amp;#34;pip3 install aiohttp&amp;#34;)&#xA;        import aiohttp&#xA;    &#xA;    try:&#xA;        asyncio.run(main())&#xA;    except KeyboardInterrupt:&#xA;        # 退出时恢复标题&#xA;        set_powershell_title(&amp;#34;PowerShell&amp;#34;)&#xA;        os.system(&amp;#39;cls&amp;#39; if sys.platform.startswith(&amp;#39;win&amp;#39;) else &amp;#39;clear&amp;#39;)&#xA;        print(f&amp;#34;\n{Colors.PURPLE}{&amp;#39;=&amp;#39;*100}{Colors.RESET}&amp;#34;)&#xA;        print(f&amp;#34;{Colors.PURPLE}👋 3D打印机监控已退出 | 感谢使用{Colors.RESET}&amp;#34;)&#xA;        print(f&amp;#34;{Colors.PURPLE}{&amp;#39;=&amp;#39;*100}{Colors.RESET}&amp;#34;)&#xA;    except Exception as e:&#xA;        # 异常时恢复标题&#xA;        set_powershell_title(&amp;#34;PowerShell&amp;#34;)&#xA;        print(f&amp;#34;\n{Colors.RED}❌ 程序异常: {type(e).__name__} - {e}{Colors.RESET}&amp;#34;)&#xA;        input(f&amp;#34;{Colors.YELLOW}\n按回车退出...{Colors.RESET}&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Snapmaker U1 3D打印机研究学习</title>
      <link>/it/2026/020410-u1/</link>
      <pubDate>Wed, 04 Feb 2026 02:51:59 +0000</pubDate>
      <guid>/it/2026/020410-u1/</guid>
      <description>&lt;p&gt;终于还是购了Snapmaker U1，选择了性价比。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../020410-u1-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;一步一步封箱中。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../020410-u1-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;问题：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;每次都检测平台有异物，点击继续会重置，就可以继续打印了。&lt;/li&gt;&#xA;&lt;li&gt;因为使用的Orca版本较低（比拓竹），所以别家的（拓竹）的模型不能直接打开使用。想办法使用至少会丢失颜色。&lt;/li&gt;&#xA;&lt;li&gt;以下的报错不知道如何处理：相对挤出机寻址要求在每层重置挤出机位置，以防止浮点精度损失。将G92E0添加到图层代码中&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;以上问题已解决：&lt;/p&gt;</description>
    </item>
    <item>
      <title>打造个人网络电台</title>
      <link>/it/2026/010716-radio/</link>
      <pubDate>Wed, 07 Jan 2026 08:41:54 +0000</pubDate>
      <guid>/it/2026/010716-radio/</guid>
      <description>&lt;p&gt;购得一台可以播放流媒体的设备，一般用它来听网络电台，还有一些电视转的流媒体音频。&lt;br&gt;&#xA;也可以编辑电台，添加自己的电台或者更新。&lt;/p&gt;&#xA;&lt;p&gt;于是，考虑做个私人电台，或许先仅仅是私网使用。其实基本只有两步：&lt;/p&gt;</description>
    </item>
    <item>
      <title>3D打印多色方案的另一种可能性探索</title>
      <link>/it/2026/010716-3d/</link>
      <pubDate>Wed, 07 Jan 2026 08:39:50 +0000</pubDate>
      <guid>/it/2026/010716-3d/</guid>
      <description>&lt;p&gt;在3D打印技术飞速迭代的当下，“多色化”始终是行业追求的核心目标之一。从个人创意打印到工业级精准建模，彩色呈现的需求日益迫切，但现有技术路径似乎陷入了固定框架。我们不禁思考：有没有一种可能，3D打印的多色实现，存在与现有逻辑完全不同的全新方案？&lt;/p&gt;</description>
    </item>
    <item>
      <title>二次开发智能开关，让小智语音控制它</title>
      <link>/it/2026/010422-switch/</link>
      <pubDate>Sun, 04 Jan 2026 14:36:54 +0000</pubDate>
      <guid>/it/2026/010422-switch/</guid>
      <description>&lt;p&gt;购买到可以二次开发的智能开关，内启多种响应方式：TCP Client, TCP Server, HTTP Server, HTTP Client, MQTT等。&lt;br&gt;&#xA;与小智AI结合，实现了语音控制开关，测试中，预计替换天猫智障。&lt;/p&gt;</description>
    </item>
    <item>
      <title>人生课堂：你缺少的重要的人生教育 【思考】</title>
      <link>/other/2025/123109-life/</link>
      <pubDate>Wed, 31 Dec 2025 01:05:44 +0000</pubDate>
      <guid>/other/2025/123109-life/</guid>
      <description>&lt;p&gt;我们更应该开设的是：&lt;br&gt;&#xA;婚姻课，理财课，育儿课，健康课。&lt;br&gt;&#xA;这些学校没有开设，不被我们重视，而对一生都有意义的人生大课。&lt;/p&gt;&#xA;&lt;p&gt;学校是教我们一些技能，主体是教我们做一个合格的打工人。而这些重要的课程并不会教，更何况现在利益驱动，分数驱动的情况下。&lt;/p&gt;</description>
    </item>
    <item>
      <title>让小智AI帮我们记点事</title>
      <link>/it/2025/122713-xiaozhi/</link>
      <pubDate>Sat, 27 Dec 2025 05:48:11 +0000</pubDate>
      <guid>/it/2025/122713-xiaozhi/</guid>
      <description>&lt;p&gt;最近看到一个可自己电脑部署的备忘录系统 Memos( &lt;a href=&#34;https://usememos.com/&#34;&gt;https://usememos.com/&lt;/a&gt;) .  单个文件, 可跨平台运行.&lt;/p&gt;&#xA;&lt;p&gt;结合小智AI, 让我们可以通过语音自动添加一个备忘录.&lt;/p&gt;&#xA;&lt;p&gt;这里需要购买一个ESPC3作为MCP服务响应.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Turso兼容并代替sqlite</title>
      <link>/it/2025/122711-turso/</link>
      <pubDate>Sat, 27 Dec 2025 03:24:30 +0000</pubDate>
      <guid>/it/2025/122711-turso/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://docs.turso.tech/introduction&#34;&gt;https://docs.turso.tech/introduction&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;sqlite大名鼎鼎,应用广泛. 但并发性一直是我头痛的问题.如果Turso支持超过10个并发,那将是我的应用首选.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;Turso引入了实验性的BEGIN CONCURRENT特性,通过多版本控制MVCC显著提升了写操作吞吐量,解决了SQLite在高并发写入场景下的性能瓶颈&amp;rdquo;. 但具体怎么样还等待验证.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adbkeyboard控制手机的键盘输入法</title>
      <link>/it/2025/122613-adbkeyboard/</link>
      <pubDate>Fri, 26 Dec 2025 05:23:08 +0000</pubDate>
      <guid>/it/2025/122613-adbkeyboard/</guid>
      <description>&lt;h3 id=&#34;adbkeyboard&#34;&gt;ADBKeyBoard&lt;/h3&gt;&#xA;&lt;p&gt;这是一个通过ADB控制的键盘输入法.与ADB的不同主要是在于它可以输入中文,而ADB是不允许的. 一般ADB是采用发送字符到原输入法.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/senzhk/ADBKeyBoard&#34;&gt;https://github.com/senzhk/ADBKeyBoard&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;adb shell input text &amp;#34;HelloWorld&amp;#34;&#xA;adb shell ime list -a  查看原有输入法&#xA;    com.sohu.inputmethod.sogou.xiaomi/.SogouIM&#xA;    com.android.adbkeyboard/.AdbIME&#xA;    com.iflytek.inputmethod.miui/.FlyIME&#xA;    cn.xiaohuodui.remote.keyboard/.keyboard.IMEService&#xA;adb shell ime enable com.android.adbkeyboard/.AdbIME&#xA;adb shell ime set com.android.adbkeyboard/.AdbIME&#xA;&#xA;adb shell am broadcast -a ADB_INPUT_TEXT --es msg &amp;#39;Hello?&amp;#39;&#xA;adb shell am broadcast -a ADB_INPUT_B64 --es msg `echo -n &amp;#39;你好嗎? Hello?&amp;#39; | base64`&#xA;adb shell am broadcast -a ADB_INPUT_TEXT --es msg &amp;#34;你好世界&amp;#34;&#xA;adb shell am broadcast -a ADB_INPUT_B64 --es msg ([Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(&amp;#34;你好嗎? Hello?&amp;#34;)))  PowerShell下发送中文&#xA;adb shell am broadcast -a ADB_INPUT_CODE --ei code 67 发送按键(67=KEYCODE_DEL)&#xA;adb shell am broadcast -a ADB_EDITOR_CODE --ei code 2  2 = IME_ACTION_GO&#xA;adb shell am broadcast -a ADB_INPUT_CHARS --eia chars &amp;#39;128568,32,67,97,116&amp;#39;   第一个字符是unicode字符&#xA;adb shell am broadcast -a ADB_INPUT_TEXT --es mcode &amp;#39;4096,29&amp;#39;   Ctrl + A ?&#xA;adb shell am broadcast -a ADB_INPUT_TEXT --es mcode &amp;#39;4096+8192,29&amp;#39;&#xA;adb shell am broadcast -a ADB_CLEAR_TEXT  清除所有文本&#xA;adb shell ime reset 重置输入法&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;KEYCODE_AT @ &#xA;KEYCODE_BACK  返回键 125&#xA;KEYCODE_BACKSLASH \&#xA;KEYCODE_BRIGHTNESS_DOWN  亮度降低 220&#xA;KEYCODE_BRIGHTNESS_UP  亮度上升 221&#xA;KEYCODE_CALL  呼叫键 5&#xA;KEYCODE_CAMERA 相机键 &#xA;KEYCODE_CLEAR 清除键 28&#xA;KEYCODE_CLOSE AC 关闭  321&#xA;KEYCODE_CUT 剪切&#xA;KEYCODE_DO_NOT_DISTURB 切换“请勿打扰”模式&#xA;KEYCODE_DPAD_DOWN_LEFT  方向键左下&#xA;KEYCODE_DPAD_DOWN_RIGHT  方向键右下&#xA;KEYCODE_DPAD_UP_LEFT 方向键左上&#xA;KEYCODE_ENDCALL 结束呼叫键 &#xA;KEYCODE_ENTER 输入键&#xA;KEYCODE_EQUALS =  161&#xA;KEYCODE_ESCAPE 111&#xA;KEYCODE_FULLSCREEN 325&#xA;KEYCODE_GRAVE “&amp;#34;（反勾）键&#xA;KEYCODE_LOCK 锁定屏幕 324&#xA;KEYCODE_MUTE 164&#xA;KEYCODE_PASTE 279&#xA;KEYCODE_POUND #&#xA;KEYCODE_POWER 26&#xA;KEYCODE_STAR *&#xA;KEYCODE_VOLUME_DOWN 25&#xA;KEYCODE_VOLUME_UP 24&#xA;KEYCODE_VOLUME_MUTE 164&#xA;KEYCODE_WAKEUP 224&#xA;KEYCODE_SOFT_SLEEP 276&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Memos免费开源备忘录</title>
      <link>/it/2025/122513-memos/</link>
      <pubDate>Thu, 25 Dec 2025 05:06:49 +0000</pubDate>
      <guid>/it/2025/122513-memos/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://usememos.com/&#34;&gt;Memos&lt;/a&gt; 是一个Golang开发的免费开源备忘录. 在&lt;a href=&#34;https://github.com/usememos/memos&#34;&gt;Github&lt;/a&gt;上47.5K的Star.&lt;/p&gt;&#xA;&lt;p&gt;我也建了一个自己的&lt;a href=&#34;https://m.scwy.net&#34;&gt;memos https://m.scwy.net&lt;/a&gt;. 或许用它代替手机上的记事本.&lt;/p&gt;&#xA;&lt;p&gt;开放了注册, 网友或其它朋友也可以用.&lt;/p&gt;&#xA;&lt;p&gt;添加自己的Token(左下角用户设置-我的帐号-访问令牌), &lt;a href=&#34;https://github.com/mudkipme/MoeMemosAndroid/releases/download/0.8.7/moememos-v0.8.7.apk&#34;&gt;下载APP&lt;/a&gt;, 可以在手机上使用它.&lt;/p&gt;</description>
    </item>
    <item>
      <title>邮件服务器相关资料</title>
      <link>/it/2025/120611-mail/</link>
      <pubDate>Sat, 06 Dec 2025 03:21:48 +0000</pubDate>
      <guid>/it/2025/120611-mail/</guid>
      <description>&lt;p&gt;最近在搞一个&lt;a href=&#34;https://mail.scwy.net&#34;&gt;邮件服务器&lt;/a&gt;. 虽然现在似乎邮箱用得越来越少, 但自已域名的邮箱是不是很酷, 比如我的 &lt;a href=&#34;mailto:e@scwy.net&#34;&gt;e@scwy.net&lt;/a&gt;, 超短.&lt;/p&gt;&#xA;&lt;p&gt;之前也安装过邮件服务器,但是因为安全,垃圾等问题,被服务商要求关闭了. 所以自己开发的邮件服务器,即要简单,也要有基本的安全处理.以免被垃圾邮件利用.&lt;/p&gt;</description>
    </item>
    <item>
      <title>邪修:非接触式API</title>
      <link>/it/2025/111710-api/</link>
      <pubDate>Mon, 17 Nov 2025 02:11:55 +0000</pubDate>
      <guid>/it/2025/111710-api/</guid>
      <description>&lt;p&gt;有些设备是没有接口的,或者说,别人就是不给你.这时候对开发者简直就是MMP的郁闷.&lt;br&gt;&#xA;在可能的情况下,转换个思路: 只要你显示(通常都有显示屏),哪怕是物理显示.比如说身高吧,你总要显示出来看. 那么邪修的办法就是: 非接触式API.&lt;br&gt;&#xA;说人话就是: 用摄像头拍,然后OCR.甚至给它上强度:拍照+AI识别.不信它不&amp;quot;招&amp;quot;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>不常用电话号码</title>
      <link>/other/2025/111710-call/</link>
      <pubDate>Mon, 17 Nov 2025 02:07:44 +0000</pubDate>
      <guid>/other/2025/111710-call/</guid>
      <description>&lt;p&gt;以下是不常用电话号码,但,万一需要了呢.预计持续更新&lt;br&gt;&#xA;如果有误,联系我及时更改&lt;/p&gt;&#xA;&lt;p&gt;12378 银保监投诉&lt;br&gt;&#xA;961110 反诈专线&lt;br&gt;&#xA;12389 警务督察热线&lt;/p&gt;</description>
    </item>
    <item>
      <title>人走茶凉,人来茶热</title>
      <link>/code/2025/110917-body/</link>
      <pubDate>Sun, 09 Nov 2025 09:48:27 +0000</pubDate>
      <guid>/code/2025/110917-body/</guid>
      <description>&lt;p&gt;最近买了一个摄像头,考虑结合AI让它发挥点实际作用.这里的功能是: 人走熄屏,人来亮屏&lt;/p&gt;&#xA;&lt;p&gt;python有很长时间没用了,代码基本也是靠AI给的.&lt;/p&gt;&#xA;&lt;p&gt;打包: pyinstaller &amp;ndash;onefile &amp;ndash;add-data &amp;ldquo;yolov5s.onnx;.&amp;rdquo; &amp;ndash;name=&amp;ldquo;AutoMonitor&amp;rdquo; .\888.py&lt;/p&gt;</description>
    </item>
    <item>
      <title>ws4sqlite 远程sqlite数据库</title>
      <link>/code/2025/110822-ws4sqlite/</link>
      <pubDate>Sat, 08 Nov 2025 14:12:23 +0000</pubDate>
      <guid>/code/2025/110822-ws4sqlite/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://germ.gitbook.io/ws4sqlite/&#34;&gt;ws4sqlite&lt;/a&gt;是通过http进行sqlite操作的工具. 类似于&lt;a href=&#34;/it/2025/102510-pocketbase/&#34;&gt; PocketBase&lt;/a&gt;这种,将数据库与其它分开,可以实现于前端的分离.&lt;/p&gt;&#xA;&lt;p&gt;但我依然不是太明白分享sqlite这种小型数据库的理由.似乎作者也在尝试支持其它数据库类型.&lt;/p&gt;</description>
    </item>
    <item>
      <title>思考:小智AI用于智慧医疗/养老的可行性</title>
      <link>/it/2025/110418-xiaozhi/</link>
      <pubDate>Tue, 04 Nov 2025 10:19:06 +0000</pubDate>
      <guid>/it/2025/110418-xiaozhi/</guid>
      <description>&lt;p&gt;之前买过两个&lt;a href=&#34;/it/2025/021609-ai/&#34;&gt;小智AI产品&lt;/a&gt;,它比我的&amp;quot;天猫精灵&amp;quot;作用还多一点.如果它能和智能插座API的话,&amp;ldquo;天猫智障精灵&amp;quot;也可以下架了.&lt;/p&gt;&#xA;&lt;p&gt;说正题: 小智是否能(怎样用于)智慧医疗和智慧养老?&lt;/p&gt;&#xA;&lt;p&gt;如果会PCB设计,当然是不需要象小智那样的.这不是不会嘛.&lt;/p&gt;&#xA;&lt;h3 id=&#34;功能需求及改进&#34;&gt;功能需求及改进&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;摄像头&#xA;现在有些网友的作品中,已经包含了摄像头.它可以用于识物,与客服人员互动,社交,监控等.&lt;/li&gt;&#xA;&lt;li&gt;4G&#xA;现在也有版本是支持的,这可以用于户外场景.&lt;/li&gt;&#xA;&lt;li&gt;报警&#xA;按键报警功能还是比较有必要的&lt;/li&gt;&#xA;&lt;li&gt;三轴加速度传感器&lt;/li&gt;&#xA;&lt;li&gt;GPS&lt;/li&gt;&#xA;&lt;li&gt;可换电池&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;以上这些足够了.估计大小和厚度也就来到了三分之一到四分之一手机大小.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu的备份和恢复</title>
      <link>/it/2025/110222-backup/</link>
      <pubDate>Sun, 02 Nov 2025 14:06:13 +0000</pubDate>
      <guid>/it/2025/110222-backup/</guid>
      <description>&lt;p&gt;时不时的需要对Ubuntu进行装机,头痛.需要安装这样那样的软件/工具,以及一些运行环境.&lt;br&gt;&#xA;确实需要完整的备份和恢复功能.&lt;/p&gt;&#xA;&lt;p&gt;AI搜索到一些方面和资料,先摘抄如下.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gonc:基于Golang的netcat工具</title>
      <link>/it/2025/102811-gonc/</link>
      <pubDate>Tue, 28 Oct 2025 03:26:33 +0000</pubDate>
      <guid>/it/2025/102811-gonc/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://github.com/threatexpert/gonc&#34; alt=&#34;gonc&#34;&gt; 是一个基于 Golang 的 netcat 工具，旨在更方便地建立点对点通信。其主要特点包括：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;🔁 自动化内网穿透：零配置，双方仅需约定一个口令，使用参数-p2p既可自动发现彼此网络地址和穿透内网建立点对点连接，使用公共 STUN 和 MQTT 服务交换地址信息。&#xA;&#xA;🔒 端到端双向认证的加密：支持 TCP 的 TLS 和 UDP 的 DTLS 加密传输，可基于口令双向身份认证。&#xA;&#xA;🧩 灵活的服务配置：通过参数 -e 可灵活的设置为每个连接提供服务的应用程序，例如-e /bin/sh可提供远程cmdshell，还可以使用内置的虚拟命令便捷的使用socks5服务、http文件服务和流量转发功能。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://gonc.cc/hole-punching.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>都是单色3D打印机,如何将单色变为多色?</title>
      <link>/it/2025/102616-3d/</link>
      <pubDate>Sun, 26 Oct 2025 08:46:43 +0000</pubDate>
      <guid>/it/2025/102616-3d/</guid>
      <description>&lt;p&gt;现在我用的是一个单色打印机,因为它同一时间只能打印一种颜色.但,现在的多色打印机,大部份也是单色打印机&amp;mdash;同一时间只能打印一种颜色.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PocketBase前端利器?</title>
      <link>/it/2025/102510-pocketbase/</link>
      <pubDate>Sat, 25 Oct 2025 02:18:13 +0000</pubDate>
      <guid>/it/2025/102510-pocketbase/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://pocketbase.io/&#34; alt=&#34;PocketBase&#34;&gt; &lt;a href=&#34;https://pocketbase.io/docs/&#34;&gt;https://pocketbase.io/docs/&lt;/a&gt; 是一个基于Go开发的后端解决方案.  看起来它更象是为前端开发准备的.&lt;/p&gt;&#xA;&lt;p&gt;基于Golang的优势是绿色(单文件运行,运行后生成数据库),跨平台.&lt;/p&gt;&#xA;&lt;p&gt;特点:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;嵌入式数据库（SQLite），带有实时订阅.据说可以拿来做WebSocket聊天一类. 但SQLite这个并发,有点担心(估计依然是考虑前端测试用)&lt;/li&gt;&#xA;&lt;li&gt;内置文件和用户管理&lt;/li&gt;&#xA;&lt;li&gt;方便的管理仪表板 UI&lt;/li&gt;&#xA;&lt;li&gt;简单的 REST 风格的 API&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;当前Start 52K,成绩不错.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 玩家进入敌人视野</title>
      <link>/code/2025/102022-vision/</link>
      <pubDate>Mon, 20 Oct 2025 14:16:35 +0000</pubDate>
      <guid>/code/2025/102022-vision/</guid>
      <description>&lt;p&gt;通过区域判断玩家是否&amp;quot;入圈&amp;quot;, 通过RayCast2D判断玩家是否可以触及.&lt;br&gt;&#xA;多个RayCast2D避免头或尾部份&amp;quot;暴露&amp;quot;而未有检测到.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Winboat 在Linux中运行Windows</title>
      <link>/it/2025/101811-winboat/</link>
      <pubDate>Sat, 18 Oct 2025 03:00:48 +0000</pubDate>
      <guid>/it/2025/101811-winboat/</guid>
      <description>&lt;p&gt;WinBoat是一款免费开源虚拟化工具,支持在Linux中运行Windows系统.&lt;br&gt;&#xA;现在感觉没有比之前常规的虚拟机有多大的差别.或许让它先飞一会儿,待来日.&lt;br&gt;&#xA;微软已经&amp;quot;兼容&amp;quot;Linux和安卓,Linux也应该行动起来?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Energy Golang又一个基于网页的GUI框架</title>
      <link>/code/2025/100616-energy/</link>
      <pubDate>Mon, 06 Oct 2025 08:14:51 +0000</pubDate>
      <guid>/code/2025/100616-energy/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://energye.github.io/&#34;&gt;Energy&lt;/a&gt; 是最新发现的又一个GUI框架,基于Chrome网页.实现了跨平台:Win/Linux/Mac&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://energye.github.io/imgs/banner/sys-dialog.webp&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;https://energye.github.io/imgs/banner/sys-dialog-mac.webp&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;https://energye.github.io/imgs/banner/sys-menu.webp&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;环境安装&#34;&gt;环境安装&lt;/h3&gt;&#xA;&lt;p&gt;提示了自己的环境工具: &lt;a href=&#34;https://energye.github.io/course/cli-download&#34;&gt;https://energye.github.io/course/cli-download&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;energy env 查看环境&lt;br&gt;&#xA;energy install 安装开发环境&lt;br&gt;&#xA;不因为某此问题不能安装时,设置代理: energy env -w proxy:http://ip:port&lt;br&gt;&#xA;energy build 构建执行程序, 需要将程序放到 CEF 目录中. 在Win中是 CEF-136_WINDOWS_64 目录, 目录内放必须的库文件之类.&lt;br&gt;&#xA;energy package 构建安装包&lt;br&gt;&#xA;energy update 更新 energy 发行版本和 LibLCL 库&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gcode-3D打印语言</title>
      <link>/it/2025/092508-gcode/</link>
      <pubDate>Thu, 25 Sep 2025 00:40:11 +0000</pubDate>
      <guid>/it/2025/092508-gcode/</guid>
      <description>&lt;p&gt;虽然服务器没续费,网站似乎不能公网浏览(&lt;a href=&#34;http://wyyyh.iask.in:88/&#34;&gt;http://wyyyh.iask.in:88/&lt;/a&gt;不受影响).但手机上依然运行着,写着.&lt;/p&gt;&#xA;&lt;p&gt;3D进阶&amp;ndash;学习一下GCode,3D打印机的语言. 它告诉3D打印机该如何移动,如何控温.看看以下摘抄的部份内容.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Htmx浅看</title>
      <link>/code/2025/091118-htmx/</link>
      <pubDate>Thu, 11 Sep 2025 10:33:31 +0000</pubDate>
      <guid>/code/2025/091118-htmx/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://htmx.org/&#34;&gt;Htmx&lt;/a&gt;用于 HTML 的高性能工具.&#xA;htmx 允许您访问 AJAX、CSS 转换 、WebSockets 和服务器发送事件 直接在 HTML 中使用属性 ，因此您可以构建 现代用户界面 ，具有简单性和 超文本的力量&lt;br&gt;&#xA;htmx 很小（~14k min.gz&amp;rsquo;d）， 无依赖性， 与 React 相比，可扩展且代码库大小减少了 67%&lt;/p&gt;</description>
    </item>
    <item>
      <title>听/读书杂记</title>
      <link>/other/2025/082516-book/</link>
      <pubDate>Mon, 25 Aug 2025 08:53:54 +0000</pubDate>
      <guid>/other/2025/082516-book/</guid>
      <description>&lt;p&gt;[第一性原理] 当你面对一个复杂问题的时候,问问自己:这件事的本质是什么?最基本的真理是什么?&lt;/p&gt;&#xA;&lt;p&gt;[我是谁] 我之为我的本质特征,在于我的精神&lt;/p&gt;&#xA;&lt;p&gt;[庆余年] 不是穿越,而是人类的再次延续.核辐射成了人类可以吸收的&amp;quot;天地灵气&amp;quot;&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI及相关的思考</title>
      <link>/other/2025/082516-ai/</link>
      <pubDate>Mon, 25 Aug 2025 08:49:22 +0000</pubDate>
      <guid>/other/2025/082516-ai/</guid>
      <description>&lt;p&gt;AI来&amp;quot;袭&amp;quot;,未来将要面对更迅速,更颠覆的变化.&lt;/p&gt;&#xA;&lt;p&gt;这里记录一下自己的思考,以及一些从第三方获取来的信息.&lt;/p&gt;&#xA;&lt;p&gt;在AI时代,人类的价值不在于处理信息.而在于提出正确的问题和创造性的解决方案&lt;br&gt;&#xA;当AI可以写代码时,程序员的角色不再是写代码,而是理解用户需求,设计系统架构,解决复杂问题&lt;br&gt;&#xA;这并不意味着AI替代人类,而是人类和AI需要合作,发挥各自的优势:人类负责提出问题和创建解决方案,AI负责处理数据和执行任务.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Arduino小智MCP库</title>
      <link>/code/2025/082008-xiaozhi/</link>
      <pubDate>Wed, 20 Aug 2025 00:48:05 +0000</pubDate>
      <guid>/code/2025/082008-xiaozhi/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://i.scwy.net/it/2025/021609-ai/&#34;&gt;购了两个小智&lt;/a&gt;,这是个不错的ESP32项目.B站资料也是比较多的.&lt;/p&gt;&#xA;&lt;p&gt;它的一个较大功能节点就是加入了&lt;a href=&#34;https://i.scwy.net/it/2025/052317-xiaozhi/&#34;&gt;MCP功能&lt;/a&gt;,我也在PC上做了不少功能:开浏览器,关机,锁屏&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;最近看到一个&lt;a href=&#34;https://github.com/toddpan/xiaozhi-esp32-mcp&#34;&gt;Arduino库xiaozhi-mcp&lt;/a&gt;.通过ESP32芯片来完成一定量的MCP功能.&lt;/p&gt;&#xA;&lt;p&gt;之前也一直在考虑不需要长期使用PC的方法,以及WOL.&lt;/p&gt;&#xA;&lt;p&gt;以下是库带的示例,并不是本人的.使用之前,安装&lt;a href=&#34;https://github.com/Links2004/arduinoWebSockets&#34;&gt;WebSockets&lt;/a&gt;库&lt;/p&gt;</description>
    </item>
    <item>
      <title>每个人都应该有个3D打印机 (2025.10.22)</title>
      <link>/it/2025/081313-3d/</link>
      <pubDate>Wed, 13 Aug 2025 05:23:16 +0000</pubDate>
      <guid>/it/2025/081313-3d/</guid>
      <description>&lt;p&gt;每个人都应该有个3D打印机,基本不算夸张,确实可以自己搞点东西.&lt;br&gt;&#xA;我的3D打印机是比较老的了,Ender3S.使用PLA材料.前些年基本没使用,最近才把它用起来,问题主要是自己不会建模型,一切东西都出不来.&lt;br&gt;&#xA;个人更多的是打印一些壳子,盖子之类.做的一些电子原型,如果没有壳子,看起来太丑.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Speed 网络测速服务</title>
      <link>/code/2025/080609-speed/</link>
      <pubDate>Wed, 06 Aug 2025 01:23:51 +0000</pubDate>
      <guid>/code/2025/080609-speed/</guid>
      <description>&lt;p&gt;2025.8.7&lt;/p&gt;&#xA;&lt;p&gt;做了一点升级: 网速测试应该与内网当前的设备有点关系,内网设备的数量也有一点了解的价值.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080609-speed-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/soease/speed&#34;&gt;网络测速&lt;/a&gt;,开源跨平台,绿色无污染.&lt;br&gt;&#xA;即可单次测试你的网速,又可以作为服务器,定期测速,并查看你的网速变化.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Defold 网络相关</title>
      <link>/code/2025/072719-defold/</link>
      <pubDate>Sun, 27 Jul 2025 11:10:03 +0000</pubDate>
      <guid>/code/2025/072719-defold/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../072719-defold-01.jpg&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;&lt;img src=&#34;../072719-defold-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;测试了通过http对网站进行访问,拆解返回的json.&lt;br&gt;&#xA;试了自己模拟Button,确实没有看到Defold有这个控件.&lt;/p&gt;&#xA;&lt;p&gt;httpClient.lua单独文件保存,之后作为库引用&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fyne支持多国语言</title>
      <link>/code/2025/071922-fyne-lang/</link>
      <pubDate>Sat, 19 Jul 2025 14:45:01 +0000</pubDate>
      <guid>/code/2025/071922-fyne-lang/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://fyne.io&#34;&gt;fyne&lt;/a&gt;对于&lt;a href=&#34;https://docs.fyne.io/explore/translations&#34;&gt;多国语言支持&lt;/a&gt;也说得要清不楚的，还得自己试出来。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// 翻译，适用于多国语言的应用&#xA;&#xA;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;image/color&amp;#34;&#xA;&#x9;&amp;#34;os&amp;#34;&#xA;&#xA;&#x9;&amp;#34;fyne.io/fyne/v2&amp;#34;&#xA;&#x9;&amp;#34;fyne.io/fyne/v2/app&amp;#34;&#xA;&#x9;&amp;#34;fyne.io/fyne/v2/canvas&amp;#34;&#xA;&#x9;&amp;#34;fyne.io/fyne/v2/container&amp;#34;&#xA;&#x9;&amp;#34;fyne.io/fyne/v2/lang&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;myApp := app.New()&#xA;&#xA;&#x9;// 多国语言支持&#xA;&#x9;langFile := fmt.Sprintf(&amp;#34;translation/%s.json&amp;#34;, lang.SystemLocale().LanguageString())&#xA;&#x9;// 添加判断文件是否存在&#xA;&#x9;data, err := os.ReadFile(langFile)&#xA;&#x9;if err == nil {&#xA;&#x9;&#x9;lang.AddTranslationsForLocale(data, fyne.CurrentDevice().Locale())&#xA;&#x9;}&#xA;&#xA;&#x9;myWindow := myApp.NewWindow(lang.L(&amp;#34;Demo&amp;#34;))&#xA;&#x9;green := color.NRGBA{R: 0, G: 180, B: 0, A: 255}&#xA;&#xA;&#x9;text1 := canvas.NewText(lang.L(&amp;#34;Hello&amp;#34;), green)&#xA;&#x9;text2 := canvas.NewText(lang.L(&amp;#34;There&amp;#34;), green)&#xA;&#x9;text2.Move(fyne.NewPos(120, 20))&#xA;&#x9;content := container.NewWithoutLayout(text1, text2)&#xA;&#xA;&#x9;myWindow.SetContent(content)&#xA;&#x9;myWindow.ShowAndRun()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;将多国语言文件放到了translation目录，例如当前环境zh-CN。&lt;/p&gt;</description>
    </item>
    <item>
      <title>fyne导出安卓版程序apk</title>
      <link>/code/2025/071922-fyne-mob/</link>
      <pubDate>Sat, 19 Jul 2025 14:21:12 +0000</pubDate>
      <guid>/code/2025/071922-fyne-mob/</guid>
      <description>&lt;p&gt;一直在寻找跨平台的解决方案，甚至于安卓版. 最近又看了fyne, 并试用了apk的导出，也不是太复杂，也成功了。&lt;/p&gt;&#xA;&lt;p&gt;它依赖Android SDK 和 NDK，安装完就可以使用如下命令导出：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Defold又是一个轻巧的游戏引擎</title>
      <link>/it/2025/070918-defold/</link>
      <pubDate>Wed, 09 Jul 2025 10:43:40 +0000</pubDate>
      <guid>/it/2025/070918-defold/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://defold.com/images/logo/defold/logo/logo-ver-classic-white-160.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://defold.com/&#34;&gt;Defold&lt;/a&gt;是一款高性能跨平台游戏引擎，跨平台（PlayStation/Switch/Android/iOS/macOS/Linux/Windows/Steam/HTML5/Facebook/XBox即将），号称永久免费。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://defold.com/download/&#34;&gt;当前版本 1.10.3&lt;/a&gt;  &lt;a href=&#34;https://github.com/defold/defold/releases/latest/download/Defold-x86_64-win32.zip&#34;&gt;Win版本&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;从官网来看，资料还是比较丰富的，虽然多数为英文。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../070918-defold-03.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;关于轻量高性能的比较表，在各平台上，与其它两个大平台的导出文件大小。在之前的Godot项目中，特别是对于H5页面，太大了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>建立自已的短信服务器</title>
      <link>/it/2025/070316-sms/</link>
      <pubDate>Thu, 03 Jul 2025 08:05:08 +0000</pubDate>
      <guid>/it/2025/070316-sms/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../0703160-sms-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;现在的短信平台很多，也有多平台融合的golang库可以用。短信平台有些特点：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;有些信息是不能发的，即使是还的信息，监管很严。怕是骚扰用户。当然自己的手机发一发是没问题的，毕竟有限。&lt;/li&gt;&#xA;&lt;li&gt;要用户资料，要提前提交模板，要这样那样。&lt;/li&gt;&#xA;&lt;li&gt;价格倒是很便宜,4分5分都有。通过库来使用也是很简单快捷。&lt;/li&gt;&#xA;&lt;li&gt;仿佛更适合发一些固定样式的消息，比如常用的验证码。要发带姓名等个人信息的都不行。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../0703160-sms-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Frp内网穿透</title>
      <link>/it/2025/070121-frp/</link>
      <pubDate>Tue, 01 Jul 2025 13:13:28 +0000</pubDate>
      <guid>/it/2025/070121-frp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gofrp.org/zh-cn/&#34;&gt;Frp&lt;/a&gt;是一个开源的内网穿透工具,主要是将内网(端口)暴露给公网。它需要一个公网主机作服端。&lt;/p&gt;&#xA;&lt;p&gt;又是golang编写，就继承了跨平台和环保特点。从实例来学习。&lt;/p&gt;&#xA;&lt;h3 id=&#34;ssh内网&#34;&gt;SSH内网&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;服务端&lt;br&gt;&#xA;配置文件frps.toml,意思是服务端开放7000端口与客户端通信&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;bindPort = 7000&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;frps -c ./frps.toml 运行，指定配置文件&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tailscale VPN 虚拟组网</title>
      <link>/it/2025/063021-tailscale/</link>
      <pubDate>Mon, 30 Jun 2025 13:25:31 +0000</pubDate>
      <guid>/it/2025/063021-tailscale/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://tailscale.com/&#34;&gt;Tailscale&lt;/a&gt;是一款基于WireGuard协议的开源虚拟组网工具，提供安全、易用的点对点网络连接方案，适用于远程办公、内网穿透和异地组网等场景。优势在于零配置，跨平台。&lt;/p&gt;&#xA;&lt;p&gt;虽然我有ZeroTier，但使用来看，Tailscale还是简单一些。&lt;/p&gt;&#xA;&lt;p&gt;Windows和Linux下安装还是很简单，Android因为国内环境的问题，进入google市场安装就比较郁闷了。（当然还有iOS版本）&lt;/p&gt;</description>
    </item>
    <item>
      <title>VirtualHere USB: 远程共享USB</title>
      <link>/it/2025/062909-vusb/</link>
      <pubDate>Sun, 29 Jun 2025 01:47:52 +0000</pubDate>
      <guid>/it/2025/062909-vusb/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.virtualhere.com&#34;&gt;VirtualHere USB&lt;/a&gt;允许通过网络远程使用 USB 设备，就像它们是本地连接的一样。它让网络本身成为了传输 USB 信号的电缆（也称为 USB over IP，USB/IP，USB over WiFi，USB over Ethernet，USB 设备服务器）&lt;/p&gt;</description>
    </item>
    <item>
      <title>小智MCP:利用bigmodel对图片进行分析</title>
      <link>/it/2025/062613-pic/</link>
      <pubDate>Thu, 26 Jun 2025 05:49:48 +0000</pubDate>
      <guid>/it/2025/062613-pic/</guid>
      <description>&lt;p&gt;接上文&lt;a href=&#34;https://i.scwy.net/it/2025/060919-watch/&#34;&gt;“本地Ollama对图片分析”&lt;/a&gt;,这里是使用免费的bigmodel，对本地监控视频流进行图片截取，然后分析图片。&lt;/p&gt;&#xA;&lt;p&gt;因为是使用bigmodel免费提供的模型，据说只能分析网址提供的图片，而不是通常使用的本地文件base64的方式。&lt;/p&gt;&#xA;&lt;p&gt;这里使用https://gost.sian.one免费提供的映射功能，即将本地的服务映射为公网地址，使我们的图片有一个固定的公网地址，以提供bigmodel的模型进行分析。&lt;/p&gt;</description>
    </item>
    <item>
      <title>本地Ollama对图片分析</title>
      <link>/it/2025/060919-watch/</link>
      <pubDate>Mon, 09 Jun 2025 11:15:22 +0000</pubDate>
      <guid>/it/2025/060919-watch/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../060919-watch-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;也没有摄像头，将萤石云监控的视频流截了一张图，然后发送给本地Ollama进行分析，使用的qwen2.5vl:3b。&lt;br&gt;&#xA;相较使用免费的bigmodel之glm-4v-flash，本地识别效果高得多，但本机AMD集成显卡在Ollama中发挥不了作用，速度奇慢。（当前图片耗时80秒）&lt;/p&gt;</description>
    </item>
    <item>
      <title>PC显示器随环境光自适应</title>
      <link>/it/2025/060723-light/</link>
      <pubDate>Sat, 07 Jun 2025 15:55:01 +0000</pubDate>
      <guid>/it/2025/060723-light/</guid>
      <description>&lt;p&gt;有B站网友通过光线传感器+ESP32+PC端程序，实现了显示器随环境光变化而自适应亮度。解决了亮光环境下屏幕太暗，暗光环境下亮瞎狗眼，而又不想动手的懒人解决方法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang实现Win下的显示器亮度调整</title>
      <link>/code/2025/060722-brightness/</link>
      <pubDate>Sat, 07 Jun 2025 14:05:16 +0000</pubDate>
      <guid>/code/2025/060722-brightness/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;log&amp;#34;&#xA;&#x9;&amp;#34;syscall&amp;#34;&#xA;&#x9;&amp;#34;unsafe&amp;#34;&#xA;&#xA;&#x9;&amp;#34;golang.org/x/sys/windows&amp;#34;&#xA;)&#xA;&#xA;// 定义 Windows API 所需的常量和结构&#xA;const (&#xA;&#x9;MONITOR_DEFAULTTONULL    = 0x00000000&#xA;&#x9;MONITOR_DEFAULTTOPRIMARY = 0x00000001&#xA;&#x9;MONITOR_DEFAULTTONEAREST = 0x00000002&#xA;&#xA;&#x9;MC_CAPS_HORIZONTAL_POSITION            = 0x00000001&#xA;&#x9;MC_CAPS_VERTICAL_POSITION              = 0x00000002&#xA;&#x9;MC_CAPS_BRIGHTNESS                     = 0x00000004&#xA;&#x9;MC_CAPS_CONTRAST                       = 0x00000008&#xA;&#x9;MC_CAPS_COLOR_PRESET                   = 0x00000010&#xA;&#x9;MC_CAPS_RED_GREEN_BLUE_GAIN            = 0x00000020&#xA;&#x9;MC_CAPS_RED_GREEN_BLUE_DRIVE           = 0x00000040&#xA;&#x9;MC_CAPS_DEGAUSS                        = 0x00000080&#xA;&#x9;MC_CAPS_RESTORE_FACTORY_DEFAULTS       = 0x00000100&#xA;&#x9;MC_CAPS_RESTORE_FACTORY_COLOR_DEFAULTS = 0x00000200&#xA;&#x9;MC_CAPS_MONITOR_TECHNOLOGY_TYPE        = 0x00000400&#xA;&#x9;MC_CAPS_DISPLAY_AREA_SIZE              = 0x00000800&#xA;)&#xA;&#xA;// 定义 PHYSICAL_MONITOR 结构&#xA;type PHYSICAL_MONITOR struct {&#xA;&#x9;hPhysicalMonitor             windows.Handle&#xA;&#x9;szPhysicalMonitorDescription [128]uint16&#xA;}&#xA;&#xA;// 加载所需的 DLL 和函数&#xA;var (&#xA;&#x9;dxva2  = windows.NewLazySystemDLL(&amp;#34;dxva2.dll&amp;#34;)&#xA;&#x9;user32 = windows.NewLazySystemDLL(&amp;#34;user32.dll&amp;#34;)&#xA;&#xA;&#x9;// 显示设备枚举函数&#xA;&#x9;procEnumDisplayMonitors = user32.NewProc(&amp;#34;EnumDisplayMonitors&amp;#34;)&#xA;&#x9;procGetMonitorInfoW     = user32.NewProc(&amp;#34;GetMonitorInfoW&amp;#34;)&#xA;&#xA;&#x9;procGetNumberOfPhysicalMonitorsFromHMONITOR = dxva2.NewProc(&amp;#34;GetNumberOfPhysicalMonitorsFromHMONITOR&amp;#34;)&#xA;&#x9;procGetPhysicalMonitorsFromHMONITOR         = dxva2.NewProc(&amp;#34;GetPhysicalMonitorsFromHMONITOR&amp;#34;)&#xA;&#x9;procDestroyPhysicalMonitor                  = dxva2.NewProc(&amp;#34;DestroyPhysicalMonitor&amp;#34;)&#xA;&#xA;&#x9;// DDC/CI 控制函数&#xA;&#x9;procGetMonitorCapabilities = dxva2.NewProc(&amp;#34;GetMonitorCapabilities&amp;#34;)&#xA;&#x9;procGetMonitorBrightness   = dxva2.NewProc(&amp;#34;GetMonitorBrightness&amp;#34;)&#xA;&#x9;procSetMonitorBrightness   = dxva2.NewProc(&amp;#34;SetMonitorBrightness&amp;#34;)&#xA;)&#xA;&#xA;type HMONITOR uintptr&#xA;type HDC uintptr&#xA;&#xA;// 回调函数类型，用于 EnumDisplayMonitors&#xA;type MonitorEnumProc func(hMonitor HMONITOR, hdcMonitor HDC, lprcMonitor *RECT, dwData uintptr) uintptr&#xA;&#xA;// RECT 结构定义&#xA;type RECT struct {&#xA;&#x9;Left   int32&#xA;&#x9;Top    int32&#xA;&#x9;Right  int32&#xA;&#x9;Bottom int32&#xA;}&#xA;&#xA;// 枚举所有显示器并设置亮度&#xA;func SetBrightnessForAllMonitors(brightness uint32) error {&#xA;&#x9;// 确保亮度值在有效范围内（0-100）&#xA;&#x9;if brightness &amp;gt; 100 {&#xA;&#x9;&#x9;brightness = 100&#xA;&#x9;} else if brightness &amp;lt; 0 {&#xA;&#x9;&#x9;brightness = 0&#xA;&#x9;}&#xA;&#xA;&#x9;// 存储物理监视器的切片&#xA;&#x9;var physicalMonitors []PHYSICAL_MONITOR&#xA;&#xA;&#x9;// 枚举显示器的回调函数&#xA;&#x9;callback := func(hMonitor HMONITOR, hdcMonitor HDC, lprcMonitor *RECT, dwData uintptr) uintptr {&#xA;&#x9;&#x9;// 获取物理监视器数量&#xA;&#x9;&#x9;var monitorCount uint32&#xA;&#x9;&#x9;_, _, err := procGetNumberOfPhysicalMonitorsFromHMONITOR.Call(&#xA;&#x9;&#x9;&#x9;uintptr(hMonitor),&#xA;&#x9;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;monitorCount)))&#xA;&#x9;&#x9;if err != nil &amp;amp;&amp;amp; err.(syscall.Errno) != 0 {&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;获取物理监视器数量失败: %v&amp;#34;, err)&#xA;&#x9;&#x9;&#x9;return 1 // 继续枚举其他显示器&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;// 分配物理监视器数组&#xA;&#x9;&#x9;monitors := make([]PHYSICAL_MONITOR, monitorCount)&#xA;&#x9;&#x9;_, _, err = procGetPhysicalMonitorsFromHMONITOR.Call(&#xA;&#x9;&#x9;&#x9;uintptr(hMonitor),&#xA;&#x9;&#x9;&#x9;uintptr(monitorCount),&#xA;&#x9;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;monitors[0])))&#xA;&#x9;&#x9;if err != nil &amp;amp;&amp;amp; err.(syscall.Errno) != 0 {&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;获取物理监视器信息失败: %v&amp;#34;, err)&#xA;&#x9;&#x9;&#x9;return 1 // 继续枚举其他显示器&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;// 添加到物理监视器列表&#xA;&#x9;&#x9;physicalMonitors = append(physicalMonitors, monitors...)&#xA;&#xA;&#x9;&#x9;return 1 // 继续枚举其他显示器&#xA;&#x9;}&#xA;&#xA;&#x9;// 枚举所有显示器&#xA;&#x9;_, _, err := procEnumDisplayMonitors.Call(&#xA;&#x9;&#x9;0,&#xA;&#x9;&#x9;0,&#xA;&#x9;&#x9;uintptr(syscall.NewCallback(MonitorEnumProc(callback))),&#xA;&#x9;&#x9;0)&#xA;&#x9;if err != nil &amp;amp;&amp;amp; err.(syscall.Errno) != 0 {&#xA;&#x9;&#x9;return fmt.Errorf(&amp;#34;枚举显示器失败: %v&amp;#34;, err)&#xA;&#x9;}&#xA;&#xA;&#x9;// 为每个物理监视器设置亮度&#xA;&#x9;for _, monitor := range physicalMonitors {&#xA;&#x9;&#x9;// 获取显示器功能&#xA;&#x9;&#x9;var capabilities DWORD&#xA;&#x9;&#x9;var supportedColorTemperatures DWORD&#xA;&#x9;&#x9;_, _, err := procGetMonitorCapabilities.Call(&#xA;&#x9;&#x9;&#x9;uintptr(monitor.hPhysicalMonitor),&#xA;&#x9;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;capabilities)),&#xA;&#x9;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;supportedColorTemperatures)))&#xA;&#x9;&#x9;if err != nil &amp;amp;&amp;amp; err.(syscall.Errno) != 0 {&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;获取显示器功能失败: %v&amp;#34;, err)&#xA;&#x9;&#x9;&#x9;continue&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;// 检查显示器是否支持亮度调节&#xA;&#x9;&#x9;if capabilities&amp;amp;MC_CAPS_BRIGHTNESS == 0 {&#xA;&#x9;&#x9;&#x9;log.Println(&amp;#34;此显示器不支持亮度调节&amp;#34;)&#xA;&#x9;&#x9;&#x9;continue&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;// 获取当前亮度范围&#xA;&#x9;&#x9;var minimumBrightness, currentBrightness, maximumBrightness uint32&#xA;&#x9;&#x9;_, _, err = procGetMonitorBrightness.Call(&#xA;&#x9;&#x9;&#x9;uintptr(monitor.hPhysicalMonitor),&#xA;&#x9;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;minimumBrightness)),&#xA;&#x9;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;currentBrightness)),&#xA;&#x9;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;maximumBrightness)))&#xA;&#x9;&#x9;if err != nil &amp;amp;&amp;amp; err.(syscall.Errno) != 0 {&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;获取亮度范围失败: %v&amp;#34;, err)&#xA;&#x9;&#x9;&#x9;continue&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;// 计算实际亮度值（将0-100映射到显示器的最小-最大范围）&#xA;&#x9;&#x9;actualBrightness := minimumBrightness + (brightness * (maximumBrightness - minimumBrightness) / 100)&#xA;&#xA;&#x9;&#x9;// 设置亮度&#xA;&#x9;&#x9;_, _, err = procSetMonitorBrightness.Call(&#xA;&#x9;&#x9;&#x9;uintptr(monitor.hPhysicalMonitor),&#xA;&#x9;&#x9;&#x9;uintptr(actualBrightness))&#xA;&#x9;&#x9;if err != nil &amp;amp;&amp;amp; err.(syscall.Errno) != 0 {&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;设置亮度失败: %v&amp;#34;, err)&#xA;&#x9;&#x9;&#x9;continue&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;fmt.Printf(&amp;#34;成功将显示器 %s 的亮度设置为 %d%%\n&amp;#34;,&#xA;&#x9;&#x9;&#x9;windows.UTF16ToString(monitor.szPhysicalMonitorDescription[:]), brightness)&#xA;&#xA;&#x9;&#x9;// 关闭物理监视器句柄&#xA;&#x9;&#x9;procDestroyPhysicalMonitor.Call(uintptr(monitor.hPhysicalMonitor))&#xA;&#x9;}&#xA;&#xA;&#x9;return nil&#xA;}&#xA;&#xA;// DWORD 类型定义&#xA;type DWORD uint32&#xA;&#xA;func GetCurrentBrightnessForAllMonitors() error {&#xA;&#x9;var physicalMonitors []PHYSICAL_MONITOR&#xA;&#xA;&#x9;callback := func(hMonitor HMONITOR, hdcMonitor HDC, lprcMonitor *RECT, dwData uintptr) uintptr {&#xA;&#x9;&#x9;var monitorCount uint32&#xA;&#x9;&#x9;_, _, err := procGetNumberOfPhysicalMonitorsFromHMONITOR.Call(&#xA;&#x9;&#x9;&#x9;uintptr(hMonitor),&#xA;&#x9;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;monitorCount)))&#xA;&#x9;&#x9;if err != nil &amp;amp;&amp;amp; err.(syscall.Errno) != 0 {&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;获取物理监视器数量失败: %v&amp;#34;, err)&#xA;&#x9;&#x9;&#x9;return 1&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;monitors := make([]PHYSICAL_MONITOR, monitorCount)&#xA;&#x9;&#x9;_, _, err = procGetPhysicalMonitorsFromHMONITOR.Call(&#xA;&#x9;&#x9;&#x9;uintptr(hMonitor),&#xA;&#x9;&#x9;&#x9;uintptr(monitorCount),&#xA;&#x9;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;monitors[0])))&#xA;&#x9;&#x9;if err != nil &amp;amp;&amp;amp; err.(syscall.Errno) != 0 {&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;获取物理监视器信息失败: %v&amp;#34;, err)&#xA;&#x9;&#x9;&#x9;return 1&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;physicalMonitors = append(physicalMonitors, monitors...)&#xA;&#x9;&#x9;return 1&#xA;&#x9;}&#xA;&#xA;&#x9;_, _, err := procEnumDisplayMonitors.Call(&#xA;&#x9;&#x9;0,&#xA;&#x9;&#x9;0,&#xA;&#x9;&#x9;uintptr(syscall.NewCallback(MonitorEnumProc(callback))),&#xA;&#x9;&#x9;0)&#xA;&#x9;if err != nil &amp;amp;&amp;amp; err.(syscall.Errno) != 0 {&#xA;&#x9;&#x9;return fmt.Errorf(&amp;#34;枚举显示器失败: %v&amp;#34;, err)&#xA;&#x9;}&#xA;&#xA;&#x9;for _, monitor := range physicalMonitors {&#xA;&#x9;&#x9;var minimumBrightness, currentBrightness, maximumBrightness uint32&#xA;&#x9;&#x9;_, _, err := procGetMonitorBrightness.Call(&#xA;&#x9;&#x9;&#x9;uintptr(monitor.hPhysicalMonitor),&#xA;&#x9;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;minimumBrightness)),&#xA;&#x9;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;currentBrightness)),&#xA;&#x9;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;maximumBrightness)))&#xA;&#x9;&#x9;if err != nil &amp;amp;&amp;amp; err.(syscall.Errno) != 0 {&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;获取亮度范围失败: %v&amp;#34;, err)&#xA;&#x9;&#x9;&#x9;continue&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;percent := 0&#xA;&#x9;&#x9;if maximumBrightness &amp;gt; minimumBrightness {&#xA;&#x9;&#x9;&#x9;percent = int((currentBrightness - minimumBrightness) * 100 / (maximumBrightness - minimumBrightness))&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;fmt.Printf(&amp;#34;显示器 %s 当前亮度为 %d%%（原始值: %d）\n&amp;#34;,&#xA;&#x9;&#x9;&#x9;windows.UTF16ToString(monitor.szPhysicalMonitorDescription[:]), percent, currentBrightness)&#xA;&#x9;&#x9;procDestroyPhysicalMonitor.Call(uintptr(monitor.hPhysicalMonitor))&#xA;&#x9;}&#xA;&#x9;return nil&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;GetCurrentBrightnessForAllMonitors()  // 获取当前亮度&#xA;&#x9;// 设置亮度为 25%&#xA;&#x9;err := SetBrightnessForAllMonitors(25)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;log.Fatalf(&amp;#34;设置亮度时出错: %v&amp;#34;, err)&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>小智AI加入MCP功能</title>
      <link>/it/2025/052317-xiaozhi/</link>
      <pubDate>Fri, 23 May 2025 09:01:51 +0000</pubDate>
      <guid>/it/2025/052317-xiaozhi/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://i.scwy.net/it/2025/021609-ai-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://i.scwy.net/it/2025/021609-ai/&#34;&gt;之前购了一个小智AI&lt;/a&gt;，最近比较火的一个项目，它就是你的随身AI助手。&lt;/p&gt;&#xA;&lt;p&gt;当前1.6.2版本，经网友介绍，发现它已经支持MCP功能。这样就不用再在本地部署小智服务端，运行一个MCP服务就，通过官方(&lt;a href=&#34;https://xiaozhi.me/&#34;&gt;https://xiaozhi.me/&lt;/a&gt;)就可以支持本地丰富的功能了。&lt;/p&gt;&#xA;&lt;p&gt;给的&lt;a href=&#34;https://github.com/78/mcp-calculator&#34;&gt;官方示例&lt;/a&gt;很简单，也不算复杂。计划将它Golang化。&lt;/p&gt;&#xA;&lt;p&gt;添加了一些自己的功能&lt;br&gt;&#xA;&lt;img src=&#34;../052317-xiaozhi-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>静态文件打包：把Hugo写的博客打包带走</title>
      <link>/code/2025/052021-zipblog/</link>
      <pubDate>Tue, 20 May 2025 13:32:29 +0000</pubDate>
      <guid>/code/2025/052021-zipblog/</guid>
      <description>&lt;p&gt;想把本博客站打包成一个可执行的Web服务：运行此程序，就可以通过浏览器访问，且可以跨平台使用（Golang先天优势）。&lt;/p&gt;&#xA;&lt;p&gt;从打包的情况来看，可执行程序本身未压缩就在10MB左右。加上资源后540MB，upx压缩后535MB，hugo的发布文件夹public共有533MB。看起来它只是压缩了自己。&lt;/p&gt;</description>
    </item>
    <item>
      <title>A地查看B地的萤石云摄像头</title>
      <link>/it/2025/051309-rtsp/</link>
      <pubDate>Tue, 13 May 2025 01:18:58 +0000</pubDate>
      <guid>/it/2025/051309-rtsp/</guid>
      <description>&lt;p&gt;B地其实就是自己家，安装了摄像头；A地是出租屋。两者之间已经搭建了内网（Zerotier）。这里还需要一个电脑作为中介，将视频转发。&lt;/p&gt;&#xA;&lt;h3 id=&#34;方案1&#34;&gt;方案1：&lt;/h3&gt;&#xA;&lt;p&gt;似乎可以有多个客户端（通过mediamtx再广播?)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nats 轻量级、低延迟的分布式通信</title>
      <link>/code/2025/050511-nats/</link>
      <pubDate>Mon, 05 May 2025 03:01:30 +0000</pubDate>
      <guid>/code/2025/050511-nats/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://nats.io/&#34;&gt;Nats官网&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://nats.io/img/logos/nats-horizontal-color.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/nats-io&#34;&gt;Nats-io&lt;/a&gt;  云原生高性能消息系统，专注轻量级、低延迟的分布式通信。核心服务器用 Go 语言开发，客户端覆盖 40+ 语言（Go、Java、Python、JS 等）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Caddy对WASM压缩加速</title>
      <link>/it/2025/042522-caddy/</link>
      <pubDate>Fri, 25 Apr 2025 14:16:49 +0000</pubDate>
      <guid>/it/2025/042522-caddy/</guid>
      <description>&lt;p&gt;试玩了一个网友的游戏还不错&lt;a href=&#34;https://i.scwy.net/num_chomp/&#34;&gt;https://i.scwy.net/num_chomp/&lt;/a&gt;，把它导出成html5。&lt;/p&gt;&#xA;&lt;p&gt;但Godot的通病就是导出文件比较大。这个H5导出后有70多MB，一个wasm文件都47MB。这对于一个网页有点灾难。&lt;/p&gt;</description>
    </item>
    <item>
      <title>快速实现在线电台播放器</title>
      <link>/code/2025/042313-webradio/</link>
      <pubDate>Wed, 23 Apr 2025 05:19:54 +0000</pubDate>
      <guid>/code/2025/042313-webradio/</guid>
      <description>&lt;p&gt;也有有段时间没写godot了，今天这个是通过插件实现一个在线电台播放器。插件看起来也不复杂。&lt;/p&gt;&#xA;&lt;p&gt;插件地址：https://github.com/jefvaia/Godot-WebRadio&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go结合Ollama调用MCP服务</title>
      <link>/code/2025/042222-gomcp/</link>
      <pubDate>Tue, 22 Apr 2025 14:09:29 +0000</pubDate>
      <guid>/code/2025/042222-gomcp/</guid>
      <description>&lt;p&gt;与AI多番“较量”（交互、改错、提示），以下实现通过提示词调用MCP服务（另一种是function call)。&lt;/p&gt;&#xA;&lt;p&gt;交互使用了本地Ollama qwen2.5。MCP服务是一个简单的时区时间功能。类似于&lt;a href=&#34;https://i.scwy.net/code/2025/041009-mcp/&#34;&gt;此文章&lt;/a&gt;中实现的SSE时间服务。&lt;/p&gt;</description>
    </item>
    <item>
      <title>纪念日提醒 在线工具</title>
      <link>/it/2025/041116-days/</link>
      <pubDate>Fri, 11 Apr 2025 08:17:54 +0000</pubDate>
      <guid>/it/2025/041116-days/</guid>
      <description>&lt;p&gt;年龄越大，记性越差。也有可能是要记的东西太多。也有可能是太忙。&lt;br&gt;&#xA;反正要忘记一件事有许多借口。&lt;/p&gt;&#xA;&lt;p&gt;最近两天做了一个提醒工具，即做给自己，也可以让有需要的人使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>访问NTFS的MFT表和USN日志实现搜索文件</title>
      <link>/code/2025/041014-search/</link>
      <pubDate>Thu, 10 Apr 2025 06:49:48 +0000</pubDate>
      <guid>/code/2025/041014-search/</guid>
      <description>&lt;p&gt;Everything的核心原理是直接读取NTFS文件系统的MFT表和USN日志实现快速索引。在Golang中可通过第三方库操作这些底层结构：&lt;/p&gt;&#xA;&lt;p&gt;依赖库：&lt;br&gt;&#xA;使用github.com/gentlemanautomaton/volmgmt库访问NTFS的MFT表和USN日志。&lt;br&gt;&#xA;流程：&lt;br&gt;&#xA;获取磁盘卷句柄（volume.New）&lt;br&gt;&#xA;读取MFT表（vol.MFT()）&lt;br&gt;&#xA;遍历USN日志记录（mft.Enumerate)&lt;br&gt;&#xA;缓存记录并解析文件路径（usn.Cache）&lt;/p&gt;</description>
    </item>
    <item>
      <title>关注MCP AI模型交互协议</title>
      <link>/code/2025/041009-mcp/</link>
      <pubDate>Thu, 10 Apr 2025 01:09:31 +0000</pubDate>
      <guid>/code/2025/041009-mcp/</guid>
      <description>&lt;p&gt;据说Go官方也在更加拥抱MCP，也就是AI。前两天也做了一点测试。&lt;br&gt;&#xA;MCP 是 API 的一个子集，专为 AI 模型交互优化，更关注 高效计算、低延迟、大规模模型数据交换。&lt;/p&gt;</description>
    </item>
    <item>
      <title>TraeCN使用及技巧</title>
      <link>/it/2025/040908-trae/</link>
      <pubDate>Wed, 09 Apr 2025 00:18:07 +0000</pubDate>
      <guid>/it/2025/040908-trae/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;关闭TraeCN的变量类型提示&lt;br&gt;&#xA;最近这一版(0.3.7)出现了变量类型提示，原本是好意，但个人极不习惯。最好是在需要的时候才显示，平时隐藏。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&amp;lt;1&amp;gt;. 打开设置&lt;br&gt;&#xA;&amp;lt;2&amp;gt;. Editor设置&lt;br&gt;&#xA;&amp;lt;3&amp;gt;. 搜索“Inline Hints”&lt;br&gt;&#xA;&amp;lt;4&amp;gt;. Editor &amp;gt; Inlay Hints: Enabled 中选择“offUnlessPressed”&lt;/p&gt;</description>
    </item>
    <item>
      <title>一个简单的资源共享服务器</title>
      <link>/code/2025/040517-server/</link>
      <pubDate>Sat, 05 Apr 2025 09:02:56 +0000</pubDate>
      <guid>/code/2025/040517-server/</guid>
      <description>&lt;p&gt;项目中的子功能：共享一些音视频、PDF资源。功能很简单，代码也就千行左右。主要用于一步步实践实现一些功能。&lt;br&gt;&#xA;使用TranCN编辑器，与AI合作确实减轻了一些工作量，不过并不像自媒体文章吹的那样一键生成啥的。&lt;br&gt;&#xA;原本这样的共享服务软件还是不少，也有Golang跨平台的。但它们没有通过API来实现登陆的，似乎也没有限速。&lt;br&gt;&#xA;整体还是比较绿色，仅需两个文件(另一个是IP定位数据库，完全可以让主程序自释放)&lt;/p&gt;</description>
    </item>
    <item>
      <title>关注银发经济及思考</title>
      <link>/other/2025/032319-silvereconomy/</link>
      <pubDate>Sun, 23 Mar 2025 11:13:46 +0000</pubDate>
      <guid>/other/2025/032319-silvereconomy/</guid>
      <description>&lt;p&gt;银发经济是国家都在提的热点，也有巨大的市场需求。&lt;br&gt;&#xA;老龄化是中国面临的一大挑战,但其中也蕴含着巨大的经济机遇。银发经济报告指出,新老人有新的需求,这对企业而言意味着新的机会。今天的老年人与过去不同,他们更注重生活质量,有活力,有梦想。因此,企业需要重新理解老人,关注他们的新需求。老人的核心痛点可概括为现状不满、生活不便、未来不安。不满、不便、不安背后潜藏着巨大的市场需求。&lt;br&gt;&#xA;不要一说到银发经济就是养老。而是关注银发人群的全方位需求，特别是情感需求。&lt;br&gt;&#xA;这里收集一些零星的想法及思考。&lt;/p&gt;</description>
    </item>
    <item>
      <title>个人微信收费功能应用</title>
      <link>/it/2025/031921-pay/</link>
      <pubDate>Wed, 19 Mar 2025 13:51:55 +0000</pubDate>
      <guid>/it/2025/031921-pay/</guid>
      <description>&lt;p&gt;与&lt;a href=&#34;https://i.scwy.net/code/2023/042817-ocr/&#34;&gt;之前的方案&lt;/a&gt;类似，这次使用了Umi-OCR，当前的最新版本支持HTTP服务，占用资源也不多。可惜一点的是它是一个GUI应用。&lt;/p&gt;&#xA;&lt;p&gt;直接附上代码，原理就是：1.adb手机截图  2.OCR识别  3.判断付费(这段代码没有)&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;bytes&amp;#34;&#xA;&#x9;&amp;#34;encoding/base64&amp;#34;&#xA;&#x9;&amp;#34;encoding/json&amp;#34;&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;io&amp;#34;&#xA;&#x9;&amp;#34;net/http&amp;#34;&#xA;&#x9;&amp;#34;os&amp;#34;&#xA;&#x9;&amp;#34;os/exec&amp;#34;&#xA;&#x9;&amp;#34;time&amp;#34;&#xA;)&#xA;&#xA;// OCR请求结构体&#xA;type OCRRequest struct {&#xA;&#x9;Base64  string            `json:&amp;#34;base64&amp;#34;`&#xA;&#x9;Options map[string]string `json:&amp;#34;options,omitempty&amp;#34;`&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;// 1. 通过ADB截取屏幕&#xA;&#x9;imagePath, err := captureScreen()&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(fmt.Sprintf(&amp;#34;截图失败: %v&amp;#34;, err))&#xA;&#x9;}&#xA;&#x9;defer os.Remove(imagePath) // 清理临时文件&#xA;&#xA;&#x9;// 2. 读取图片并编码为Base64&#xA;&#x9;base64Str, err := imageToBase64(imagePath)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(fmt.Sprintf(&amp;#34;Base64编码失败: %v&amp;#34;, err))&#xA;&#x9;}&#xA;&#xA;&#x9;// 3. 构造请求体&#xA;&#x9;reqData := OCRRequest{&#xA;&#x9;&#x9;Base64: base64Str,&#xA;&#x9;&#x9;Options: map[string]string{&#xA;&#x9;&#x9;&#x9;&amp;#34;data.format&amp;#34;: &amp;#34;text&amp;#34;,&#xA;&#x9;&#x9;},&#xA;&#x9;}&#xA;&#xA;&#x9;// 4. 发送HTTP请求&#xA;&#x9;url := &amp;#34;http://127.0.0.1:1224/api/ocr&amp;#34;&#xA;&#x9;resp, err := sendOCRRequest(url, reqData)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(fmt.Sprintf(&amp;#34;API请求失败: %v&amp;#34;, err))&#xA;&#x9;}&#xA;&#xA;&#x9;fmt.Printf(&amp;#34;识别结果: %+v\n&amp;#34;, resp)&#xA;}&#xA;&#xA;// ADB截图实现（需确保adb在PATH中）&#xA;func captureScreen() (string, error) {&#xA;&#x9;timestamp := time.Now().Format(&amp;#34;20060102_150405&amp;#34;)&#xA;&#x9;remotePath := fmt.Sprintf(&amp;#34;/sdcard/screenshot_%s.png&amp;#34;, timestamp)&#xA;&#x9;localPath := fmt.Sprintf(&amp;#34;screenshot_%s.png&amp;#34;, timestamp)&#xA;&#xA;&#x9;// 执行截图命令&#xA;&#x9;cmd := exec.Command(&amp;#34;adb&amp;#34;, &amp;#34;shell&amp;#34;, &amp;#34;screencap&amp;#34;, &amp;#34;-p&amp;#34;, remotePath)&#xA;&#x9;if err := cmd.Run(); err != nil {&#xA;&#x9;&#x9;return &amp;#34;&amp;#34;, fmt.Errorf(&amp;#34;执行ADB截图命令失败: %v&amp;#34;, err)&#xA;&#x9;}&#xA;&#xA;&#x9;// 拉取截图到本地&#xA;&#x9;cmd = exec.Command(&amp;#34;adb&amp;#34;, &amp;#34;pull&amp;#34;, remotePath, localPath)&#xA;&#x9;if err := cmd.Run(); err != nil {&#xA;&#x9;&#x9;return &amp;#34;&amp;#34;, fmt.Errorf(&amp;#34;拉取截图文件失败: %v&amp;#34;, err)&#xA;&#x9;}&#xA;&#xA;&#x9;// 清理设备端文件&#xA;&#x9;exec.Command(&amp;#34;adb&amp;#34;, &amp;#34;shell&amp;#34;, &amp;#34;rm&amp;#34;, remotePath).Run()&#xA;&#xA;&#x9;return localPath, nil&#xA;}&#xA;&#xA;// 图片转Base64（不包含Data URI前缀）&#xA;func imageToBase64(path string) (string, error) {&#xA;&#x9;file, err := os.Open(path)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;return &amp;#34;&amp;#34;, err&#xA;&#x9;}&#xA;&#x9;defer file.Close()&#xA;&#xA;&#x9;bytes, err := io.ReadAll(file)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;return &amp;#34;&amp;#34;, err&#xA;&#x9;}&#xA;&#xA;&#x9;return base64.StdEncoding.EncodeToString(bytes), nil&#xA;}&#xA;&#xA;// 定义API响应结构体（仅保留data字段）&#xA;type OCRResponse struct {&#xA;&#x9;Data interface{} `json:&amp;#34;data&amp;#34;` // 根据实际API返回结构定义具体类型&#xA;}&#xA;&#xA;// 发送OCR请求（支持自定义选项）&#xA;func sendOCRRequest(url string, reqData OCRRequest) (interface{}, error) {&#xA;&#x9;jsonData, err := json.Marshal(reqData)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;return nil, fmt.Errorf(&amp;#34;JSON序列化失败: %v&amp;#34;, err)&#xA;&#x9;}&#xA;&#xA;&#x9;resp, err := http.Post(url, &amp;#34;application/json&amp;#34;, bytes.NewReader(jsonData))&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;return nil, fmt.Errorf(&amp;#34;HTTP请求失败: %v&amp;#34;, err)&#xA;&#x9;}&#xA;&#x9;defer resp.Body.Close()&#xA;&#xA;&#x9;// 仅解析data字段&#xA;&#x9;var response struct {&#xA;&#x9;&#x9;Data interface{} `json:&amp;#34;data&amp;#34;`&#xA;&#x9;}&#xA;&#x9;if err := json.NewDecoder(resp.Body).Decode(&amp;amp;response); err != nil {&#xA;&#x9;&#x9;return nil, fmt.Errorf(&amp;#34;JSON解析失败: %v&amp;#34;, err)&#xA;&#x9;}&#xA;&#xA;&#x9;return response.Data, nil&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Cloudflare动态域名</title>
      <link>/it/2025/031321-cloudflare/</link>
      <pubDate>Thu, 13 Mar 2025 13:55:56 +0000</pubDate>
      <guid>/it/2025/031321-cloudflare/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash&#xA;auth_token=&amp;#34;&amp;#34;&#xA;zone_id=&amp;#34;&amp;#34;&#xA;record_name=&amp;#34;scwy.net&amp;#34;&#xA;current_ip=$(curl -s4 https://icanhazip.com)&#xA;email=&amp;#34;&amp;#34;&#xA;record_id=&amp;#34;&amp;#34;&#xA;&#xA;# 更新DNS记录&#xA;curl -X PATCH &amp;#34;https://api.cloudflare.com/client/v4/zones/$zone_id/dns_records/$record_id&amp;#34; \&#xA;     -H &amp;#34;Authorization: Bearer $auth_token&amp;#34; \&#xA;     -H &amp;#34;Content-Type: application/json&amp;#34; \&#xA;     --data &amp;#34;{\&amp;#34;type\&amp;#34;:\&amp;#34;A\&amp;#34;,\&amp;#34;name\&amp;#34;:\&amp;#34;$record_name\&amp;#34;,\&amp;#34;content\&amp;#34;:\&amp;#34;$current_ip\&amp;#34;}&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>AI使用的一些感受与总结</title>
      <link>/it/2025/031316-ai/</link>
      <pubDate>Thu, 13 Mar 2025 08:10:47 +0000</pubDate>
      <guid>/it/2025/031316-ai/</guid>
      <description>&lt;p&gt;以下使用基于GRT6 32GB内存下。&lt;br&gt;&#xA;Ollama: 不能使用本机AMD集成显卡，占用CPU较高。两者的速度基本差不多。&lt;br&gt;&#xA;LM Studio: 能使用AMD集成显卡，占用CPU降低。这样的好处是电脑还可以开其它应用。两者的速度基本差不多。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI解决下载模型问题</title>
      <link>/code/2025/030809-model/</link>
      <pubDate>Sat, 08 Mar 2025 01:30:26 +0000</pubDate>
      <guid>/code/2025/030809-model/</guid>
      <description>&lt;p&gt;现在使用AI就和以前使用搜索引擎一样，在搜索上提升了一个档次。&lt;/p&gt;&#xA;&lt;p&gt;在试用 &lt;a href=&#34;https://github.com/SparkAudio/Spark-TTS&#34;&gt;https://github.com/SparkAudio/Spark-TTS&lt;/a&gt; 这个TTS引擎时，需要下载模型&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;from huggingface_hub import snapshot_download&#xA;import os&#xA;&#xA;# Set download path&#xA;model_dir = &amp;#34;pretrained_models/Spark-TTS-0.5B&amp;#34;&#xA;&#xA;# Check if model already exists&#xA;if os.path.exists(model_dir) and len(os.listdir(model_dir)) &amp;gt; 0:&#xA;    print(&amp;#34;Model files already exist. Skipping download.&amp;#34;)&#xA;else:&#xA;    print(&amp;#34;Downloading model files...&amp;#34;)&#xA;    snapshot_download(&#xA;        repo_id=&amp;#34;SparkAudio/Spark-TTS-0.5B&amp;#34;,&#xA;        local_dir=model_dir,&#xA;        resume_download=True  # Resumes partial downloads&#xA;    )&#xA;    print(&amp;#34;Download complete!&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;蛋是，国内这个环境。遇事不决问AI。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Carbon golang时间库</title>
      <link>/it/2025/030620-carbon/</link>
      <pubDate>Thu, 06 Mar 2025 12:41:11 +0000</pubDate>
      <guid>/it/2025/030620-carbon/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/dromara/carbon&#34;&gt;Carbon&lt;/a&gt;是一个轻量级、语义化、对开发者友好的golang时间处理库，支持链式调用。&lt;/p&gt;&#xA;&lt;p&gt;有详细的示例，还有农历和星座的一些用法。（农历暂只支持1900-2100）这里摘录一些看起来会用的。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// 今天此刻&#xA;fmt.Printf(&amp;#34;%s&amp;#34;, carbon.Now()) // 2020-08-05 13:14:15&#xA;carbon.Now().String() // 2020-08-05 13:14:15&#xA;carbon.Now().ToString() // 2020-08-05 13:14:15 +0800 CST&#xA;carbon.Now().ToDateTimeString() // 2020-08-05 13:14:15&#xA;// 今天日期&#xA;carbon.Now().ToDateString() // 2020-08-05&#xA;// 今天时间&#xA;carbon.Now().ToTimeString() // 13:14:15&#xA;&#xA;// 今天秒级时间戳&#xA;carbon.Now().Timestamp() // 1596604455&#xA;// 今天毫秒级时间戳&#xA;carbon.Now().TimestampMilli() // 1596604455999&#xA;// 今天微秒级时间戳&#xA;carbon.Now().TimestampMicro() // 1596604455999999&#xA;// 今天纳秒级时间戳&#xA;carbon.Now().TimestampNano() // 1596604455999999999&#xA;&#xA;// 昨天日期&#xA;carbon.Yesterday().ToDateString() // 2020-08-04&#xA;&#xA;carbon.Parse(&amp;#34;tomorrow&amp;#34;).ToString() // 2020-08-06 13:14:15 +0800 CST&#xA;&#xA;// 三个月后&#xA;carbon.Parse(&amp;#34;2020-02-29 13:14:15&amp;#34;).AddMonths(3).ToDateTimeString() // 2020-05-29 13:14:15&#xA;// 三天后&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).AddDays(3).ToDateTimeString() // 2020-08-08 13:14:15&#xA;// 相差多少月&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).DiffInMonths(carbon.Parse(&amp;#34;2020-07-05 13:14:15&amp;#34;)) // -1&#xA;// 相差多少天&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).DiffInDays(carbon.Parse(&amp;#34;2020-08-04 13:14:15&amp;#34;)) // -1&#xA;&#xA;&#xA;// 相差时长&#xA;now := carbon.Now()&#xA;now.DiffInDuration(now).String() // 0s&#xA;now.AddHour().DiffInDuration(now).String() // 1h0m0s&#xA;&#xA;// 是否是闰年&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).IsLeapYear() // true&#xA;&#xA;// 是否是当前时间&#xA;carbon.Now().IsNow() // true&#xA;// 是否是未来时间&#xA;carbon.Tomorrow().IsFuture() // true&#xA;// 是否是过去时间&#xA;carbon.Yesterday().IsPast() // true&#xA;&#xA;// 是否是周一&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).IsMonday() // false&#xA;&#xA;// 是否小于&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).Lt(carbon.Parse(&amp;#34;2020-08-06 13:14:15&amp;#34;)) // true&#xA;&#xA;// 获取本年第几天&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).DayOfYear() // 218&#xA;// 获取本年第几周&#xA;carbon.Parse(&amp;#34;2019-12-31 13:14:15&amp;#34;).WeekOfYear() // 1&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).WeekOfYear() // 32&#xA;// 获取本月第几天&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).DayOfMonth() // 5&#xA;// 获取本月第几周&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).WeekOfMonth() // 1&#xA;// 获取本周第几天&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).DayOfWeek() // 3&#xA;// 获取本月总天数&#xA;carbon.Parse(&amp;#34;2020-02-01 13:14:15&amp;#34;).DaysInMonth() // 29&#xA;// 获取本年总天数&#xA;carbon.Parse(&amp;#34;2019-08-05 13:14:15&amp;#34;).DaysInYear() // 365&#xA;&#xA;// 获取当前区域&#xA;carbon.Now().Locale() // en&#xA;carbon.Now().SetLocale(&amp;#34;zh-CN&amp;#34;).Locale() // zh-CN&#xA;// 获取当前星座&#xA;carbon.Now().Constellation() // Leo&#xA;carbon.Now().SetLocale(&amp;#34;en&amp;#34;).Constellation() // Leo&#xA;carbon.Now().SetLocale(&amp;#34;zh-CN&amp;#34;).Constellation() // 狮子座&#xA;&#xA;// 获取年龄&#xA;carbon.Parse(&amp;#34;2002-01-01 13:14:15&amp;#34;).Age() // 17&#xA;&#xA;// 是否是白羊座&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).IsAries() // false&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// 获取农历生肖&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).Lunar().Animal() // 鼠&#xA;// 获取农历节日&#xA;carbon.Parse(&amp;#34;2021-02-12 13:14:15&amp;#34;).Lunar().Festival() // 春节&#xA;// 获取农历月份&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).Lunar().Month() // 6&#xA;// 获取农历闰月月份&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).Lunar().LeapMonth() // 4&#xA;// 获取农历月字符串&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).Lunar().ToMonthString() // 六月&#xA;// 将农历 二零二三年腊月十一 转化为 公历&#xA;carbon.CreateFromLunar(2023, 12, 11, 0, 0, 0, false).ToDateTimeString() // 2024-01-21 00:00:00&#xA;// 是否是鼠年&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).Lunar().IsRatYear() // true&#xA;// 获取农历生肖&#xA;carbon.Parse(&amp;#34;2020-08-05 13:14:15&amp;#34;).Lunar().Animal() // 鼠&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Win11安装提示不符合最低要求</title>
      <link>/it/2025/030122-win11setup/</link>
      <pubDate>Sat, 01 Mar 2025 14:08:39 +0000</pubDate>
      <guid>/it/2025/030122-win11setup/</guid>
      <description>&lt;p&gt;在pve上安装win11总是提示不符合最低要求。&lt;/p&gt;&#xA;&lt;p&gt;修改注册表的方法，不算不算是盖茨给我们留的门。&lt;/p&gt;&#xA;&lt;p&gt;在选择语言处就按Shift+F10调出命令提示符，输入regedit，按Enter键调出注册表。&lt;/p&gt;</description>
    </item>
    <item>
      <title>小智AI研究及扩展</title>
      <link>/it/2025/021609-ai/</link>
      <pubDate>Sun, 16 Feb 2025 01:21:47 +0000</pubDate>
      <guid>/it/2025/021609-ai/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../021609-ai-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;购买了一个&lt;a href=&#34;https://xiaozhi.me/&#34;&gt;小智AI&lt;/a&gt;，它相当于一个“天猫智障精灵”或“小爱音箱”。当然没有它们那么完善，暂时还没有接入其它智能设备。不过接入了AI后，显得比较智能，且当它是一个“聊天助手”吧。&lt;/p&gt;&#xA;&lt;p&gt;如果能自行接入，即自己建立服务器，或者本地建立部份服务（即本地能够定义并响应部份关键词）就更强大了。&lt;/p&gt;&#xA;&lt;p&gt;看它开源的情况，应该可以自己做如上的一些改动。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Limbo兼容SQLite的数据库</title>
      <link>/it/2025/021608-limbo/</link>
      <pubDate>Sun, 16 Feb 2025 00:40:41 +0000</pubDate>
      <guid>/it/2025/021608-limbo/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/tursodatabase/limbo&#34;&gt;Limbo&lt;/a&gt;是一个正在进行中的数据库系统，使用Rust语言，兼容SQLite。目标是提升sqlite的安全性和高效性。&lt;/p&gt;&#xA;&lt;p&gt;sqlite经常被用到，主要是针对一些本地或小型项目。但它的并发性是比较差的。希望Limbo能够在并发性上有所改善。&lt;/p&gt;&#xA;&lt;p&gt;看起来它已经支持golang调用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>WLS的Ubuntu下运行Wails</title>
      <link>/code/2025/012421-wails/</link>
      <pubDate>Fri, 24 Jan 2025 13:36:22 +0000</pubDate>
      <guid>/code/2025/012421-wails/</guid>
      <description>&lt;p&gt;按说我是分别在Win和Ubuntu下进行wails的开发及测试。认识里面wls是没有界面的linux系统。&lt;/p&gt;&#xA;&lt;p&gt;今天重装了Win和wls，并且安装了ubuntu24。按wails在linux下的要求安装了相关doctor要求，以及 libwebkit2gtk-4.1-dev 库。它居然能正常运行，弹出GUI界面。虽然没有中文字，于是加载中文字体 apt-get install language-pack-zh-hans fonts-noto-cjk fonts-wqy-zenhei 它居然基本就正常了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Alpine轻巧的Linux系统</title>
      <link>/it/2025/011614-alpine/</link>
      <pubDate>Thu, 16 Jan 2025 06:36:48 +0000</pubDate>
      <guid>/it/2025/011614-alpine/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.alpinelinux.org/alpinelinux-logo.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;考虑对PC硬件的更小要求，试试&lt;a href=&#34;https://www.alpinelinux.org/downloads/&#34;&gt;Alpine&lt;/a&gt;这个轻巧的Linux系统，当前版本3.21.2。因为体积小，它经常用在Docker中作基础系统。&lt;br&gt;&#xA;安装完，添加了几个常用的工具，添加了Zerotier，占用空间500MB，内存60MB不到。PVE中启动速度非常快。看起来2GB内存+64GB硬盘都有余。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wails在Ubuntu(linux)下的使用</title>
      <link>/code/2025/011321-wails/</link>
      <pubDate>Mon, 13 Jan 2025 13:05:50 +0000</pubDate>
      <guid>/code/2025/011321-wails/</guid>
      <description>&lt;p&gt;希望主机资源占用比较小，节约点RMB，所以在Ubuntu上进行了测试。（我使用了一个精简的Ubuntu，最终还是成功的运行）&lt;/p&gt;&#xA;&lt;p&gt;按照wails doctor的提示安装npm,pkg-config,libgtk-3-dev，但卡在了libwebkit。注意：在中文文档中并没有如下提示：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wubuntu Kubuntu添加中文(五笔)输入法</title>
      <link>/it/2025/011316-kubuntu/</link>
      <pubDate>Mon, 13 Jan 2025 08:30:00 +0000</pubDate>
      <guid>/it/2025/011316-kubuntu/</guid>
      <description>&lt;p&gt;试了一下长得像Windows的Ubuntu。至少使用过WMI的不能在其下运行，看来还是得自己适配Linux。除了长得像Windows，据说能运行EXE(通过WINE能运行部份)和安卓(需要安装个啥,没成功)，暂时没有发现有啥优势。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot Tilemap 路径自动规范(待补充完整)</title>
      <link>/code/2025/010909-tilemap/</link>
      <pubDate>Thu, 09 Jan 2025 01:18:54 +0000</pubDate>
      <guid>/code/2025/010909-tilemap/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../010909-tilemap-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;在使用TileMap时，通常需要使用 CollisionPolygon2D 来规范玩家的可活动范围，这是比较麻烦的。这里试图用两种方法来自动规范，减少无效工作。特别是你有多个场景时。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pi zero3 树莓派 Zero3</title>
      <link>/it/2025/010821-pizero3/</link>
      <pubDate>Wed, 08 Jan 2025 13:06:09 +0000</pubDate>
      <guid>/it/2025/010821-pizero3/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../010821-pizero3-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Pi Zero2 采用4核心（1.0GHz）的博通BCM2710A1（BCM2837）处理器，搭配512MB LPDDR2内存和博通VideoCore IV GPU。距2021.10.28推出有这么久的时间了，是应该继续下一个版本了吧？好赖也跟AI接个轨呀。难道又象与第一代那样等6年？&lt;/p&gt;</description>
    </item>
    <item>
      <title>智能眼镜</title>
      <link>/it/2025/010817-eye/</link>
      <pubDate>Wed, 08 Jan 2025 09:15:21 +0000</pubDate>
      <guid>/it/2025/010817-eye/</guid>
      <description>&lt;p&gt;说2025是智能眼镜原年，这还是不太对，毕竟前些年就出来了各种各样的。可能今年没有找到更多的发展方向，手机也走入到了没有啥创新的节点。眼镜是一个不错的代替手机的方案，个人也是比较看好的。&lt;br&gt;&#xA;最近各个厂家也在陆续推出自己的智能眼镜产品。其中一类应该叫智能蓝牙眼镜。比之蓝牙眼镜多了拍照和语音AI的功能。&lt;br&gt;&#xA;说到语音AI，还是应该各人自有一套数据。通过一两年的与AI沟通，形成一套自己的小模型，它知道你的习惯，习惯你的习惯。&lt;br&gt;&#xA;另外，各个智能眼镜的开放程度是我比较关心的。能否让第三方方便的接入，扩充更有特色的应用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go-Netty 高性能网络库</title>
      <link>/code/2024/123019-gonetty/</link>
      <pubDate>Mon, 30 Dec 2024 11:18:45 +0000</pubDate>
      <guid>/code/2024/123019-gonetty/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/go-netty/go-netty&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;有段时间没有写东西了，完成了一些似有似无的东西。今天学习Go-Netty&lt;br&gt;&#xA;go-netty 是一款受netty启发的Go语言可扩展的高性能网络库&lt;/p&gt;&#xA;&lt;p&gt;AddLast(frame.LengthFieldCodec(binary.LittleEndian, 1024, 0, 2, 0, 2)). // 按照自定义协议解码帧（2字节的长度字段）&lt;br&gt;&#xA;AddLast(format.TextCodec()).    // 消息内容为文本格式(可自定义为 json，protobuf 等编解码器)&lt;br&gt;&#xA;bootstrap.Transport(tcp.New())  配置服务器(客户端)所使用的传输协议&lt;br&gt;&#xA;bootstrap.Listen(&amp;ldquo;tcp://0.0.0.0:6565&amp;rdquo;).Action(netty.WaitSignal(os.Kill, os.Interrupt))   开始监听端口并开始提供服务，直到收到指定信号后退出&lt;/p&gt;</description>
    </item>
    <item>
      <title>Miniserve小巧的跨平台文件服务器</title>
      <link>/it/2024/110612-miniserve/</link>
      <pubDate>Wed, 06 Nov 2024 04:54:17 +0000</pubDate>
      <guid>/it/2024/110612-miniserve/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/svenstaro/miniserve&#34;&gt;miniserve&lt;/a&gt;是Rust开发的工具，也跨平台。当前版本0.28.0，不到2MB的大小。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../110612-miniserve-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最简单的文件服务器: miniserve . 指定当前目录&lt;/p&gt;&#xA;&lt;p&gt;miniserve.exe E:\Linux\ -g -z -q -u -U -D -t &amp;ldquo;Ease&amp;rdquo; -p 80 &amp;ndash;auth ease:123123&lt;br&gt;&#xA;-g 允许tar.gz压缩&lt;br&gt;&#xA;-z 允许zip压缩&lt;br&gt;&#xA;-q 显示二维码（方便手机）&lt;br&gt;&#xA;-u 允许上传文件&lt;br&gt;&#xA;-U 允许创建目录&lt;br&gt;&#xA;-D 目录优先列出&lt;br&gt;&#xA;-t &amp;ldquo;Ease&amp;rdquo; 浏览器Title&lt;br&gt;&#xA;-p 端口定义&lt;br&gt;&#xA;&amp;ndash;auth 授权&lt;/p&gt;</description>
    </item>
    <item>
      <title>Brook跨平台网络工具</title>
      <link>/it/2024/110612-brook/</link>
      <pubDate>Wed, 06 Nov 2024 04:15:00 +0000</pubDate>
      <guid>/it/2024/110612-brook/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://brook.app/&#34;&gt;Brook&lt;/a&gt;又是Golang所作，自然的跨平台。&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/txthinking/brook&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;看了半天，也是似懂非懂，据说功能很强。作转发，作代码。后面有机会再回来学习。&lt;/p&gt;&#xA;&lt;p&gt;brook relay -f :80 -t 192.168.1.40:8088      转发：访问本机80端口，即转发到192.168.1.40:8088&lt;/p&gt;</description>
    </item>
    <item>
      <title>服务器稳定性思考</title>
      <link>/it/2024/103112-server/</link>
      <pubDate>Thu, 31 Oct 2024 04:01:56 +0000</pubDate>
      <guid>/it/2024/103112-server/</guid>
      <description>&lt;p&gt;刚发现服务器不能访问，联系服务商中。&lt;br&gt;&#xA;发现依靠某服务器进行多内网均衡，还是不够稳定，此服务器也会出现这样那样的问题。&lt;br&gt;&#xA;那应该向上移，依靠DNS服务器解析时进行均衡负载，在跳转服务器之前，对服务器的存活进行判断。服务商也应该保持多个。&lt;/p&gt;</description>
    </item>
    <item>
      <title>SingleInstance 唯一运行</title>
      <link>/code/2024/101121-singleinstance/</link>
      <pubDate>Fri, 11 Oct 2024 13:17:07 +0000</pubDate>
      <guid>/code/2024/101121-singleinstance/</guid>
      <description>&lt;p&gt;这是在Win下确保程序唯一运行的代码&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;syscall&amp;#34;&#xA;&#x9;&amp;#34;unsafe&amp;#34;&#xA;)&#xA;&#xA;var (&#xA;&#x9;kernel32        = syscall.NewLazyDLL(&amp;#34;kernel32.dll&amp;#34;)&#xA;&#x9;procCreateMutex = kernel32.NewProc(&amp;#34;CreateMutexW&amp;#34;)&#xA;)&#xA;&#xA;// from https://claude.ai/chat/38e56e68-e64a-4a1b-8272-7ac1a5e7ba82&#xA;func checkSingleInstance() bool {&#xA;&#x9;mutexName, err := syscall.UTF16PtrFromString(&amp;#34;Global\\StellateBrightnessUtilityMutex&amp;#34;)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;Error creating mutex name:&amp;#34;, err)&#xA;&#x9;&#x9;return false&#xA;&#x9;}&#xA;&#xA;&#x9;handle, _, lastErr := procCreateMutex.Call(&#xA;&#x9;&#x9;0,&#xA;&#x9;&#x9;0,&#xA;&#x9;&#x9;uintptr(unsafe.Pointer(mutexName)),&#xA;&#x9;)&#xA;&#xA;&#x9;if handle == 0 {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;Error creating mutex:&amp;#34;, lastErr)&#xA;&#x9;&#x9;return false&#xA;&#x9;}&#xA;&#xA;&#x9;// Check if the mutex already exists&#xA;&#x9;if lastErr == syscall.ERROR_ALREADY_EXISTS {&#xA;&#x9;&#x9;syscall.CloseHandle(syscall.Handle(handle))&#xA;&#x9;&#x9;fmt.Println(&amp;#34;Another instance is already running&amp;#34;)&#xA;&#x9;&#x9;return false&#xA;&#x9;}&#xA;&#xA;&#x9;// Keep the mutex handle open until the program exits&#xA;&#x9;return true&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>当前AI功能部份试用有感</title>
      <link>/it/2024/101119-ai/</link>
      <pubDate>Fri, 11 Oct 2024 11:48:41 +0000</pubDate>
      <guid>/it/2024/101119-ai/</guid>
      <description>&lt;p&gt;当前的AI各大模型还处于“社会主义的初级阶段”，并没有一些自媒体吹的那么神，更多多的是处于自媒体宣传的需要。&lt;br&gt;&#xA;从自己使用的感受来说，它确实能达到一些功能，就是在搜索的基础上进了一步。但大量的过时信息（特别是IT类的变化非常大）、错误信息，以及不同的环境导致的问题，它是根本无从处理的。现在的模型基本就是基于一个时间节点进行训练，短则半年，多则一年的时间空档，导致它出来的东西不能使用。当然，它确实有借鉴意义或启发作用。&lt;br&gt;&#xA;我试用了通义千问、Ollama、Cursor、Copilot等，基本都差不多这样。或许对于更新慢的知识方面，它会更有优势一些。但在IT方便，远达不到它替我编程的程度。&lt;br&gt;&#xA;就针对最近吹得神乎其神的编程器Cursor，我需要反复纠正它出现的问题，甚至有时还得自己啃代码自己动手。有些问题甚至它会反复在几个错答案之间跳来跳去，让你不得不放弃。&lt;/p&gt;</description>
    </item>
    <item>
      <title>EaseTools: 做一个自己的工具</title>
      <link>/it/2024/101118-etools/</link>
      <pubDate>Fri, 11 Oct 2024 10:06:41 +0000</pubDate>
      <guid>/it/2024/101118-etools/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../101118-etools-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;做一个自己的工具，可惜有些模块只支持Windows，希望有时间可以扩展到Linux下，并替代/减少一些第三方工具。&lt;/p&gt;&#xA;&lt;p&gt;文章最后更新：2024.11.8&lt;/p&gt;</description>
    </item>
    <item>
      <title>为多人提供AI服务</title>
      <link>/it/2024/100812-ai/</link>
      <pubDate>Tue, 08 Oct 2024 04:10:47 +0000</pubDate>
      <guid>/it/2024/100812-ai/</guid>
      <description>&lt;p&gt;通过本地部署Ollama，加载通义千问等大模型，可以在普通电脑上运行AI。&lt;br&gt;&#xA;进一步通过设置 OLLAMA_HOST ，可以为网络提供AI服务。&lt;br&gt;&#xA;再一步，将本机映射到外网，可以通过Ollama的手机APP为更多的手机用户有提供AI服务。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一种冷备方案</title>
      <link>/it/2024/092908-back/</link>
      <pubDate>Sun, 29 Sep 2024 00:56:22 +0000</pubDate>
      <guid>/it/2024/092908-back/</guid>
      <description>&lt;p&gt;冷备多数就是移动硬盘进行数据备份，热备一般是指长期在线备份。备份的目的都是为了安全，冷备一般做为热备的补充。另一个特点是磁盘在线/使用时间短，逻辑上寿命更长。同时也节电：长期在线一些基本不用的东西，总觉得是浪费。&lt;br&gt;&#xA;在个人“机房”里如何实现冷备呢？比如我在异地的家，就是里的“机房”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>templ 用Go构建HTML</title>
      <link>/code/2024/092622-templ/</link>
      <pubDate>Thu, 26 Sep 2024 14:47:14 +0000</pubDate>
      <guid>/code/2024/092622-templ/</guid>
      <description>&lt;p&gt;在学习新项目&lt;a href=&#34;https://docs.go-blueprint.dev/&#34;&gt;BluePrint&lt;/a&gt;时，又遇到知识盲点：&lt;a href=&#34;https://templ.guide/&#34;&gt;templ&lt;/a&gt;，补一补。&lt;/p&gt;&#xA;&lt;p&gt;templ即用golang来构建html，想必更加灵活和“熟悉”，功能也更强大。&lt;/p&gt;&#xA;&lt;p&gt;以下是直接机翻的templ特点：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;服务器端渲染：部署为无服务器函数、Docker 容器或标准 Go 程序。&lt;/li&gt;&#xA;&lt;li&gt;静态渲染：创建静态 HTML 文件以根据您的选择进行部署。&lt;/li&gt;&#xA;&lt;li&gt;编译代码：组件被编译成高性能的 Go 代码。&lt;/li&gt;&#xA;&lt;li&gt;使用 Go：调用任何 Go 代码，并使用标准的 if、switch 和 for 语句。&lt;/li&gt;&#xA;&lt;li&gt;无 JavaScript：不需要任何客户端或服务器端 JavaScript。&lt;/li&gt;&#xA;&lt;li&gt;出色的开发人员体验：附带 IDE 自动完成功能。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;示例代码：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang在Windows中定义全局热键</title>
      <link>/code/2024/092513-hotkey/</link>
      <pubDate>Wed, 25 Sep 2024 05:30:07 +0000</pubDate>
      <guid>/code/2024/092513-hotkey/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;flag&amp;#34;&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;unsafe&amp;#34;&#xA;&#xA;&#x9;&amp;#34;golang.org/x/sys/windows&amp;#34;&#xA;)&#xA;&#xA;var (&#xA;&#x9;user32               = windows.NewLazySystemDLL(&amp;#34;user32.dll&amp;#34;)&#xA;&#x9;procRegisterHotKey   = user32.NewProc(&amp;#34;RegisterHotKey&amp;#34;)&#xA;&#x9;procGetMessage       = user32.NewProc(&amp;#34;GetMessageW&amp;#34;)&#xA;&#x9;procTranslateMessage = user32.NewProc(&amp;#34;TranslateMessage&amp;#34;)&#xA;&#x9;procDispatchMessage  = user32.NewProc(&amp;#34;DispatchMessageW&amp;#34;)&#xA;)&#xA;&#xA;const (&#xA;&#x9;MOD_ALT     = 0x0001&#xA;&#x9;MOD_CONTROL = 0x0002&#xA;&#x9;MOD_SHIFT   = 0x0004&#xA;&#x9;MOD_WIN     = 0x0008&#xA;&#x9;WM_HOTKEY   = 0x0312&#xA;)&#xA;&#xA;// MSG represents a Windows message&#xA;type MSG struct {&#xA;&#x9;HWND   uintptr&#xA;&#x9;UINT   uint32&#xA;&#x9;WPARAM uintptr&#xA;&#x9;LPARAM uintptr&#xA;&#x9;Time   uint32&#xA;&#x9;Pt     struct{ X, Y int32 }&#xA;}&#xA;&#xA;// RegisterHotKey 注册热键&#xA;func RegisterHotKey(id int, modifiers uint, vk uint) error {&#xA;&#x9;ret, _, err := procRegisterHotKey.Call(&#xA;&#x9;&#x9;0,&#xA;&#x9;&#x9;uintptr(id),&#xA;&#x9;&#x9;uintptr(modifiers),&#xA;&#x9;&#x9;uintptr(vk),&#xA;&#x9;)&#xA;&#x9;if ret == 0 {&#xA;&#x9;&#x9;return err&#xA;&#x9;}&#xA;&#x9;return nil&#xA;}&#xA;&#xA;// StartHotKeyListener 启动热键监听&#xA;func StartHotKeyListener() {&#xA;&#x9;var msg MSG&#xA;&#x9;for {&#xA;&#x9;&#x9;ret, _, _ := procGetMessage.Call(uintptr(unsafe.Pointer(&amp;amp;msg)), 0, 0, 0)&#xA;&#xA;&#x9;&#x9;if ret == 0 {&#xA;&#x9;&#x9;&#x9;break&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;if msg.UINT == WM_HOTKEY {&#xA;&#x9;&#x9;&#x9;fmt.Println(&amp;#34;热键被触发!&amp;#34;)&#xA;&#x9;&#x9;&#x9;// 在这里添加你想要执行的操作&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;procTranslateMessage.Call(uintptr(unsafe.Pointer(&amp;amp;msg)))&#xA;&#x9;&#x9;procDispatchMessage.Call(uintptr(unsafe.Pointer(&amp;amp;msg)))&#xA;&#x9;}&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;// 命令行参数&#xA;&#x9;hotkey := flag.String(&amp;#34;hotkey&amp;#34;, &amp;#34;Ctrl+Alt+A&amp;#34;, &amp;#34;热键组合，例如 Ctrl+Alt+A&amp;#34;)&#xA;&#x9;flag.Parse()&#xA;&#xA;&#x9;// 解析热键组合&#xA;&#x9;var modifiers uint&#xA;&#x9;var vk uint&#xA;&#xA;&#x9;// 解析热键组合&#xA;&#x9;switch *hotkey {&#xA;&#x9;case &amp;#34;Ctrl+Alt+A&amp;#34;:&#xA;&#x9;&#x9;modifiers = MOD_CONTROL | MOD_ALT&#xA;&#x9;&#x9;vk = &amp;#39;A&amp;#39;&#xA;&#x9;case &amp;#34;Ctrl+Alt+B&amp;#34;:&#xA;&#x9;&#x9;modifiers = MOD_CONTROL | MOD_ALT&#xA;&#x9;&#x9;vk = &amp;#39;B&amp;#39;&#xA;&#x9;default:&#xA;&#x9;&#x9;fmt.Println(&amp;#34;不支持的热键组合:&amp;#34;, *hotkey)&#xA;&#x9;&#x9;return&#xA;&#x9;}&#xA;&#xA;&#x9;// 注册热键&#xA;&#x9;err := RegisterHotKey(1, modifiers, vk)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;注册热键失败:&amp;#34;, err)&#xA;&#x9;&#x9;return&#xA;&#x9;}&#xA;&#xA;&#x9;fmt.Printf(&amp;#34;热键 %s 已注册。按下这个组合键来触发事件。\n&amp;#34;, *hotkey)&#xA;&#xA;&#x9;// 启动热键监听&#xA;&#x9;StartHotKeyListener()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Golang调整显示器亮度</title>
      <link>/code/2024/092513-light/</link>
      <pubDate>Wed, 25 Sep 2024 05:02:58 +0000</pubDate>
      <guid>/code/2024/092513-light/</guid>
      <description>&lt;p&gt;在Win11下测试成功&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;syscall&amp;#34;&#xA;&#x9;&amp;#34;unsafe&amp;#34;&#xA;)&#xA;&#xA;var (&#xA;&#x9;user32                          = syscall.NewLazyDLL(&amp;#34;user32.dll&amp;#34;)&#xA;&#x9;dxva2                           = syscall.NewLazyDLL(&amp;#34;dxva2.dll&amp;#34;)&#xA;&#x9;getMonitorBrightness            = dxva2.NewProc(&amp;#34;GetMonitorBrightness&amp;#34;)&#xA;&#x9;setMonitorBrightness            = dxva2.NewProc(&amp;#34;SetMonitorBrightness&amp;#34;)&#xA;&#x9;destroyPhysicalMonitors         = dxva2.NewProc(&amp;#34;DestroyPhysicalMonitors&amp;#34;)&#xA;&#x9;getPhysicalMonitorsFromHMONITOR = dxva2.NewProc(&amp;#34;GetPhysicalMonitorsFromHMONITOR&amp;#34;)&#xA;&#x9;enumDisplayMonitors             = user32.NewProc(&amp;#34;EnumDisplayMonitors&amp;#34;)&#xA;)&#xA;&#xA;type PHYSICAL_MONITOR struct {&#xA;&#x9;hPhysicalMonitor             syscall.Handle&#xA;&#x9;szPhysicalMonitorDescription [128]uint16&#xA;}&#xA;&#xA;// SetBrightness 设置屏幕亮度&#xA;// percentage 应该是 0 到 100 之间的整数&#xA;func SetBrightness(percentage int) error {&#xA;&#x9;if percentage &amp;lt; 0 || percentage &amp;gt; 100 {&#xA;&#x9;&#x9;return fmt.Errorf(&amp;#34;亮度百分比应该在 0 到 100 之间&amp;#34;)&#xA;&#x9;}&#xA;&#xA;&#x9;var hMonitor syscall.Handle&#xA;&#x9;callback := syscall.NewCallback(func(handle syscall.Handle, _, _ uintptr, _ uintptr) uintptr {&#xA;&#x9;&#x9;hMonitor = handle&#xA;&#x9;&#x9;return 0 // 停止枚举&#xA;&#x9;})&#xA;&#xA;&#x9;_, _, err := enumDisplayMonitors.Call(0, 0, callback, 0)&#xA;&#x9;if err != nil &amp;amp;&amp;amp; err.Error() != &amp;#34;The operation completed successfully.&amp;#34; {&#xA;&#x9;&#x9;return fmt.Errorf(&amp;#34;枚举显示器失败: %v&amp;#34;, err)&#xA;&#x9;}&#xA;&#xA;&#x9;var physicalMonitorArraySize uint32 = 1&#xA;&#x9;physicalMonitors := make([]PHYSICAL_MONITOR, physicalMonitorArraySize)&#xA;&#xA;&#x9;ret, _, err := getPhysicalMonitorsFromHMONITOR.Call(&#xA;&#x9;&#x9;uintptr(hMonitor),&#xA;&#x9;&#x9;uintptr(physicalMonitorArraySize),&#xA;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;physicalMonitors[0])),&#xA;&#x9;)&#xA;&#x9;if ret == 0 {&#xA;&#x9;&#x9;return fmt.Errorf(&amp;#34;获取物理显示器失败: %v&amp;#34;, err)&#xA;&#x9;}&#xA;&#xA;&#x9;hPhysicalMonitor := physicalMonitors[0].hPhysicalMonitor&#xA;&#xA;&#x9;var minimumBrightness, currentBrightness, maximumBrightness uint32&#xA;&#x9;ret, _, err = getMonitorBrightness.Call(&#xA;&#x9;&#x9;uintptr(hPhysicalMonitor),&#xA;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;minimumBrightness)),&#xA;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;currentBrightness)),&#xA;&#x9;&#x9;uintptr(unsafe.Pointer(&amp;amp;maximumBrightness)),&#xA;&#x9;)&#xA;&#x9;if ret == 0 {&#xA;&#x9;&#x9;return fmt.Errorf(&amp;#34;获取显示器亮度失败: %v&amp;#34;, err)&#xA;&#x9;}&#xA;&#xA;&#x9;newBrightness := minimumBrightness + uint32((maximumBrightness-minimumBrightness)*uint32(percentage)/100)&#xA;&#x9;ret, _, err = setMonitorBrightness.Call(&#xA;&#x9;&#x9;uintptr(hPhysicalMonitor),&#xA;&#x9;&#x9;uintptr(newBrightness),&#xA;&#x9;)&#xA;&#x9;if ret == 0 {&#xA;&#x9;&#x9;return fmt.Errorf(&amp;#34;设置显示器亮度失败: %v&amp;#34;, err)&#xA;&#x9;}&#xA;&#xA;&#x9;// 清理资源&#xA;&#x9;destroyPhysicalMonitors.Call(uintptr(physicalMonitorArraySize), uintptr(unsafe.Pointer(&amp;amp;physicalMonitors[0])))&#xA;&#xA;&#x9;return nil&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;SetBrightness(30)&#xA;&#x9;fmt.Println(&amp;#34;屏幕亮度已设置为 30%&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>GodotGUI插件Godot-ImGui使用及设置中文字体</title>
      <link>/code/2024/092218-imgui/</link>
      <pubDate>Sun, 22 Sep 2024 10:31:58 +0000</pubDate>
      <guid>/code/2024/092218-imgui/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../092218-imgui-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/pkdawson/imgui-godot&#34;&gt;Godot-ImGui&lt;/a&gt;是一个Godot的插件，最新版本允许使用GDScript来使用ImGui，比自己构建GUI要简单，特别是打算将Godot用于设计普通APP应用时。&lt;/p&gt;&#xA;&lt;p&gt;另：居然&lt;a href=&#34;https://github.com/AllenDang/giu&#34;&gt;https://github.com/AllenDang/giu&lt;/a&gt;也是ImGui的应用&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/pkdawson/imgui-godot/releases&#34;&gt;下载&lt;/a&gt;注意不能csharp-olny，它不能使用GDScript。&lt;/p&gt;&#xA;&lt;p&gt;相关查看&lt;a href=&#34;https://github.com/ocornut/imgui&#34;&gt;此库&lt;/a&gt;，以及&lt;a href=&#34;https://github.com/ocornut/imgui/wiki&#34;&gt;它的Wiki&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;解压到addons目录并在项目设置里允许即可。&lt;/p&gt;&#xA;&lt;p&gt;简单示例&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;extends Node2D&#xA;&#xA;func _process(_delta: float) -&amp;gt; void:&#x9;&#x9;&#xA;&#x9;if ImGui.Begin(&amp;#34;ImGUI插件&amp;#34;):&#x9;&#x9;&#x9;# 创建一个窗口&#xA;&#x9;&#x9;#ImGui.SetWindowFontScale(1)&#x9;&#x9;# 窗口字体放大&#xA;&#x9;&#x9;ImGui.Text(&amp;#34;Hello from ImGUI&amp;#34;)&#x9;&#x9;# 显示一个文本&#xA;&#x9;&#x9;ImGui.TextColored(Color(0.9,0.8,0.6,1.0),&amp;#34;Tesss&amp;#34;)&#xA;&#x9;&#x9;if ImGui.Button(&amp;#34;Key我##1&amp;#34;):&#x9;&#x9;# ##1和##2是为了系统区分两个标签相同的Button&#xA;&#x9;&#x9;&#x9;print(&amp;#34;KKKKK&amp;#34;)&#xA;&#x9;&#x9;ImGui.Button(&amp;#34;KeyMe##2&amp;#34;)&#xA;    &#x9;        ImGui.End()&#x9;&#x9;&#x9;&#x9;# 结束第一个窗口&#xA;&#x9;&#xA;&#x9;#ImGui.ShowDemoWindow()&#x9;&#x9;&#x9;&#x9;# 演示窗&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这里其它代码可以不要，保留最后一句，看看它功能如何。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot与Golang合体：GDExtension</title>
      <link>/code/2024/092109-go2godot/</link>
      <pubDate>Sat, 21 Sep 2024 01:36:59 +0000</pubDate>
      <guid>/code/2024/092109-go2godot/</guid>
      <description>&lt;p&gt;让Godot与Golang交互，发挥各自的优势，这是一个不错的想法。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://learn.grow.graphics/&#34;&gt;官网&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/grow-graphics/gd&#34;&gt;Github&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://learn.grow.graphics/documentation/&#34;&gt;文档&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;看起来还支持多平台，没实测。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;安装库 go install grow.graphics/gd/cmd/gd@master&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;创建Go项目 go mod init main&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;main.go&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;fmt&amp;#34;&#xA;    &amp;#34;grow.graphics/gd&amp;#34;&#xA;    &amp;#34;grow.graphics/gd/gdextension&amp;#34;&#xA;)&#xA;&#xA;type HelloWorld struct {&#xA;    gd.Class[HelloWorld, gd.Node2D]&#xA;}&#xA;&#xA;// Ready implements the Godot Node2D _ready interface (virtual function).&#xA;func (h *HelloWorld) Ready() {&#xA;    fmt.Println(&amp;#34;Hello World from Go!&amp;#34;)&#xA;}&#xA;&#xA;func main() {&#xA;    godot, ok := gdextension.Link()&#xA;    if !ok {&#xA;        return&#xA;    }&#xA;    gd.Register[HelloWorld](godot)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;确保项目和依赖  go get -u&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot添加托盘图标及菜单</title>
      <link>/code/2024/092016-tary/</link>
      <pubDate>Fri, 20 Sep 2024 08:59:16 +0000</pubDate>
      <guid>/code/2024/092016-tary/</guid>
      <description>&lt;p&gt;这里我使用了4.4版本，不确定其它版本一定这样用。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;托盘图标及响应&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这是纯通过代码实现的：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func _ready() -&amp;gt; void:&#xA;&#x9;var img := Image.load_from_file(&amp;#34;res://icon.svg&amp;#34;)&#xA;&#x9;var texture := ImageTexture.create_from_image(img)&#xA;&#x9;DisplayServer.create_status_indicator(&#xA;&#x9;&#x9;texture,&#xA;&#x9;&#x9;&amp;#34;这是图标1&amp;#34;,&#xA;&#x9;&#x9;_status_indicator_callback_correct&#xA;&#x9;)&#xA;&#x9;DisplayServer.create_status_indicator(&#xA;&#x9;&#x9;texture,&#xA;&#x9;&#x9;&amp;#34;这是2图标&amp;#34;,&#xA;&#x9;&#x9;_status_indicator_callback_incorrect&#xA;&#x9;)&#xA;&#xA;# p 为鼠标按键编号&#xA;# m 为鼠标点击位置&#xA;func _status_indicator_callback_correct(p, m):&#xA;&#x9;printt(&amp;#34;Clicked a&amp;#34;,p,m)&#xA;&#xA;&#xA;func _status_indicator_callback_incorrect(p,m):&#xA;&#x9;printt(&amp;#34;Clicked b&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;控件StatusIndicator实现托盘菜单功能&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;看来StatusIndicator控件必须在运行中进行创建。另外，托盘菜单主要是关联PopupMenu&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rclone云文件同步工具，挂载smaba为本地磁盘</title>
      <link>/it/2024/091616-rclone/</link>
      <pubDate>Mon, 16 Sep 2024 08:29:50 +0000</pubDate>
      <guid>/it/2024/091616-rclone/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://rclone.org/img/logo_on_light__horizontal_color.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://rclone.org/&#34;&gt;Rclone&lt;/a&gt;是一个开源的命令行工具，用于管理云存储，支持70多种厂商的云存储服务。Go开发、支持多种平台自然也是喜爱它的理由。&lt;/p&gt;&#xA;&lt;p&gt;rclone 支持多种文件传输方式，包括复制，同步，移动，删除文件。它还支持文件加密和压缩，支持分块上传和分块下载，可以暂停和恢复传输，支持文件的校验和合并。clone 的主要优势在于它的灵活性和可扩展性。它可以用来做很多事情，包括备份，文件同步，数据迁移等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何读一本书</title>
      <link>/other/2024/091611-read/</link>
      <pubDate>Mon, 16 Sep 2024 03:29:40 +0000</pubDate>
      <guid>/other/2024/091611-read/</guid>
      <description>&lt;p&gt;如题，这是一个思考。学会学习比学习本身更重要（好绕）。或者换个说法：怎么样算读好了一本书。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../091611-read-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;能整理出本书的思维导出。全书重点，各章重点。&lt;/li&gt;&#xA;&lt;li&gt;写出阅读收获，与自身的结合。&lt;/li&gt;&#xA;&lt;li&gt;书的扩展、周边。&lt;/li&gt;&#xA;&lt;li&gt;哪些认同点，不同点。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.bilibili.com/video/BV1Uppte3EGm/?spm_id_from=333.1007.tianma.11-4-42.click&amp;amp;vd_source=b56d1c2a8432369e046076e4b0bad6fa&#34;&gt;B站有个关于如何读书&lt;/a&gt;的视频，看有没有一些感悟。&lt;br&gt;&#xA;继续思考继续写.&lt;/p&gt;</description>
    </item>
    <item>
      <title>我们需要一个怎样的记录工具</title>
      <link>/other/2024/091611-writer/</link>
      <pubDate>Mon, 16 Sep 2024 03:00:57 +0000</pubDate>
      <guid>/other/2024/091611-writer/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../091611-writer-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;我们都应该是一个终身学习者，在不断的学习过程中总会有所思考、总结和记录。我们需要怎么样的一个记录工具呢？&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;所有记录能够关联、复用&lt;/li&gt;&#xA;&lt;li&gt;能够辅助整理、搜索、总结(AI)&lt;/li&gt;&#xA;&lt;li&gt;一键生成博客文章（不是所有记录都愿意生成博文）&lt;/li&gt;&#xA;&lt;li&gt;简单的导图、流程图、公式等生成&lt;/li&gt;&#xA;&lt;li&gt;多平台，随时记录，随时可用&lt;/li&gt;&#xA;&lt;li&gt;方便的引用（视频、图文，为了安全，将引用内容放到统一本地目录）&lt;/li&gt;&#xA;&lt;li&gt;能否更具“可玩性”&lt;/li&gt;&#xA;&lt;li&gt;发挥小团队动能，一起完善、引用、分享（笔友？）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;思考总结，想到继续更新。&lt;/p&gt;</description>
    </item>
    <item>
      <title>谈谈飞牛NAS使用及研究（保持更新）</title>
      <link>/it/2024/091111-fnos/</link>
      <pubDate>Wed, 11 Sep 2024 03:34:46 +0000</pubDate>
      <guid>/it/2024/091111-fnos/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://static2.fnnas.com/official/fnos-logo.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最近试用了一下&lt;a href=&#34;https://www.fnnas.com/&#34;&gt;飞牛NAS&lt;/a&gt;，正版免费，支持手机端，基于Debian。&lt;/p&gt;&#xA;&lt;p&gt;使用情况来看（当前0.8.16），能用，影视功能的完成度较高，更新比较勤快。相册功能问题较多。音频功能暂时没有。这是NAS最常用的三个功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot插件Plugin初学</title>
      <link>/code/2024/090816-plugin/</link>
      <pubDate>Sun, 08 Sep 2024 08:24:19 +0000</pubDate>
      <guid>/code/2024/090816-plugin/</guid>
      <description>&lt;p&gt;之前学习了&lt;a href=&#34;https://i.scwy.net/code/2024/090619-console/&#34;&gt;在Godot作品中添加一个控制台&lt;/a&gt;，它是利用了godot的插件功能，今天简单的看一下，&lt;a href=&#34;https://docs.godotengine.org/zh-cn/4.x/tutorials/plugins/editor/making_plugins.html&#34;&gt;在官网中也有介绍&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;添加工程，在工程设置&amp;ndash;插件中添加新插件，进行简单的配置&lt;br&gt;&#xA;&lt;img src=&#34;https://docs.godotengine.org/zh-cn/4.x/_images/making_plugins-create_plugin_dialog.webp&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;在初始化脚本文件中，代码如下：&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;@tool&#xA;extends EditorPlugin&#xA;&#xA;&#xA;func _enter_tree():&#xA;&#x9;# 入口&#xA;&#x9;pass&#xA;&#xA;&#xA;func _exit_tree():&#xA;&#x9;# 出口&#xA;&#x9;pass&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;如官方示例中，添加了一个界面控件。例如文件名为tool.gd:&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;@tool&#xA;extends Button&#xA;&#xA;&#xA;func _enter_tree():&#xA;&#x9;pressed.connect(clicked)&#xA;&#xA;&#xA;func clicked():&#xA;&#x9;print(&amp;#34;You clicked me!&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;看代码它是添加了一人Button继承控件，并且响应了点击事件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>给Godot作品添加一个控制台</title>
      <link>/code/2024/090619-console/</link>
      <pubDate>Fri, 06 Sep 2024 11:02:09 +0000</pubDate>
      <guid>/code/2024/090619-console/</guid>
      <description>&lt;p&gt;游戏中控制台可以通过命令的方式完成很多功能，例如附加指令，显示调试信息等。&lt;/p&gt;&#xA;&lt;p&gt;这里是网友的一个插件，不过在4.3中不能使用，我试过4.1是可以的。然后回到4.3和4.4版，需居又都可以了，啥情况。&lt;br&gt;&#xA;代码总体不复杂，&lt;/p&gt;</description>
    </item>
    <item>
      <title>Caddy配置中直接输出HTML</title>
      <link>/it/2024/090609-caddyrespond/</link>
      <pubDate>Fri, 06 Sep 2024 01:15:11 +0000</pubDate>
      <guid>/it/2024/090609-caddyrespond/</guid>
      <description>&lt;p&gt;原来的目的是：通过iframe可以隐藏动态IP的地址，以实现&lt;a href=&#34;https://i.scwy.net/it/2024/083122-ddns/&#34;&gt;类似于DDNS&lt;/a&gt;那样，直接在地址栏显示二级域名的效果。&lt;/p&gt;&#xA;&lt;p&gt;如下示例：原来通过 redir 跳转的地址会显示在浏览器地址栏，而我只想让它显示 abc.scwy.net 这样的域名。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Caddy实现的类似DDNS方案</title>
      <link>/it/2024/083122-ddns/</link>
      <pubDate>Sat, 31 Aug 2024 14:14:32 +0000</pubDate>
      <guid>/it/2024/083122-ddns/</guid>
      <description>&lt;p&gt;我的服务器使用了Caddy，比Nginx简单，功能足够。&lt;br&gt;&#xA;家里的网络也有公网IP，虽然被残(80\443被屏)，但依然想发挥剩余价值。于是思考基于Caddy的DDNS解决方法。&lt;br&gt;&#xA;通过服务器上的Caddy设置好二级域名（例如 abc.scwy.net ），并设置好跳转&lt;/p&gt;</description>
    </item>
    <item>
      <title>AirDroidCast手机与电脑相互投屏</title>
      <link>/it/2024/082718-airdroidcast/</link>
      <pubDate>Tue, 27 Aug 2024 10:03:43 +0000</pubDate>
      <guid>/it/2024/082718-airdroidcast/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://img-5-cdn.airdroid.cn/assets/img/castHomeB/pic_devices_cn-e0e54cd23b.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;又装了Ubuntu系统，于是投屏就是个问题。搜索发现了&lt;a href=&#34;https://www.airdroid.cn/cast&#34;&gt;AirDroidCast&lt;/a&gt;，实现了手机与电脑的相互投屏。&lt;br&gt;&#xA;&lt;a href=&#34;https://www.airdroid.cn/download/airdroid-cast/&#34;&gt;下载&lt;/a&gt;电脑端及移动端。没有支持Linux的PC端，于是就用&lt;a href=&#34;https://webcast.airdroid.com/home&#34;&gt;网页版&lt;/a&gt;依然可以相互投屏。&lt;br&gt;&#xA;&lt;img src=&#34;https://www.airdroid.cn/wp-content/uploads/2022/05/20220531075642_94268.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;不过我更喜欢Spacedesk,安装在系统中，手机可以直接连接拓展出一个屏幕。只是它没有支持Linux。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Emoji 表情符号</title>
      <link>/it/2024/082614-emoji/</link>
      <pubDate>Mon, 26 Aug 2024 06:58:00 +0000</pubDate>
      <guid>/it/2024/082614-emoji/</guid>
      <description>&lt;p&gt;在使用 &lt;a href=&#34;https://i.scwy.net/it/2024/072623-sshchat/&#34;&gt;devzat&lt;/a&gt; 中，支持了很多的表情符号。它引用了&lt;a href=&#34;https://github.com/ikatyang/emoji-cheat-sheet/&#34;&gt;此库&lt;/a&gt;，而此库又生成于github.com的表情符：https://api.github.com/emojis&lt;/p&gt;&#xA;&lt;p&gt;当需要线上表情时，可以引用它，亦或者导入到本地。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{&#xA;  &amp;#34;+1&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f44d.png?v8&amp;#34;,&#xA;  &amp;#34;-1&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f44e.png?v8&amp;#34;,&#xA;  &amp;#34;100&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4af.png?v8&amp;#34;,&#xA;  &amp;#34;1234&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f522.png?v8&amp;#34;,&#xA;  &amp;#34;1st_place_medal&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f947.png?v8&amp;#34;,&#xA;  &amp;#34;2nd_place_medal&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f948.png?v8&amp;#34;,&#xA;  &amp;#34;3rd_place_medal&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f949.png?v8&amp;#34;,&#xA;  &amp;#34;8ball&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3b1.png?v8&amp;#34;,&#xA;  &amp;#34;a&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f170.png?v8&amp;#34;,&#xA;  &amp;#34;ab&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f18e.png?v8&amp;#34;,&#xA;  &amp;#34;abacus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ee.png?v8&amp;#34;,&#xA;  &amp;#34;abc&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f524.png?v8&amp;#34;,&#xA;  &amp;#34;abcd&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f521.png?v8&amp;#34;,&#xA;  &amp;#34;accept&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f251.png?v8&amp;#34;,&#xA;  &amp;#34;accessibility&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/accessibility.png?v8&amp;#34;,&#xA;  &amp;#34;accordion&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa97.png?v8&amp;#34;,&#xA;  &amp;#34;adhesive_bandage&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa79.png?v8&amp;#34;,&#xA;  &amp;#34;adult&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1.png?v8&amp;#34;,&#xA;  &amp;#34;aerial_tramway&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6a1.png?v8&amp;#34;,&#xA;  &amp;#34;afghanistan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1eb.png?v8&amp;#34;,&#xA;  &amp;#34;airplane&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2708.png?v8&amp;#34;,&#xA;  &amp;#34;aland_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1fd.png?v8&amp;#34;,&#xA;  &amp;#34;alarm_clock&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23f0.png?v8&amp;#34;,&#xA;  &amp;#34;albania&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f1.png?v8&amp;#34;,&#xA;  &amp;#34;alembic&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2697.png?v8&amp;#34;,&#xA;  &amp;#34;algeria&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1ff.png?v8&amp;#34;,&#xA;  &amp;#34;alien&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f47d.png?v8&amp;#34;,&#xA;  &amp;#34;ambulance&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f691.png?v8&amp;#34;,&#xA;  &amp;#34;american_samoa&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f8.png?v8&amp;#34;,&#xA;  &amp;#34;amphora&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3fa.png?v8&amp;#34;,&#xA;  &amp;#34;anatomical_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fac0.png?v8&amp;#34;,&#xA;  &amp;#34;anchor&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2693.png?v8&amp;#34;,&#xA;  &amp;#34;andorra&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1e9.png?v8&amp;#34;,&#xA;  &amp;#34;angel&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f47c.png?v8&amp;#34;,&#xA;  &amp;#34;anger&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4a2.png?v8&amp;#34;,&#xA;  &amp;#34;angola&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f4.png?v8&amp;#34;,&#xA;  &amp;#34;angry&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f620.png?v8&amp;#34;,&#xA;  &amp;#34;anguilla&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1ee.png?v8&amp;#34;,&#xA;  &amp;#34;anguished&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f627.png?v8&amp;#34;,&#xA;  &amp;#34;ant&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f41c.png?v8&amp;#34;,&#xA;  &amp;#34;antarctica&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f6.png?v8&amp;#34;,&#xA;  &amp;#34;antigua_barbuda&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;apple&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f34e.png?v8&amp;#34;,&#xA;  &amp;#34;aquarius&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2652.png?v8&amp;#34;,&#xA;  &amp;#34;argentina&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;aries&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2648.png?v8&amp;#34;,&#xA;  &amp;#34;armenia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_backward&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/25c0.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_double_down&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23ec.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_double_up&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23eb.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_down&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2b07.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_down_small&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f53d.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_forward&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/25b6.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_heading_down&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2935.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_heading_up&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2934.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_left&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2b05.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_lower_left&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2199.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_lower_right&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2198.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_right&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/27a1.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_right_hook&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/21aa.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_up&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2b06.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_up_down&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2195.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_up_small&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f53c.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_upper_left&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2196.png?v8&amp;#34;,&#xA;  &amp;#34;arrow_upper_right&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2197.png?v8&amp;#34;,&#xA;  &amp;#34;arrows_clockwise&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f503.png?v8&amp;#34;,&#xA;  &amp;#34;arrows_counterclockwise&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f504.png?v8&amp;#34;,&#xA;  &amp;#34;art&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3a8.png?v8&amp;#34;,&#xA;  &amp;#34;articulated_lorry&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f69b.png?v8&amp;#34;,&#xA;  &amp;#34;artificial_satellite&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6f0.png?v8&amp;#34;,&#xA;  &amp;#34;artist&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f3a8.png?v8&amp;#34;,&#xA;  &amp;#34;aruba&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1fc.png?v8&amp;#34;,&#xA;  &amp;#34;ascension_island&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1e8.png?v8&amp;#34;,&#xA;  &amp;#34;asterisk&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/002a-20e3.png?v8&amp;#34;,&#xA;  &amp;#34;astonished&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f632.png?v8&amp;#34;,&#xA;  &amp;#34;astronaut&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f680.png?v8&amp;#34;,&#xA;  &amp;#34;athletic_shoe&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f45f.png?v8&amp;#34;,&#xA;  &amp;#34;atm&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3e7.png?v8&amp;#34;,&#xA;  &amp;#34;atom&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/atom.png?v8&amp;#34;,&#xA;  &amp;#34;atom_symbol&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/269b.png?v8&amp;#34;,&#xA;  &amp;#34;australia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1fa.png?v8&amp;#34;,&#xA;  &amp;#34;austria&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1f9.png?v8&amp;#34;,&#xA;  &amp;#34;auto_rickshaw&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6fa.png?v8&amp;#34;,&#xA;  &amp;#34;avocado&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f951.png?v8&amp;#34;,&#xA;  &amp;#34;axe&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa93.png?v8&amp;#34;,&#xA;  &amp;#34;azerbaijan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1ff.png?v8&amp;#34;,&#xA;  &amp;#34;b&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f171.png?v8&amp;#34;,&#xA;  &amp;#34;baby&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f476.png?v8&amp;#34;,&#xA;  &amp;#34;baby_bottle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f37c.png?v8&amp;#34;,&#xA;  &amp;#34;baby_chick&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f424.png?v8&amp;#34;,&#xA;  &amp;#34;baby_symbol&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6bc.png?v8&amp;#34;,&#xA;  &amp;#34;back&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f519.png?v8&amp;#34;,&#xA;  &amp;#34;bacon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f953.png?v8&amp;#34;,&#xA;  &amp;#34;badger&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9a1.png?v8&amp;#34;,&#xA;  &amp;#34;badminton&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3f8.png?v8&amp;#34;,&#xA;  &amp;#34;bagel&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f96f.png?v8&amp;#34;,&#xA;  &amp;#34;baggage_claim&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6c4.png?v8&amp;#34;,&#xA;  &amp;#34;baguette_bread&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f956.png?v8&amp;#34;,&#xA;  &amp;#34;bahamas&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f8.png?v8&amp;#34;,&#xA;  &amp;#34;bahrain&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ed.png?v8&amp;#34;,&#xA;  &amp;#34;balance_scale&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2696.png?v8&amp;#34;,&#xA;  &amp;#34;bald_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9b2.png?v8&amp;#34;,&#xA;  &amp;#34;bald_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9b2.png?v8&amp;#34;,&#xA;  &amp;#34;ballet_shoes&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa70.png?v8&amp;#34;,&#xA;  &amp;#34;balloon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f388.png?v8&amp;#34;,&#xA;  &amp;#34;ballot_box&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5f3.png?v8&amp;#34;,&#xA;  &amp;#34;ballot_box_with_check&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2611.png?v8&amp;#34;,&#xA;  &amp;#34;bamboo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f38d.png?v8&amp;#34;,&#xA;  &amp;#34;banana&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f34c.png?v8&amp;#34;,&#xA;  &amp;#34;bangbang&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/203c.png?v8&amp;#34;,&#xA;  &amp;#34;bangladesh&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1e9.png?v8&amp;#34;,&#xA;  &amp;#34;banjo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa95.png?v8&amp;#34;,&#xA;  &amp;#34;bank&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3e6.png?v8&amp;#34;,&#xA;  &amp;#34;bar_chart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4ca.png?v8&amp;#34;,&#xA;  &amp;#34;barbados&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1e7.png?v8&amp;#34;,&#xA;  &amp;#34;barber&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f488.png?v8&amp;#34;,&#xA;  &amp;#34;baseball&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26be.png?v8&amp;#34;,&#xA;  &amp;#34;basecamp&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/basecamp.png?v8&amp;#34;,&#xA;  &amp;#34;basecampy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/basecampy.png?v8&amp;#34;,&#xA;  &amp;#34;basket&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9fa.png?v8&amp;#34;,&#xA;  &amp;#34;basketball&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c0.png?v8&amp;#34;,&#xA;  &amp;#34;basketball_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f9-2642.png?v8&amp;#34;,&#xA;  &amp;#34;basketball_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f9-2640.png?v8&amp;#34;,&#xA;  &amp;#34;bat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f987.png?v8&amp;#34;,&#xA;  &amp;#34;bath&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6c0.png?v8&amp;#34;,&#xA;  &amp;#34;bathtub&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6c1.png?v8&amp;#34;,&#xA;  &amp;#34;battery&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f50b.png?v8&amp;#34;,&#xA;  &amp;#34;beach_umbrella&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3d6.png?v8&amp;#34;,&#xA;  &amp;#34;beans&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fad8.png?v8&amp;#34;,&#xA;  &amp;#34;bear&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f43b.png?v8&amp;#34;,&#xA;  &amp;#34;bearded_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d4.png?v8&amp;#34;,&#xA;  &amp;#34;beaver&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ab.png?v8&amp;#34;,&#xA;  &amp;#34;bed&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6cf.png?v8&amp;#34;,&#xA;  &amp;#34;bee&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f41d.png?v8&amp;#34;,&#xA;  &amp;#34;beer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f37a.png?v8&amp;#34;,&#xA;  &amp;#34;beers&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f37b.png?v8&amp;#34;,&#xA;  &amp;#34;beetle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fab2.png?v8&amp;#34;,&#xA;  &amp;#34;beginner&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f530.png?v8&amp;#34;,&#xA;  &amp;#34;belarus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1fe.png?v8&amp;#34;,&#xA;  &amp;#34;belgium&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;belize&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ff.png?v8&amp;#34;,&#xA;  &amp;#34;bell&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f514.png?v8&amp;#34;,&#xA;  &amp;#34;bell_pepper&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fad1.png?v8&amp;#34;,&#xA;  &amp;#34;bellhop_bell&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6ce.png?v8&amp;#34;,&#xA;  &amp;#34;benin&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ef.png?v8&amp;#34;,&#xA;  &amp;#34;bento&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f371.png?v8&amp;#34;,&#xA;  &amp;#34;bermuda&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;beverage_box&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9c3.png?v8&amp;#34;,&#xA;  &amp;#34;bhutan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f9.png?v8&amp;#34;,&#xA;  &amp;#34;bicyclist&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b4.png?v8&amp;#34;,&#xA;  &amp;#34;bike&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b2.png?v8&amp;#34;,&#xA;  &amp;#34;biking_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b4-2642.png?v8&amp;#34;,&#xA;  &amp;#34;biking_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b4-2640.png?v8&amp;#34;,&#xA;  &amp;#34;bikini&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f459.png?v8&amp;#34;,&#xA;  &amp;#34;billed_cap&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9e2.png?v8&amp;#34;,&#xA;  &amp;#34;biohazard&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2623.png?v8&amp;#34;,&#xA;  &amp;#34;bird&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f426.png?v8&amp;#34;,&#xA;  &amp;#34;birthday&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f382.png?v8&amp;#34;,&#xA;  &amp;#34;bison&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ac.png?v8&amp;#34;,&#xA;  &amp;#34;biting_lip&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fae6.png?v8&amp;#34;,&#xA;  &amp;#34;black_bird&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f426-2b1b.png?v8&amp;#34;,&#xA;  &amp;#34;black_cat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f408-2b1b.png?v8&amp;#34;,&#xA;  &amp;#34;black_circle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26ab.png?v8&amp;#34;,&#xA;  &amp;#34;black_flag&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3f4.png?v8&amp;#34;,&#xA;  &amp;#34;black_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5a4.png?v8&amp;#34;,&#xA;  &amp;#34;black_joker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f0cf.png?v8&amp;#34;,&#xA;  &amp;#34;black_large_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2b1b.png?v8&amp;#34;,&#xA;  &amp;#34;black_medium_small_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/25fe.png?v8&amp;#34;,&#xA;  &amp;#34;black_medium_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/25fc.png?v8&amp;#34;,&#xA;  &amp;#34;black_nib&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2712.png?v8&amp;#34;,&#xA;  &amp;#34;black_small_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/25aa.png?v8&amp;#34;,&#xA;  &amp;#34;black_square_button&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f532.png?v8&amp;#34;,&#xA;  &amp;#34;blond_haired_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f471-2642.png?v8&amp;#34;,&#xA;  &amp;#34;blond_haired_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f471.png?v8&amp;#34;,&#xA;  &amp;#34;blond_haired_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f471-2640.png?v8&amp;#34;,&#xA;  &amp;#34;blonde_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f471-2640.png?v8&amp;#34;,&#xA;  &amp;#34;blossom&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f33c.png?v8&amp;#34;,&#xA;  &amp;#34;blowfish&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f421.png?v8&amp;#34;,&#xA;  &amp;#34;blue_book&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4d8.png?v8&amp;#34;,&#xA;  &amp;#34;blue_car&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f699.png?v8&amp;#34;,&#xA;  &amp;#34;blue_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f499.png?v8&amp;#34;,&#xA;  &amp;#34;blue_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f7e6.png?v8&amp;#34;,&#xA;  &amp;#34;blueberries&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fad0.png?v8&amp;#34;,&#xA;  &amp;#34;blush&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f60a.png?v8&amp;#34;,&#xA;  &amp;#34;boar&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f417.png?v8&amp;#34;,&#xA;  &amp;#34;boat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f5.png?v8&amp;#34;,&#xA;  &amp;#34;bolivia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f4.png?v8&amp;#34;,&#xA;  &amp;#34;bomb&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4a3.png?v8&amp;#34;,&#xA;  &amp;#34;bone&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9b4.png?v8&amp;#34;,&#xA;  &amp;#34;book&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4d6.png?v8&amp;#34;,&#xA;  &amp;#34;bookmark&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f516.png?v8&amp;#34;,&#xA;  &amp;#34;bookmark_tabs&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4d1.png?v8&amp;#34;,&#xA;  &amp;#34;books&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4da.png?v8&amp;#34;,&#xA;  &amp;#34;boom&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4a5.png?v8&amp;#34;,&#xA;  &amp;#34;boomerang&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa83.png?v8&amp;#34;,&#xA;  &amp;#34;boot&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f462.png?v8&amp;#34;,&#xA;  &amp;#34;bosnia_herzegovina&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;botswana&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1fc.png?v8&amp;#34;,&#xA;  &amp;#34;bouncing_ball_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f9-2642.png?v8&amp;#34;,&#xA;  &amp;#34;bouncing_ball_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f9.png?v8&amp;#34;,&#xA;  &amp;#34;bouncing_ball_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f9-2640.png?v8&amp;#34;,&#xA;  &amp;#34;bouquet&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f490.png?v8&amp;#34;,&#xA;  &amp;#34;bouvet_island&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1fb.png?v8&amp;#34;,&#xA;  &amp;#34;bow&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f647.png?v8&amp;#34;,&#xA;  &amp;#34;bow_and_arrow&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3f9.png?v8&amp;#34;,&#xA;  &amp;#34;bowing_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f647-2642.png?v8&amp;#34;,&#xA;  &amp;#34;bowing_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f647-2640.png?v8&amp;#34;,&#xA;  &amp;#34;bowl_with_spoon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f963.png?v8&amp;#34;,&#xA;  &amp;#34;bowling&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3b3.png?v8&amp;#34;,&#xA;  &amp;#34;bowtie&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/bowtie.png?v8&amp;#34;,&#xA;  &amp;#34;boxing_glove&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f94a.png?v8&amp;#34;,&#xA;  &amp;#34;boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f466.png?v8&amp;#34;,&#xA;  &amp;#34;brain&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9e0.png?v8&amp;#34;,&#xA;  &amp;#34;brazil&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;bread&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f35e.png?v8&amp;#34;,&#xA;  &amp;#34;breast_feeding&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f931.png?v8&amp;#34;,&#xA;  &amp;#34;bricks&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9f1.png?v8&amp;#34;,&#xA;  &amp;#34;bride_with_veil&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f470-2640.png?v8&amp;#34;,&#xA;  &amp;#34;bridge_at_night&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f309.png?v8&amp;#34;,&#xA;  &amp;#34;briefcase&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4bc.png?v8&amp;#34;,&#xA;  &amp;#34;british_indian_ocean_territory&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f4.png?v8&amp;#34;,&#xA;  &amp;#34;british_virgin_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;broccoli&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f966.png?v8&amp;#34;,&#xA;  &amp;#34;broken_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f494.png?v8&amp;#34;,&#xA;  &amp;#34;broom&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9f9.png?v8&amp;#34;,&#xA;  &amp;#34;brown_circle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f7e4.png?v8&amp;#34;,&#xA;  &amp;#34;brown_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f90e.png?v8&amp;#34;,&#xA;  &amp;#34;brown_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f7eb.png?v8&amp;#34;,&#xA;  &amp;#34;brunei&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f3.png?v8&amp;#34;,&#xA;  &amp;#34;bubble_tea&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9cb.png?v8&amp;#34;,&#xA;  &amp;#34;bubbles&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fae7.png?v8&amp;#34;,&#xA;  &amp;#34;bucket&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faa3.png?v8&amp;#34;,&#xA;  &amp;#34;bug&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f41b.png?v8&amp;#34;,&#xA;  &amp;#34;building_construction&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3d7.png?v8&amp;#34;,&#xA;  &amp;#34;bulb&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4a1.png?v8&amp;#34;,&#xA;  &amp;#34;bulgaria&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;bullettrain_front&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f685.png?v8&amp;#34;,&#xA;  &amp;#34;bullettrain_side&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f684.png?v8&amp;#34;,&#xA;  &amp;#34;burkina_faso&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1eb.png?v8&amp;#34;,&#xA;  &amp;#34;burrito&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f32f.png?v8&amp;#34;,&#xA;  &amp;#34;burundi&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1ee.png?v8&amp;#34;,&#xA;  &amp;#34;bus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f68c.png?v8&amp;#34;,&#xA;  &amp;#34;business_suit_levitating&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f574.png?v8&amp;#34;,&#xA;  &amp;#34;busstop&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f68f.png?v8&amp;#34;,&#xA;  &amp;#34;bust_in_silhouette&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f464.png?v8&amp;#34;,&#xA;  &amp;#34;busts_in_silhouette&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f465.png?v8&amp;#34;,&#xA;  &amp;#34;butter&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9c8.png?v8&amp;#34;,&#xA;  &amp;#34;butterfly&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f98b.png?v8&amp;#34;,&#xA;  &amp;#34;cactus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f335.png?v8&amp;#34;,&#xA;  &amp;#34;cake&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f370.png?v8&amp;#34;,&#xA;  &amp;#34;calendar&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4c6.png?v8&amp;#34;,&#xA;  &amp;#34;call_me_hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f919.png?v8&amp;#34;,&#xA;  &amp;#34;calling&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4f2.png?v8&amp;#34;,&#xA;  &amp;#34;cambodia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ed.png?v8&amp;#34;,&#xA;  &amp;#34;camel&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f42b.png?v8&amp;#34;,&#xA;  &amp;#34;camera&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4f7.png?v8&amp;#34;,&#xA;  &amp;#34;camera_flash&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4f8.png?v8&amp;#34;,&#xA;  &amp;#34;cameroon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;camping&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3d5.png?v8&amp;#34;,&#xA;  &amp;#34;canada&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;canary_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1e8.png?v8&amp;#34;,&#xA;  &amp;#34;cancer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/264b.png?v8&amp;#34;,&#xA;  &amp;#34;candle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f56f.png?v8&amp;#34;,&#xA;  &amp;#34;candy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f36c.png?v8&amp;#34;,&#xA;  &amp;#34;canned_food&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f96b.png?v8&amp;#34;,&#xA;  &amp;#34;canoe&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6f6.png?v8&amp;#34;,&#xA;  &amp;#34;cape_verde&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fb.png?v8&amp;#34;,&#xA;  &amp;#34;capital_abcd&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f520.png?v8&amp;#34;,&#xA;  &amp;#34;capricorn&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2651.png?v8&amp;#34;,&#xA;  &amp;#34;car&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f697.png?v8&amp;#34;,&#xA;  &amp;#34;card_file_box&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5c3.png?v8&amp;#34;,&#xA;  &amp;#34;card_index&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4c7.png?v8&amp;#34;,&#xA;  &amp;#34;card_index_dividers&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5c2.png?v8&amp;#34;,&#xA;  &amp;#34;caribbean_netherlands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f6.png?v8&amp;#34;,&#xA;  &amp;#34;carousel_horse&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3a0.png?v8&amp;#34;,&#xA;  &amp;#34;carpentry_saw&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa9a.png?v8&amp;#34;,&#xA;  &amp;#34;carrot&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f955.png?v8&amp;#34;,&#xA;  &amp;#34;cartwheeling&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f938.png?v8&amp;#34;,&#xA;  &amp;#34;cat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f431.png?v8&amp;#34;,&#xA;  &amp;#34;cat2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f408.png?v8&amp;#34;,&#xA;  &amp;#34;cayman_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1fe.png?v8&amp;#34;,&#xA;  &amp;#34;cd&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4bf.png?v8&amp;#34;,&#xA;  &amp;#34;central_african_republic&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1eb.png?v8&amp;#34;,&#xA;  &amp;#34;ceuta_melilla&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;chad&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1e9.png?v8&amp;#34;,&#xA;  &amp;#34;chains&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26d3.png?v8&amp;#34;,&#xA;  &amp;#34;chair&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa91.png?v8&amp;#34;,&#xA;  &amp;#34;champagne&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f37e.png?v8&amp;#34;,&#xA;  &amp;#34;chart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4b9.png?v8&amp;#34;,&#xA;  &amp;#34;chart_with_downwards_trend&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4c9.png?v8&amp;#34;,&#xA;  &amp;#34;chart_with_upwards_trend&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4c8.png?v8&amp;#34;,&#xA;  &amp;#34;checkered_flag&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c1.png?v8&amp;#34;,&#xA;  &amp;#34;cheese&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9c0.png?v8&amp;#34;,&#xA;  &amp;#34;cherries&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f352.png?v8&amp;#34;,&#xA;  &amp;#34;cherry_blossom&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f338.png?v8&amp;#34;,&#xA;  &amp;#34;chess_pawn&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/265f.png?v8&amp;#34;,&#xA;  &amp;#34;chestnut&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f330.png?v8&amp;#34;,&#xA;  &amp;#34;chicken&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f414.png?v8&amp;#34;,&#xA;  &amp;#34;child&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d2.png?v8&amp;#34;,&#xA;  &amp;#34;children_crossing&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b8.png?v8&amp;#34;,&#xA;  &amp;#34;chile&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f1.png?v8&amp;#34;,&#xA;  &amp;#34;chipmunk&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f43f.png?v8&amp;#34;,&#xA;  &amp;#34;chocolate_bar&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f36b.png?v8&amp;#34;,&#xA;  &amp;#34;chopsticks&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f962.png?v8&amp;#34;,&#xA;  &amp;#34;christmas_island&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fd.png?v8&amp;#34;,&#xA;  &amp;#34;christmas_tree&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f384.png?v8&amp;#34;,&#xA;  &amp;#34;church&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26ea.png?v8&amp;#34;,&#xA;  &amp;#34;cinema&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3a6.png?v8&amp;#34;,&#xA;  &amp;#34;circus_tent&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3aa.png?v8&amp;#34;,&#xA;  &amp;#34;city_sunrise&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f307.png?v8&amp;#34;,&#xA;  &amp;#34;city_sunset&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f306.png?v8&amp;#34;,&#xA;  &amp;#34;cityscape&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3d9.png?v8&amp;#34;,&#xA;  &amp;#34;cl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f191.png?v8&amp;#34;,&#xA;  &amp;#34;clamp&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5dc.png?v8&amp;#34;,&#xA;  &amp;#34;clap&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f44f.png?v8&amp;#34;,&#xA;  &amp;#34;clapper&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ac.png?v8&amp;#34;,&#xA;  &amp;#34;classical_building&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3db.png?v8&amp;#34;,&#xA;  &amp;#34;climbing&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d7.png?v8&amp;#34;,&#xA;  &amp;#34;climbing_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d7-2642.png?v8&amp;#34;,&#xA;  &amp;#34;climbing_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d7-2640.png?v8&amp;#34;,&#xA;  &amp;#34;clinking_glasses&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f942.png?v8&amp;#34;,&#xA;  &amp;#34;clipboard&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4cb.png?v8&amp;#34;,&#xA;  &amp;#34;clipperton_island&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f5.png?v8&amp;#34;,&#xA;  &amp;#34;clock1&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f550.png?v8&amp;#34;,&#xA;  &amp;#34;clock10&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f559.png?v8&amp;#34;,&#xA;  &amp;#34;clock1030&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f565.png?v8&amp;#34;,&#xA;  &amp;#34;clock11&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f55a.png?v8&amp;#34;,&#xA;  &amp;#34;clock1130&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f566.png?v8&amp;#34;,&#xA;  &amp;#34;clock12&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f55b.png?v8&amp;#34;,&#xA;  &amp;#34;clock1230&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f567.png?v8&amp;#34;,&#xA;  &amp;#34;clock130&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f55c.png?v8&amp;#34;,&#xA;  &amp;#34;clock2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f551.png?v8&amp;#34;,&#xA;  &amp;#34;clock230&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f55d.png?v8&amp;#34;,&#xA;  &amp;#34;clock3&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f552.png?v8&amp;#34;,&#xA;  &amp;#34;clock330&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f55e.png?v8&amp;#34;,&#xA;  &amp;#34;clock4&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f553.png?v8&amp;#34;,&#xA;  &amp;#34;clock430&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f55f.png?v8&amp;#34;,&#xA;  &amp;#34;clock5&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f554.png?v8&amp;#34;,&#xA;  &amp;#34;clock530&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f560.png?v8&amp;#34;,&#xA;  &amp;#34;clock6&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f555.png?v8&amp;#34;,&#xA;  &amp;#34;clock630&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f561.png?v8&amp;#34;,&#xA;  &amp;#34;clock7&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f556.png?v8&amp;#34;,&#xA;  &amp;#34;clock730&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f562.png?v8&amp;#34;,&#xA;  &amp;#34;clock8&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f557.png?v8&amp;#34;,&#xA;  &amp;#34;clock830&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f563.png?v8&amp;#34;,&#xA;  &amp;#34;clock9&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f558.png?v8&amp;#34;,&#xA;  &amp;#34;clock930&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f564.png?v8&amp;#34;,&#xA;  &amp;#34;closed_book&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4d5.png?v8&amp;#34;,&#xA;  &amp;#34;closed_lock_with_key&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f510.png?v8&amp;#34;,&#xA;  &amp;#34;closed_umbrella&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f302.png?v8&amp;#34;,&#xA;  &amp;#34;cloud&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2601.png?v8&amp;#34;,&#xA;  &amp;#34;cloud_with_lightning&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f329.png?v8&amp;#34;,&#xA;  &amp;#34;cloud_with_lightning_and_rain&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26c8.png?v8&amp;#34;,&#xA;  &amp;#34;cloud_with_rain&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f327.png?v8&amp;#34;,&#xA;  &amp;#34;cloud_with_snow&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f328.png?v8&amp;#34;,&#xA;  &amp;#34;clown_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f921.png?v8&amp;#34;,&#xA;  &amp;#34;clubs&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2663.png?v8&amp;#34;,&#xA;  &amp;#34;cn&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f3.png?v8&amp;#34;,&#xA;  &amp;#34;coat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9e5.png?v8&amp;#34;,&#xA;  &amp;#34;cockroach&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fab3.png?v8&amp;#34;,&#xA;  &amp;#34;cocktail&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f378.png?v8&amp;#34;,&#xA;  &amp;#34;coconut&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f965.png?v8&amp;#34;,&#xA;  &amp;#34;cocos_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1e8.png?v8&amp;#34;,&#xA;  &amp;#34;coffee&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2615.png?v8&amp;#34;,&#xA;  &amp;#34;coffin&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26b0.png?v8&amp;#34;,&#xA;  &amp;#34;coin&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa99.png?v8&amp;#34;,&#xA;  &amp;#34;cold_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f976.png?v8&amp;#34;,&#xA;  &amp;#34;cold_sweat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f630.png?v8&amp;#34;,&#xA;  &amp;#34;collision&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4a5.png?v8&amp;#34;,&#xA;  &amp;#34;colombia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f4.png?v8&amp;#34;,&#xA;  &amp;#34;comet&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2604.png?v8&amp;#34;,&#xA;  &amp;#34;comoros&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;compass&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ed.png?v8&amp;#34;,&#xA;  &amp;#34;computer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4bb.png?v8&amp;#34;,&#xA;  &amp;#34;computer_mouse&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5b1.png?v8&amp;#34;,&#xA;  &amp;#34;confetti_ball&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f38a.png?v8&amp;#34;,&#xA;  &amp;#34;confounded&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f616.png?v8&amp;#34;,&#xA;  &amp;#34;confused&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f615.png?v8&amp;#34;,&#xA;  &amp;#34;congo_brazzaville&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;congo_kinshasa&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1e9.png?v8&amp;#34;,&#xA;  &amp;#34;congratulations&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/3297.png?v8&amp;#34;,&#xA;  &amp;#34;construction&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6a7.png?v8&amp;#34;,&#xA;  &amp;#34;construction_worker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f477.png?v8&amp;#34;,&#xA;  &amp;#34;construction_worker_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f477-2642.png?v8&amp;#34;,&#xA;  &amp;#34;construction_worker_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f477-2640.png?v8&amp;#34;,&#xA;  &amp;#34;control_knobs&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f39b.png?v8&amp;#34;,&#xA;  &amp;#34;convenience_store&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ea.png?v8&amp;#34;,&#xA;  &amp;#34;cook&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f373.png?v8&amp;#34;,&#xA;  &amp;#34;cook_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f0.png?v8&amp;#34;,&#xA;  &amp;#34;cookie&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f36a.png?v8&amp;#34;,&#xA;  &amp;#34;cool&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f192.png?v8&amp;#34;,&#xA;  &amp;#34;cop&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f46e.png?v8&amp;#34;,&#xA;  &amp;#34;copyright&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/00a9.png?v8&amp;#34;,&#xA;  &amp;#34;coral&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fab8.png?v8&amp;#34;,&#xA;  &amp;#34;corn&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f33d.png?v8&amp;#34;,&#xA;  &amp;#34;costa_rica&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;cote_divoire&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1ee.png?v8&amp;#34;,&#xA;  &amp;#34;couch_and_lamp&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6cb.png?v8&amp;#34;,&#xA;  &amp;#34;couple&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f46b.png?v8&amp;#34;,&#xA;  &amp;#34;couple_with_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f491.png?v8&amp;#34;,&#xA;  &amp;#34;couple_with_heart_man_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-2764-1f468.png?v8&amp;#34;,&#xA;  &amp;#34;couple_with_heart_woman_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-2764-1f468.png?v8&amp;#34;,&#xA;  &amp;#34;couple_with_heart_woman_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-2764-1f469.png?v8&amp;#34;,&#xA;  &amp;#34;couplekiss&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f48f.png?v8&amp;#34;,&#xA;  &amp;#34;couplekiss_man_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-2764-1f48b-1f468.png?v8&amp;#34;,&#xA;  &amp;#34;couplekiss_man_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-2764-1f48b-1f468.png?v8&amp;#34;,&#xA;  &amp;#34;couplekiss_woman_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-2764-1f48b-1f469.png?v8&amp;#34;,&#xA;  &amp;#34;cow&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f42e.png?v8&amp;#34;,&#xA;  &amp;#34;cow2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f404.png?v8&amp;#34;,&#xA;  &amp;#34;cowboy_hat_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f920.png?v8&amp;#34;,&#xA;  &amp;#34;crab&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f980.png?v8&amp;#34;,&#xA;  &amp;#34;crayon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f58d.png?v8&amp;#34;,&#xA;  &amp;#34;credit_card&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4b3.png?v8&amp;#34;,&#xA;  &amp;#34;crescent_moon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f319.png?v8&amp;#34;,&#xA;  &amp;#34;cricket&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f997.png?v8&amp;#34;,&#xA;  &amp;#34;cricket_game&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3cf.png?v8&amp;#34;,&#xA;  &amp;#34;croatia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;crocodile&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f40a.png?v8&amp;#34;,&#xA;  &amp;#34;croissant&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f950.png?v8&amp;#34;,&#xA;  &amp;#34;crossed_fingers&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f91e.png?v8&amp;#34;,&#xA;  &amp;#34;crossed_flags&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f38c.png?v8&amp;#34;,&#xA;  &amp;#34;crossed_swords&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2694.png?v8&amp;#34;,&#xA;  &amp;#34;crown&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f451.png?v8&amp;#34;,&#xA;  &amp;#34;crutch&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa7c.png?v8&amp;#34;,&#xA;  &amp;#34;cry&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f622.png?v8&amp;#34;,&#xA;  &amp;#34;crying_cat_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f63f.png?v8&amp;#34;,&#xA;  &amp;#34;crystal_ball&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f52e.png?v8&amp;#34;,&#xA;  &amp;#34;cuba&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fa.png?v8&amp;#34;,&#xA;  &amp;#34;cucumber&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f952.png?v8&amp;#34;,&#xA;  &amp;#34;cup_with_straw&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f964.png?v8&amp;#34;,&#xA;  &amp;#34;cupcake&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9c1.png?v8&amp;#34;,&#xA;  &amp;#34;cupid&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f498.png?v8&amp;#34;,&#xA;  &amp;#34;curacao&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fc.png?v8&amp;#34;,&#xA;  &amp;#34;curling_stone&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f94c.png?v8&amp;#34;,&#xA;  &amp;#34;curly_haired_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9b1.png?v8&amp;#34;,&#xA;  &amp;#34;curly_haired_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9b1.png?v8&amp;#34;,&#xA;  &amp;#34;curly_loop&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/27b0.png?v8&amp;#34;,&#xA;  &amp;#34;currency_exchange&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4b1.png?v8&amp;#34;,&#xA;  &amp;#34;curry&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f35b.png?v8&amp;#34;,&#xA;  &amp;#34;cursing_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f92c.png?v8&amp;#34;,&#xA;  &amp;#34;custard&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f36e.png?v8&amp;#34;,&#xA;  &amp;#34;customs&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6c3.png?v8&amp;#34;,&#xA;  &amp;#34;cut_of_meat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f969.png?v8&amp;#34;,&#xA;  &amp;#34;cyclone&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f300.png?v8&amp;#34;,&#xA;  &amp;#34;cyprus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1fe.png?v8&amp;#34;,&#xA;  &amp;#34;czech_republic&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1ff.png?v8&amp;#34;,&#xA;  &amp;#34;dagger&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5e1.png?v8&amp;#34;,&#xA;  &amp;#34;dancer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f483.png?v8&amp;#34;,&#xA;  &amp;#34;dancers&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f46f.png?v8&amp;#34;,&#xA;  &amp;#34;dancing_men&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f46f-2642.png?v8&amp;#34;,&#xA;  &amp;#34;dancing_women&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f46f-2640.png?v8&amp;#34;,&#xA;  &amp;#34;dango&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f361.png?v8&amp;#34;,&#xA;  &amp;#34;dark_sunglasses&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f576.png?v8&amp;#34;,&#xA;  &amp;#34;dart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3af.png?v8&amp;#34;,&#xA;  &amp;#34;dash&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4a8.png?v8&amp;#34;,&#xA;  &amp;#34;date&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4c5.png?v8&amp;#34;,&#xA;  &amp;#34;de&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;deaf_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9cf-2642.png?v8&amp;#34;,&#xA;  &amp;#34;deaf_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9cf.png?v8&amp;#34;,&#xA;  &amp;#34;deaf_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9cf-2640.png?v8&amp;#34;,&#xA;  &amp;#34;deciduous_tree&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f333.png?v8&amp;#34;,&#xA;  &amp;#34;deer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f98c.png?v8&amp;#34;,&#xA;  &amp;#34;denmark&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1f0.png?v8&amp;#34;,&#xA;  &amp;#34;department_store&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ec.png?v8&amp;#34;,&#xA;  &amp;#34;dependabot&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/dependabot.png?v8&amp;#34;,&#xA;  &amp;#34;derelict_house&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3da.png?v8&amp;#34;,&#xA;  &amp;#34;desert&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3dc.png?v8&amp;#34;,&#xA;  &amp;#34;desert_island&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3dd.png?v8&amp;#34;,&#xA;  &amp;#34;desktop_computer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5a5.png?v8&amp;#34;,&#xA;  &amp;#34;detective&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f575.png?v8&amp;#34;,&#xA;  &amp;#34;diamond_shape_with_a_dot_inside&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4a0.png?v8&amp;#34;,&#xA;  &amp;#34;diamonds&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2666.png?v8&amp;#34;,&#xA;  &amp;#34;diego_garcia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;disappointed&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f61e.png?v8&amp;#34;,&#xA;  &amp;#34;disappointed_relieved&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f625.png?v8&amp;#34;,&#xA;  &amp;#34;disguised_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f978.png?v8&amp;#34;,&#xA;  &amp;#34;diving_mask&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f93f.png?v8&amp;#34;,&#xA;  &amp;#34;diya_lamp&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa94.png?v8&amp;#34;,&#xA;  &amp;#34;dizzy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4ab.png?v8&amp;#34;,&#xA;  &amp;#34;dizzy_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f635.png?v8&amp;#34;,&#xA;  &amp;#34;djibouti&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1ef.png?v8&amp;#34;,&#xA;  &amp;#34;dna&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ec.png?v8&amp;#34;,&#xA;  &amp;#34;do_not_litter&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6af.png?v8&amp;#34;,&#xA;  &amp;#34;dodo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9a4.png?v8&amp;#34;,&#xA;  &amp;#34;dog&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f436.png?v8&amp;#34;,&#xA;  &amp;#34;dog2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f415.png?v8&amp;#34;,&#xA;  &amp;#34;dollar&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4b5.png?v8&amp;#34;,&#xA;  &amp;#34;dolls&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f38e.png?v8&amp;#34;,&#xA;  &amp;#34;dolphin&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f42c.png?v8&amp;#34;,&#xA;  &amp;#34;dominica&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;dominican_republic&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e9-1f1f4.png?v8&amp;#34;,&#xA;  &amp;#34;donkey&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1facf.png?v8&amp;#34;,&#xA;  &amp;#34;door&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6aa.png?v8&amp;#34;,&#xA;  &amp;#34;dotted_line_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fae5.png?v8&amp;#34;,&#xA;  &amp;#34;doughnut&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f369.png?v8&amp;#34;,&#xA;  &amp;#34;dove&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f54a.png?v8&amp;#34;,&#xA;  &amp;#34;dragon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f409.png?v8&amp;#34;,&#xA;  &amp;#34;dragon_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f432.png?v8&amp;#34;,&#xA;  &amp;#34;dress&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f457.png?v8&amp;#34;,&#xA;  &amp;#34;dromedary_camel&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f42a.png?v8&amp;#34;,&#xA;  &amp;#34;drooling_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f924.png?v8&amp;#34;,&#xA;  &amp;#34;drop_of_blood&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa78.png?v8&amp;#34;,&#xA;  &amp;#34;droplet&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4a7.png?v8&amp;#34;,&#xA;  &amp;#34;drum&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f941.png?v8&amp;#34;,&#xA;  &amp;#34;duck&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f986.png?v8&amp;#34;,&#xA;  &amp;#34;dumpling&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f95f.png?v8&amp;#34;,&#xA;  &amp;#34;dvd&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4c0.png?v8&amp;#34;,&#xA;  &amp;#34;e-mail&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4e7.png?v8&amp;#34;,&#xA;  &amp;#34;eagle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f985.png?v8&amp;#34;,&#xA;  &amp;#34;ear&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f442.png?v8&amp;#34;,&#xA;  &amp;#34;ear_of_rice&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f33e.png?v8&amp;#34;,&#xA;  &amp;#34;ear_with_hearing_aid&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9bb.png?v8&amp;#34;,&#xA;  &amp;#34;earth_africa&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f30d.png?v8&amp;#34;,&#xA;  &amp;#34;earth_americas&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f30e.png?v8&amp;#34;,&#xA;  &amp;#34;earth_asia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f30f.png?v8&amp;#34;,&#xA;  &amp;#34;ecuador&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1e8.png?v8&amp;#34;,&#xA;  &amp;#34;egg&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f95a.png?v8&amp;#34;,&#xA;  &amp;#34;eggplant&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f346.png?v8&amp;#34;,&#xA;  &amp;#34;egypt&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;eight&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/0038-20e3.png?v8&amp;#34;,&#xA;  &amp;#34;eight_pointed_black_star&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2734.png?v8&amp;#34;,&#xA;  &amp;#34;eight_spoked_asterisk&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2733.png?v8&amp;#34;,&#xA;  &amp;#34;eject_button&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23cf.png?v8&amp;#34;,&#xA;  &amp;#34;el_salvador&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1fb.png?v8&amp;#34;,&#xA;  &amp;#34;electric_plug&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f50c.png?v8&amp;#34;,&#xA;  &amp;#34;electron&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/electron.png?v8&amp;#34;,&#xA;  &amp;#34;elephant&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f418.png?v8&amp;#34;,&#xA;  &amp;#34;elevator&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6d7.png?v8&amp;#34;,&#xA;  &amp;#34;elf&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9dd.png?v8&amp;#34;,&#xA;  &amp;#34;elf_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9dd-2642.png?v8&amp;#34;,&#xA;  &amp;#34;elf_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9dd-2640.png?v8&amp;#34;,&#xA;  &amp;#34;email&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4e7.png?v8&amp;#34;,&#xA;  &amp;#34;empty_nest&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fab9.png?v8&amp;#34;,&#xA;  &amp;#34;end&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f51a.png?v8&amp;#34;,&#xA;  &amp;#34;england&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3f4-e0067-e0062-e0065-e006e-e0067-e007f.png?v8&amp;#34;,&#xA;  &amp;#34;envelope&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2709.png?v8&amp;#34;,&#xA;  &amp;#34;envelope_with_arrow&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4e9.png?v8&amp;#34;,&#xA;  &amp;#34;equatorial_guinea&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f6.png?v8&amp;#34;,&#xA;  &amp;#34;eritrea&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;es&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1f8.png?v8&amp;#34;,&#xA;  &amp;#34;estonia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;ethiopia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1f9.png?v8&amp;#34;,&#xA;  &amp;#34;eu&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1fa.png?v8&amp;#34;,&#xA;  &amp;#34;euro&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4b6.png?v8&amp;#34;,&#xA;  &amp;#34;european_castle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3f0.png?v8&amp;#34;,&#xA;  &amp;#34;european_post_office&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3e4.png?v8&amp;#34;,&#xA;  &amp;#34;european_union&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1fa.png?v8&amp;#34;,&#xA;  &amp;#34;evergreen_tree&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f332.png?v8&amp;#34;,&#xA;  &amp;#34;exclamation&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2757.png?v8&amp;#34;,&#xA;  &amp;#34;exploding_head&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f92f.png?v8&amp;#34;,&#xA;  &amp;#34;expressionless&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f611.png?v8&amp;#34;,&#xA;  &amp;#34;eye&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f441.png?v8&amp;#34;,&#xA;  &amp;#34;eye_speech_bubble&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f441-1f5e8.png?v8&amp;#34;,&#xA;  &amp;#34;eyeglasses&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f453.png?v8&amp;#34;,&#xA;  &amp;#34;eyes&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f440.png?v8&amp;#34;,&#xA;  &amp;#34;face_exhaling&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f62e-1f4a8.png?v8&amp;#34;,&#xA;  &amp;#34;face_holding_back_tears&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f979.png?v8&amp;#34;,&#xA;  &amp;#34;face_in_clouds&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f636-1f32b.png?v8&amp;#34;,&#xA;  &amp;#34;face_with_diagonal_mouth&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fae4.png?v8&amp;#34;,&#xA;  &amp;#34;face_with_head_bandage&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f915.png?v8&amp;#34;,&#xA;  &amp;#34;face_with_open_eyes_and_hand_over_mouth&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fae2.png?v8&amp;#34;,&#xA;  &amp;#34;face_with_peeking_eye&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fae3.png?v8&amp;#34;,&#xA;  &amp;#34;face_with_spiral_eyes&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f635-1f4ab.png?v8&amp;#34;,&#xA;  &amp;#34;face_with_thermometer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f912.png?v8&amp;#34;,&#xA;  &amp;#34;facepalm&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f926.png?v8&amp;#34;,&#xA;  &amp;#34;facepunch&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f44a.png?v8&amp;#34;,&#xA;  &amp;#34;factory&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ed.png?v8&amp;#34;,&#xA;  &amp;#34;factory_worker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f3ed.png?v8&amp;#34;,&#xA;  &amp;#34;fairy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9da.png?v8&amp;#34;,&#xA;  &amp;#34;fairy_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9da-2642.png?v8&amp;#34;,&#xA;  &amp;#34;fairy_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9da-2640.png?v8&amp;#34;,&#xA;  &amp;#34;falafel&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9c6.png?v8&amp;#34;,&#xA;  &amp;#34;falkland_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1f0.png?v8&amp;#34;,&#xA;  &amp;#34;fallen_leaf&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f342.png?v8&amp;#34;,&#xA;  &amp;#34;family&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f46a.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_boy_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f466-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_girl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f467.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_girl_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f467-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_girl_girl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f467-1f467.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_man_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_man_boy_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f466-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_man_girl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f467.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_man_girl_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f467-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_man_girl_girl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f468-1f467-1f467.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_woman_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_woman_boy_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f466-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_woman_girl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f467.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_woman_girl_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f467-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_man_woman_girl_girl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f469-1f467-1f467.png?v8&amp;#34;,&#xA;  &amp;#34;family_woman_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_woman_boy_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f466-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_woman_girl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f467.png?v8&amp;#34;,&#xA;  &amp;#34;family_woman_girl_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f467-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_woman_girl_girl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f467-1f467.png?v8&amp;#34;,&#xA;  &amp;#34;family_woman_woman_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_woman_woman_boy_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f466-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_woman_woman_girl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f467.png?v8&amp;#34;,&#xA;  &amp;#34;family_woman_woman_girl_boy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f467-1f466.png?v8&amp;#34;,&#xA;  &amp;#34;family_woman_woman_girl_girl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f469-1f467-1f467.png?v8&amp;#34;,&#xA;  &amp;#34;farmer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f33e.png?v8&amp;#34;,&#xA;  &amp;#34;faroe_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1f4.png?v8&amp;#34;,&#xA;  &amp;#34;fast_forward&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23e9.png?v8&amp;#34;,&#xA;  &amp;#34;fax&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4e0.png?v8&amp;#34;,&#xA;  &amp;#34;fearful&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f628.png?v8&amp;#34;,&#xA;  &amp;#34;feather&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fab6.png?v8&amp;#34;,&#xA;  &amp;#34;feelsgood&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/feelsgood.png?v8&amp;#34;,&#xA;  &amp;#34;feet&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f43e.png?v8&amp;#34;,&#xA;  &amp;#34;female_detective&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f575-2640.png?v8&amp;#34;,&#xA;  &amp;#34;female_sign&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2640.png?v8&amp;#34;,&#xA;  &amp;#34;ferris_wheel&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3a1.png?v8&amp;#34;,&#xA;  &amp;#34;ferry&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f4.png?v8&amp;#34;,&#xA;  &amp;#34;field_hockey&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3d1.png?v8&amp;#34;,&#xA;  &amp;#34;fiji&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1ef.png?v8&amp;#34;,&#xA;  &amp;#34;file_cabinet&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5c4.png?v8&amp;#34;,&#xA;  &amp;#34;file_folder&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4c1.png?v8&amp;#34;,&#xA;  &amp;#34;film_projector&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4fd.png?v8&amp;#34;,&#xA;  &amp;#34;film_strip&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f39e.png?v8&amp;#34;,&#xA;  &amp;#34;finland&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1ee.png?v8&amp;#34;,&#xA;  &amp;#34;finnadie&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/finnadie.png?v8&amp;#34;,&#xA;  &amp;#34;fire&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f525.png?v8&amp;#34;,&#xA;  &amp;#34;fire_engine&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f692.png?v8&amp;#34;,&#xA;  &amp;#34;fire_extinguisher&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ef.png?v8&amp;#34;,&#xA;  &amp;#34;firecracker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9e8.png?v8&amp;#34;,&#xA;  &amp;#34;firefighter&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f692.png?v8&amp;#34;,&#xA;  &amp;#34;fireworks&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f386.png?v8&amp;#34;,&#xA;  &amp;#34;first_quarter_moon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f313.png?v8&amp;#34;,&#xA;  &amp;#34;first_quarter_moon_with_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f31b.png?v8&amp;#34;,&#xA;  &amp;#34;fish&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f41f.png?v8&amp;#34;,&#xA;  &amp;#34;fish_cake&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f365.png?v8&amp;#34;,&#xA;  &amp;#34;fishing_pole_and_fish&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3a3.png?v8&amp;#34;,&#xA;  &amp;#34;fishsticks&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/fishsticks.png?v8&amp;#34;,&#xA;  &amp;#34;fist&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/270a.png?v8&amp;#34;,&#xA;  &amp;#34;fist_left&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f91b.png?v8&amp;#34;,&#xA;  &amp;#34;fist_oncoming&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f44a.png?v8&amp;#34;,&#xA;  &amp;#34;fist_raised&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/270a.png?v8&amp;#34;,&#xA;  &amp;#34;fist_right&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f91c.png?v8&amp;#34;,&#xA;  &amp;#34;five&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/0035-20e3.png?v8&amp;#34;,&#xA;  &amp;#34;flags&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f38f.png?v8&amp;#34;,&#xA;  &amp;#34;flamingo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9a9.png?v8&amp;#34;,&#xA;  &amp;#34;flashlight&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f526.png?v8&amp;#34;,&#xA;  &amp;#34;flat_shoe&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f97f.png?v8&amp;#34;,&#xA;  &amp;#34;flatbread&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fad3.png?v8&amp;#34;,&#xA;  &amp;#34;fleur_de_lis&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/269c.png?v8&amp;#34;,&#xA;  &amp;#34;flight_arrival&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6ec.png?v8&amp;#34;,&#xA;  &amp;#34;flight_departure&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6eb.png?v8&amp;#34;,&#xA;  &amp;#34;flipper&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f42c.png?v8&amp;#34;,&#xA;  &amp;#34;floppy_disk&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4be.png?v8&amp;#34;,&#xA;  &amp;#34;flower_playing_cards&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3b4.png?v8&amp;#34;,&#xA;  &amp;#34;flushed&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f633.png?v8&amp;#34;,&#xA;  &amp;#34;flute&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa88.png?v8&amp;#34;,&#xA;  &amp;#34;fly&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fab0.png?v8&amp;#34;,&#xA;  &amp;#34;flying_disc&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f94f.png?v8&amp;#34;,&#xA;  &amp;#34;flying_saucer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6f8.png?v8&amp;#34;,&#xA;  &amp;#34;fog&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f32b.png?v8&amp;#34;,&#xA;  &amp;#34;foggy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f301.png?v8&amp;#34;,&#xA;  &amp;#34;folding_hand_fan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faad.png?v8&amp;#34;,&#xA;  &amp;#34;fondue&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fad5.png?v8&amp;#34;,&#xA;  &amp;#34;foot&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9b6.png?v8&amp;#34;,&#xA;  &amp;#34;football&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c8.png?v8&amp;#34;,&#xA;  &amp;#34;footprints&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f463.png?v8&amp;#34;,&#xA;  &amp;#34;fork_and_knife&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f374.png?v8&amp;#34;,&#xA;  &amp;#34;fortune_cookie&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f960.png?v8&amp;#34;,&#xA;  &amp;#34;fountain&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f2.png?v8&amp;#34;,&#xA;  &amp;#34;fountain_pen&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f58b.png?v8&amp;#34;,&#xA;  &amp;#34;four&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/0034-20e3.png?v8&amp;#34;,&#xA;  &amp;#34;four_leaf_clover&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f340.png?v8&amp;#34;,&#xA;  &amp;#34;fox_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f98a.png?v8&amp;#34;,&#xA;  &amp;#34;fr&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;framed_picture&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5bc.png?v8&amp;#34;,&#xA;  &amp;#34;free&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f193.png?v8&amp;#34;,&#xA;  &amp;#34;french_guiana&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1eb.png?v8&amp;#34;,&#xA;  &amp;#34;french_polynesia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1eb.png?v8&amp;#34;,&#xA;  &amp;#34;french_southern_territories&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1eb.png?v8&amp;#34;,&#xA;  &amp;#34;fried_egg&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f373.png?v8&amp;#34;,&#xA;  &amp;#34;fried_shrimp&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f364.png?v8&amp;#34;,&#xA;  &amp;#34;fries&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f35f.png?v8&amp;#34;,&#xA;  &amp;#34;frog&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f438.png?v8&amp;#34;,&#xA;  &amp;#34;frowning&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f626.png?v8&amp;#34;,&#xA;  &amp;#34;frowning_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2639.png?v8&amp;#34;,&#xA;  &amp;#34;frowning_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f64d-2642.png?v8&amp;#34;,&#xA;  &amp;#34;frowning_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f64d.png?v8&amp;#34;,&#xA;  &amp;#34;frowning_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f64d-2640.png?v8&amp;#34;,&#xA;  &amp;#34;fu&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f595.png?v8&amp;#34;,&#xA;  &amp;#34;fuelpump&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26fd.png?v8&amp;#34;,&#xA;  &amp;#34;full_moon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f315.png?v8&amp;#34;,&#xA;  &amp;#34;full_moon_with_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f31d.png?v8&amp;#34;,&#xA;  &amp;#34;funeral_urn&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26b1.png?v8&amp;#34;,&#xA;  &amp;#34;gabon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;gambia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;game_die&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3b2.png?v8&amp;#34;,&#xA;  &amp;#34;garlic&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9c4.png?v8&amp;#34;,&#xA;  &amp;#34;gb&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1e7.png?v8&amp;#34;,&#xA;  &amp;#34;gear&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2699.png?v8&amp;#34;,&#xA;  &amp;#34;gem&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f48e.png?v8&amp;#34;,&#xA;  &amp;#34;gemini&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/264a.png?v8&amp;#34;,&#xA;  &amp;#34;genie&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9de.png?v8&amp;#34;,&#xA;  &amp;#34;genie_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9de-2642.png?v8&amp;#34;,&#xA;  &amp;#34;genie_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9de-2640.png?v8&amp;#34;,&#xA;  &amp;#34;georgia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;ghana&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1ed.png?v8&amp;#34;,&#xA;  &amp;#34;ghost&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f47b.png?v8&amp;#34;,&#xA;  &amp;#34;gibraltar&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1ee.png?v8&amp;#34;,&#xA;  &amp;#34;gift&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f381.png?v8&amp;#34;,&#xA;  &amp;#34;gift_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f49d.png?v8&amp;#34;,&#xA;  &amp;#34;ginger_root&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fada.png?v8&amp;#34;,&#xA;  &amp;#34;giraffe&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f992.png?v8&amp;#34;,&#xA;  &amp;#34;girl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f467.png?v8&amp;#34;,&#xA;  &amp;#34;globe_with_meridians&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f310.png?v8&amp;#34;,&#xA;  &amp;#34;gloves&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9e4.png?v8&amp;#34;,&#xA;  &amp;#34;goal_net&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f945.png?v8&amp;#34;,&#xA;  &amp;#34;goat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f410.png?v8&amp;#34;,&#xA;  &amp;#34;goberserk&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/goberserk.png?v8&amp;#34;,&#xA;  &amp;#34;godmode&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/godmode.png?v8&amp;#34;,&#xA;  &amp;#34;goggles&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f97d.png?v8&amp;#34;,&#xA;  &amp;#34;golf&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f3.png?v8&amp;#34;,&#xA;  &amp;#34;golfing&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3cc.png?v8&amp;#34;,&#xA;  &amp;#34;golfing_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3cc-2642.png?v8&amp;#34;,&#xA;  &amp;#34;golfing_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3cc-2640.png?v8&amp;#34;,&#xA;  &amp;#34;goose&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fabf.png?v8&amp;#34;,&#xA;  &amp;#34;gorilla&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f98d.png?v8&amp;#34;,&#xA;  &amp;#34;grapes&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f347.png?v8&amp;#34;,&#xA;  &amp;#34;greece&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;green_apple&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f34f.png?v8&amp;#34;,&#xA;  &amp;#34;green_book&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4d7.png?v8&amp;#34;,&#xA;  &amp;#34;green_circle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f7e2.png?v8&amp;#34;,&#xA;  &amp;#34;green_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f49a.png?v8&amp;#34;,&#xA;  &amp;#34;green_salad&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f957.png?v8&amp;#34;,&#xA;  &amp;#34;green_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f7e9.png?v8&amp;#34;,&#xA;  &amp;#34;greenland&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f1.png?v8&amp;#34;,&#xA;  &amp;#34;grenada&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1e9.png?v8&amp;#34;,&#xA;  &amp;#34;grey_exclamation&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2755.png?v8&amp;#34;,&#xA;  &amp;#34;grey_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa76.png?v8&amp;#34;,&#xA;  &amp;#34;grey_question&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2754.png?v8&amp;#34;,&#xA;  &amp;#34;grimacing&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f62c.png?v8&amp;#34;,&#xA;  &amp;#34;grin&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f601.png?v8&amp;#34;,&#xA;  &amp;#34;grinning&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f600.png?v8&amp;#34;,&#xA;  &amp;#34;guadeloupe&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f5.png?v8&amp;#34;,&#xA;  &amp;#34;guam&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1fa.png?v8&amp;#34;,&#xA;  &amp;#34;guard&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f482.png?v8&amp;#34;,&#xA;  &amp;#34;guardsman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f482-2642.png?v8&amp;#34;,&#xA;  &amp;#34;guardswoman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f482-2640.png?v8&amp;#34;,&#xA;  &amp;#34;guatemala&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f9.png?v8&amp;#34;,&#xA;  &amp;#34;guernsey&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;guide_dog&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ae.png?v8&amp;#34;,&#xA;  &amp;#34;guinea&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f3.png?v8&amp;#34;,&#xA;  &amp;#34;guinea_bissau&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1fc.png?v8&amp;#34;,&#xA;  &amp;#34;guitar&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3b8.png?v8&amp;#34;,&#xA;  &amp;#34;gun&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f52b.png?v8&amp;#34;,&#xA;  &amp;#34;guyana&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1fe.png?v8&amp;#34;,&#xA;  &amp;#34;hair_pick&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faae.png?v8&amp;#34;,&#xA;  &amp;#34;haircut&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f487.png?v8&amp;#34;,&#xA;  &amp;#34;haircut_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f487-2642.png?v8&amp;#34;,&#xA;  &amp;#34;haircut_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f487-2640.png?v8&amp;#34;,&#xA;  &amp;#34;haiti&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f9.png?v8&amp;#34;,&#xA;  &amp;#34;hamburger&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f354.png?v8&amp;#34;,&#xA;  &amp;#34;hammer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f528.png?v8&amp;#34;,&#xA;  &amp;#34;hammer_and_pick&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2692.png?v8&amp;#34;,&#xA;  &amp;#34;hammer_and_wrench&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6e0.png?v8&amp;#34;,&#xA;  &amp;#34;hamsa&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faac.png?v8&amp;#34;,&#xA;  &amp;#34;hamster&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f439.png?v8&amp;#34;,&#xA;  &amp;#34;hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/270b.png?v8&amp;#34;,&#xA;  &amp;#34;hand_over_mouth&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f92d.png?v8&amp;#34;,&#xA;  &amp;#34;hand_with_index_finger_and_thumb_crossed&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faf0.png?v8&amp;#34;,&#xA;  &amp;#34;handbag&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f45c.png?v8&amp;#34;,&#xA;  &amp;#34;handball_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f93e.png?v8&amp;#34;,&#xA;  &amp;#34;handshake&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f91d.png?v8&amp;#34;,&#xA;  &amp;#34;hankey&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4a9.png?v8&amp;#34;,&#xA;  &amp;#34;hash&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/0023-20e3.png?v8&amp;#34;,&#xA;  &amp;#34;hatched_chick&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f425.png?v8&amp;#34;,&#xA;  &amp;#34;hatching_chick&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f423.png?v8&amp;#34;,&#xA;  &amp;#34;headphones&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3a7.png?v8&amp;#34;,&#xA;  &amp;#34;headstone&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faa6.png?v8&amp;#34;,&#xA;  &amp;#34;health_worker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-2695.png?v8&amp;#34;,&#xA;  &amp;#34;hear_no_evil&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f649.png?v8&amp;#34;,&#xA;  &amp;#34;heard_mcdonald_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2764.png?v8&amp;#34;,&#xA;  &amp;#34;heart_decoration&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f49f.png?v8&amp;#34;,&#xA;  &amp;#34;heart_eyes&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f60d.png?v8&amp;#34;,&#xA;  &amp;#34;heart_eyes_cat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f63b.png?v8&amp;#34;,&#xA;  &amp;#34;heart_hands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faf6.png?v8&amp;#34;,&#xA;  &amp;#34;heart_on_fire&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2764-1f525.png?v8&amp;#34;,&#xA;  &amp;#34;heartbeat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f493.png?v8&amp;#34;,&#xA;  &amp;#34;heartpulse&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f497.png?v8&amp;#34;,&#xA;  &amp;#34;hearts&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2665.png?v8&amp;#34;,&#xA;  &amp;#34;heavy_check_mark&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2714.png?v8&amp;#34;,&#xA;  &amp;#34;heavy_division_sign&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2797.png?v8&amp;#34;,&#xA;  &amp;#34;heavy_dollar_sign&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4b2.png?v8&amp;#34;,&#xA;  &amp;#34;heavy_equals_sign&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f7f0.png?v8&amp;#34;,&#xA;  &amp;#34;heavy_exclamation_mark&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2757.png?v8&amp;#34;,&#xA;  &amp;#34;heavy_heart_exclamation&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2763.png?v8&amp;#34;,&#xA;  &amp;#34;heavy_minus_sign&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2796.png?v8&amp;#34;,&#xA;  &amp;#34;heavy_multiplication_x&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2716.png?v8&amp;#34;,&#xA;  &amp;#34;heavy_plus_sign&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2795.png?v8&amp;#34;,&#xA;  &amp;#34;hedgehog&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f994.png?v8&amp;#34;,&#xA;  &amp;#34;helicopter&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f681.png?v8&amp;#34;,&#xA;  &amp;#34;herb&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f33f.png?v8&amp;#34;,&#xA;  &amp;#34;hibiscus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f33a.png?v8&amp;#34;,&#xA;  &amp;#34;high_brightness&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f506.png?v8&amp;#34;,&#xA;  &amp;#34;high_heel&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f460.png?v8&amp;#34;,&#xA;  &amp;#34;hiking_boot&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f97e.png?v8&amp;#34;,&#xA;  &amp;#34;hindu_temple&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6d5.png?v8&amp;#34;,&#xA;  &amp;#34;hippopotamus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f99b.png?v8&amp;#34;,&#xA;  &amp;#34;hocho&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f52a.png?v8&amp;#34;,&#xA;  &amp;#34;hole&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f573.png?v8&amp;#34;,&#xA;  &amp;#34;honduras&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f3.png?v8&amp;#34;,&#xA;  &amp;#34;honey_pot&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f36f.png?v8&amp;#34;,&#xA;  &amp;#34;honeybee&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f41d.png?v8&amp;#34;,&#xA;  &amp;#34;hong_kong&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1f0.png?v8&amp;#34;,&#xA;  &amp;#34;hook&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa9d.png?v8&amp;#34;,&#xA;  &amp;#34;horse&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f434.png?v8&amp;#34;,&#xA;  &amp;#34;horse_racing&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c7.png?v8&amp;#34;,&#xA;  &amp;#34;hospital&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3e5.png?v8&amp;#34;,&#xA;  &amp;#34;hot_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f975.png?v8&amp;#34;,&#xA;  &amp;#34;hot_pepper&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f336.png?v8&amp;#34;,&#xA;  &amp;#34;hotdog&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f32d.png?v8&amp;#34;,&#xA;  &amp;#34;hotel&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3e8.png?v8&amp;#34;,&#xA;  &amp;#34;hotsprings&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2668.png?v8&amp;#34;,&#xA;  &amp;#34;hourglass&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/231b.png?v8&amp;#34;,&#xA;  &amp;#34;hourglass_flowing_sand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23f3.png?v8&amp;#34;,&#xA;  &amp;#34;house&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3e0.png?v8&amp;#34;,&#xA;  &amp;#34;house_with_garden&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3e1.png?v8&amp;#34;,&#xA;  &amp;#34;houses&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3d8.png?v8&amp;#34;,&#xA;  &amp;#34;hugs&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f917.png?v8&amp;#34;,&#xA;  &amp;#34;hungary&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ed-1f1fa.png?v8&amp;#34;,&#xA;  &amp;#34;hurtrealbad&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/hurtrealbad.png?v8&amp;#34;,&#xA;  &amp;#34;hushed&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f62f.png?v8&amp;#34;,&#xA;  &amp;#34;hut&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6d6.png?v8&amp;#34;,&#xA;  &amp;#34;hyacinth&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fabb.png?v8&amp;#34;,&#xA;  &amp;#34;ice_cream&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f368.png?v8&amp;#34;,&#xA;  &amp;#34;ice_cube&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ca.png?v8&amp;#34;,&#xA;  &amp;#34;ice_hockey&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3d2.png?v8&amp;#34;,&#xA;  &amp;#34;ice_skate&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f8.png?v8&amp;#34;,&#xA;  &amp;#34;icecream&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f366.png?v8&amp;#34;,&#xA;  &amp;#34;iceland&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f8.png?v8&amp;#34;,&#xA;  &amp;#34;id&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f194.png?v8&amp;#34;,&#xA;  &amp;#34;identification_card&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faaa.png?v8&amp;#34;,&#xA;  &amp;#34;ideograph_advantage&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f250.png?v8&amp;#34;,&#xA;  &amp;#34;imp&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f47f.png?v8&amp;#34;,&#xA;  &amp;#34;inbox_tray&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4e5.png?v8&amp;#34;,&#xA;  &amp;#34;incoming_envelope&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4e8.png?v8&amp;#34;,&#xA;  &amp;#34;index_pointing_at_the_viewer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faf5.png?v8&amp;#34;,&#xA;  &amp;#34;india&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f3.png?v8&amp;#34;,&#xA;  &amp;#34;indonesia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1e9.png?v8&amp;#34;,&#xA;  &amp;#34;infinity&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/267e.png?v8&amp;#34;,&#xA;  &amp;#34;information_desk_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f481.png?v8&amp;#34;,&#xA;  &amp;#34;information_source&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2139.png?v8&amp;#34;,&#xA;  &amp;#34;innocent&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f607.png?v8&amp;#34;,&#xA;  &amp;#34;interrobang&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2049.png?v8&amp;#34;,&#xA;  &amp;#34;iphone&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4f1.png?v8&amp;#34;,&#xA;  &amp;#34;iran&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;iraq&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f6.png?v8&amp;#34;,&#xA;  &amp;#34;ireland&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;isle_of_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;israel&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f1.png?v8&amp;#34;,&#xA;  &amp;#34;it&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ee-1f1f9.png?v8&amp;#34;,&#xA;  &amp;#34;izakaya_lantern&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ee.png?v8&amp;#34;,&#xA;  &amp;#34;jack_o_lantern&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f383.png?v8&amp;#34;,&#xA;  &amp;#34;jamaica&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ef-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;japan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5fe.png?v8&amp;#34;,&#xA;  &amp;#34;japanese_castle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ef.png?v8&amp;#34;,&#xA;  &amp;#34;japanese_goblin&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f47a.png?v8&amp;#34;,&#xA;  &amp;#34;japanese_ogre&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f479.png?v8&amp;#34;,&#xA;  &amp;#34;jar&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fad9.png?v8&amp;#34;,&#xA;  &amp;#34;jeans&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f456.png?v8&amp;#34;,&#xA;  &amp;#34;jellyfish&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fabc.png?v8&amp;#34;,&#xA;  &amp;#34;jersey&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ef-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;jigsaw&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9e9.png?v8&amp;#34;,&#xA;  &amp;#34;jordan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ef-1f1f4.png?v8&amp;#34;,&#xA;  &amp;#34;joy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f602.png?v8&amp;#34;,&#xA;  &amp;#34;joy_cat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f639.png?v8&amp;#34;,&#xA;  &amp;#34;joystick&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f579.png?v8&amp;#34;,&#xA;  &amp;#34;jp&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ef-1f1f5.png?v8&amp;#34;,&#xA;  &amp;#34;judge&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-2696.png?v8&amp;#34;,&#xA;  &amp;#34;juggling_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f939.png?v8&amp;#34;,&#xA;  &amp;#34;kaaba&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f54b.png?v8&amp;#34;,&#xA;  &amp;#34;kangaroo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f998.png?v8&amp;#34;,&#xA;  &amp;#34;kazakhstan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ff.png?v8&amp;#34;,&#xA;  &amp;#34;kenya&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;key&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f511.png?v8&amp;#34;,&#xA;  &amp;#34;keyboard&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2328.png?v8&amp;#34;,&#xA;  &amp;#34;keycap_ten&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f51f.png?v8&amp;#34;,&#xA;  &amp;#34;khanda&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faaf.png?v8&amp;#34;,&#xA;  &amp;#34;kick_scooter&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6f4.png?v8&amp;#34;,&#xA;  &amp;#34;kimono&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f458.png?v8&amp;#34;,&#xA;  &amp;#34;kiribati&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ee.png?v8&amp;#34;,&#xA;  &amp;#34;kiss&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f48b.png?v8&amp;#34;,&#xA;  &amp;#34;kissing&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f617.png?v8&amp;#34;,&#xA;  &amp;#34;kissing_cat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f63d.png?v8&amp;#34;,&#xA;  &amp;#34;kissing_closed_eyes&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f61a.png?v8&amp;#34;,&#xA;  &amp;#34;kissing_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f618.png?v8&amp;#34;,&#xA;  &amp;#34;kissing_smiling_eyes&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f619.png?v8&amp;#34;,&#xA;  &amp;#34;kite&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa81.png?v8&amp;#34;,&#xA;  &amp;#34;kiwi_fruit&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f95d.png?v8&amp;#34;,&#xA;  &amp;#34;kneeling_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ce-2642.png?v8&amp;#34;,&#xA;  &amp;#34;kneeling_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ce.png?v8&amp;#34;,&#xA;  &amp;#34;kneeling_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ce-2640.png?v8&amp;#34;,&#xA;  &amp;#34;knife&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f52a.png?v8&amp;#34;,&#xA;  &amp;#34;knot&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faa2.png?v8&amp;#34;,&#xA;  &amp;#34;koala&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f428.png?v8&amp;#34;,&#xA;  &amp;#34;koko&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f201.png?v8&amp;#34;,&#xA;  &amp;#34;kosovo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fd-1f1f0.png?v8&amp;#34;,&#xA;  &amp;#34;kr&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;kuwait&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1fc.png?v8&amp;#34;,&#xA;  &amp;#34;kyrgyzstan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;lab_coat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f97c.png?v8&amp;#34;,&#xA;  &amp;#34;label&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3f7.png?v8&amp;#34;,&#xA;  &amp;#34;lacrosse&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f94d.png?v8&amp;#34;,&#xA;  &amp;#34;ladder&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa9c.png?v8&amp;#34;,&#xA;  &amp;#34;lady_beetle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f41e.png?v8&amp;#34;,&#xA;  &amp;#34;lantern&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ee.png?v8&amp;#34;,&#xA;  &amp;#34;laos&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;large_blue_circle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f535.png?v8&amp;#34;,&#xA;  &amp;#34;large_blue_diamond&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f537.png?v8&amp;#34;,&#xA;  &amp;#34;large_orange_diamond&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f536.png?v8&amp;#34;,&#xA;  &amp;#34;last_quarter_moon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f317.png?v8&amp;#34;,&#xA;  &amp;#34;last_quarter_moon_with_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f31c.png?v8&amp;#34;,&#xA;  &amp;#34;latin_cross&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/271d.png?v8&amp;#34;,&#xA;  &amp;#34;latvia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1fb.png?v8&amp;#34;,&#xA;  &amp;#34;laughing&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f606.png?v8&amp;#34;,&#xA;  &amp;#34;leafy_green&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f96c.png?v8&amp;#34;,&#xA;  &amp;#34;leaves&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f343.png?v8&amp;#34;,&#xA;  &amp;#34;lebanon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1e7.png?v8&amp;#34;,&#xA;  &amp;#34;ledger&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4d2.png?v8&amp;#34;,&#xA;  &amp;#34;left_luggage&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6c5.png?v8&amp;#34;,&#xA;  &amp;#34;left_right_arrow&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2194.png?v8&amp;#34;,&#xA;  &amp;#34;left_speech_bubble&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5e8.png?v8&amp;#34;,&#xA;  &amp;#34;leftwards_arrow_with_hook&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/21a9.png?v8&amp;#34;,&#xA;  &amp;#34;leftwards_hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faf2.png?v8&amp;#34;,&#xA;  &amp;#34;leftwards_pushing_hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faf7.png?v8&amp;#34;,&#xA;  &amp;#34;leg&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9b5.png?v8&amp;#34;,&#xA;  &amp;#34;lemon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f34b.png?v8&amp;#34;,&#xA;  &amp;#34;leo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/264c.png?v8&amp;#34;,&#xA;  &amp;#34;leopard&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f406.png?v8&amp;#34;,&#xA;  &amp;#34;lesotho&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1f8.png?v8&amp;#34;,&#xA;  &amp;#34;level_slider&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f39a.png?v8&amp;#34;,&#xA;  &amp;#34;liberia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;libra&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/264e.png?v8&amp;#34;,&#xA;  &amp;#34;libya&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1fe.png?v8&amp;#34;,&#xA;  &amp;#34;liechtenstein&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1ee.png?v8&amp;#34;,&#xA;  &amp;#34;light_blue_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa75.png?v8&amp;#34;,&#xA;  &amp;#34;light_rail&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f688.png?v8&amp;#34;,&#xA;  &amp;#34;link&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f517.png?v8&amp;#34;,&#xA;  &amp;#34;lion&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f981.png?v8&amp;#34;,&#xA;  &amp;#34;lips&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f444.png?v8&amp;#34;,&#xA;  &amp;#34;lipstick&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f484.png?v8&amp;#34;,&#xA;  &amp;#34;lithuania&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1f9.png?v8&amp;#34;,&#xA;  &amp;#34;lizard&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f98e.png?v8&amp;#34;,&#xA;  &amp;#34;llama&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f999.png?v8&amp;#34;,&#xA;  &amp;#34;lobster&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f99e.png?v8&amp;#34;,&#xA;  &amp;#34;lock&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f512.png?v8&amp;#34;,&#xA;  &amp;#34;lock_with_ink_pen&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f50f.png?v8&amp;#34;,&#xA;  &amp;#34;lollipop&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f36d.png?v8&amp;#34;,&#xA;  &amp;#34;long_drum&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa98.png?v8&amp;#34;,&#xA;  &amp;#34;loop&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/27bf.png?v8&amp;#34;,&#xA;  &amp;#34;lotion_bottle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9f4.png?v8&amp;#34;,&#xA;  &amp;#34;lotus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fab7.png?v8&amp;#34;,&#xA;  &amp;#34;lotus_position&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d8.png?v8&amp;#34;,&#xA;  &amp;#34;lotus_position_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d8-2642.png?v8&amp;#34;,&#xA;  &amp;#34;lotus_position_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d8-2640.png?v8&amp;#34;,&#xA;  &amp;#34;loud_sound&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f50a.png?v8&amp;#34;,&#xA;  &amp;#34;loudspeaker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4e2.png?v8&amp;#34;,&#xA;  &amp;#34;love_hotel&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3e9.png?v8&amp;#34;,&#xA;  &amp;#34;love_letter&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f48c.png?v8&amp;#34;,&#xA;  &amp;#34;love_you_gesture&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f91f.png?v8&amp;#34;,&#xA;  &amp;#34;low_battery&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faab.png?v8&amp;#34;,&#xA;  &amp;#34;low_brightness&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f505.png?v8&amp;#34;,&#xA;  &amp;#34;luggage&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9f3.png?v8&amp;#34;,&#xA;  &amp;#34;lungs&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fac1.png?v8&amp;#34;,&#xA;  &amp;#34;luxembourg&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1fa.png?v8&amp;#34;,&#xA;  &amp;#34;lying_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f925.png?v8&amp;#34;,&#xA;  &amp;#34;m&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/24c2.png?v8&amp;#34;,&#xA;  &amp;#34;macau&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f4.png?v8&amp;#34;,&#xA;  &amp;#34;macedonia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f0.png?v8&amp;#34;,&#xA;  &amp;#34;madagascar&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;mag&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f50d.png?v8&amp;#34;,&#xA;  &amp;#34;mag_right&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f50e.png?v8&amp;#34;,&#xA;  &amp;#34;mage&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d9.png?v8&amp;#34;,&#xA;  &amp;#34;mage_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d9-2642.png?v8&amp;#34;,&#xA;  &amp;#34;mage_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d9-2640.png?v8&amp;#34;,&#xA;  &amp;#34;magic_wand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa84.png?v8&amp;#34;,&#xA;  &amp;#34;magnet&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9f2.png?v8&amp;#34;,&#xA;  &amp;#34;mahjong&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f004.png?v8&amp;#34;,&#xA;  &amp;#34;mailbox&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4eb.png?v8&amp;#34;,&#xA;  &amp;#34;mailbox_closed&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4ea.png?v8&amp;#34;,&#xA;  &amp;#34;mailbox_with_mail&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4ec.png?v8&amp;#34;,&#xA;  &amp;#34;mailbox_with_no_mail&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4ed.png?v8&amp;#34;,&#xA;  &amp;#34;malawi&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fc.png?v8&amp;#34;,&#xA;  &amp;#34;malaysia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fe.png?v8&amp;#34;,&#xA;  &amp;#34;maldives&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fb.png?v8&amp;#34;,&#xA;  &amp;#34;male_detective&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f575-2642.png?v8&amp;#34;,&#xA;  &amp;#34;male_sign&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2642.png?v8&amp;#34;,&#xA;  &amp;#34;mali&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f1.png?v8&amp;#34;,&#xA;  &amp;#34;malta&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f9.png?v8&amp;#34;,&#xA;  &amp;#34;mammoth&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9a3.png?v8&amp;#34;,&#xA;  &amp;#34;man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468.png?v8&amp;#34;,&#xA;  &amp;#34;man_artist&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f3a8.png?v8&amp;#34;,&#xA;  &amp;#34;man_astronaut&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f680.png?v8&amp;#34;,&#xA;  &amp;#34;man_beard&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d4-2642.png?v8&amp;#34;,&#xA;  &amp;#34;man_cartwheeling&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f938-2642.png?v8&amp;#34;,&#xA;  &amp;#34;man_cook&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f373.png?v8&amp;#34;,&#xA;  &amp;#34;man_dancing&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f57a.png?v8&amp;#34;,&#xA;  &amp;#34;man_facepalming&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f926-2642.png?v8&amp;#34;,&#xA;  &amp;#34;man_factory_worker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f3ed.png?v8&amp;#34;,&#xA;  &amp;#34;man_farmer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f33e.png?v8&amp;#34;,&#xA;  &amp;#34;man_feeding_baby&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f37c.png?v8&amp;#34;,&#xA;  &amp;#34;man_firefighter&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f692.png?v8&amp;#34;,&#xA;  &amp;#34;man_health_worker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-2695.png?v8&amp;#34;,&#xA;  &amp;#34;man_in_manual_wheelchair&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9bd.png?v8&amp;#34;,&#xA;  &amp;#34;man_in_motorized_wheelchair&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9bc.png?v8&amp;#34;,&#xA;  &amp;#34;man_in_tuxedo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f935-2642.png?v8&amp;#34;,&#xA;  &amp;#34;man_judge&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-2696.png?v8&amp;#34;,&#xA;  &amp;#34;man_juggling&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f939-2642.png?v8&amp;#34;,&#xA;  &amp;#34;man_mechanic&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f527.png?v8&amp;#34;,&#xA;  &amp;#34;man_office_worker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f4bc.png?v8&amp;#34;,&#xA;  &amp;#34;man_pilot&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-2708.png?v8&amp;#34;,&#xA;  &amp;#34;man_playing_handball&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f93e-2642.png?v8&amp;#34;,&#xA;  &amp;#34;man_playing_water_polo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f93d-2642.png?v8&amp;#34;,&#xA;  &amp;#34;man_scientist&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f52c.png?v8&amp;#34;,&#xA;  &amp;#34;man_shrugging&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f937-2642.png?v8&amp;#34;,&#xA;  &amp;#34;man_singer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f3a4.png?v8&amp;#34;,&#xA;  &amp;#34;man_student&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f393.png?v8&amp;#34;,&#xA;  &amp;#34;man_teacher&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f3eb.png?v8&amp;#34;,&#xA;  &amp;#34;man_technologist&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f4bb.png?v8&amp;#34;,&#xA;  &amp;#34;man_with_gua_pi_mao&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f472.png?v8&amp;#34;,&#xA;  &amp;#34;man_with_probing_cane&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9af.png?v8&amp;#34;,&#xA;  &amp;#34;man_with_turban&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f473-2642.png?v8&amp;#34;,&#xA;  &amp;#34;man_with_veil&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f470-2642.png?v8&amp;#34;,&#xA;  &amp;#34;mandarin&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f34a.png?v8&amp;#34;,&#xA;  &amp;#34;mango&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f96d.png?v8&amp;#34;,&#xA;  &amp;#34;mans_shoe&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f45e.png?v8&amp;#34;,&#xA;  &amp;#34;mantelpiece_clock&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f570.png?v8&amp;#34;,&#xA;  &amp;#34;manual_wheelchair&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9bd.png?v8&amp;#34;,&#xA;  &amp;#34;maple_leaf&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f341.png?v8&amp;#34;,&#xA;  &amp;#34;maracas&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa87.png?v8&amp;#34;,&#xA;  &amp;#34;marshall_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1ed.png?v8&amp;#34;,&#xA;  &amp;#34;martial_arts_uniform&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f94b.png?v8&amp;#34;,&#xA;  &amp;#34;martinique&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f6.png?v8&amp;#34;,&#xA;  &amp;#34;mask&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f637.png?v8&amp;#34;,&#xA;  &amp;#34;massage&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f486.png?v8&amp;#34;,&#xA;  &amp;#34;massage_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f486-2642.png?v8&amp;#34;,&#xA;  &amp;#34;massage_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f486-2640.png?v8&amp;#34;,&#xA;  &amp;#34;mate&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9c9.png?v8&amp;#34;,&#xA;  &amp;#34;mauritania&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;mauritius&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fa.png?v8&amp;#34;,&#xA;  &amp;#34;mayotte&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fe-1f1f9.png?v8&amp;#34;,&#xA;  &amp;#34;meat_on_bone&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f356.png?v8&amp;#34;,&#xA;  &amp;#34;mechanic&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f527.png?v8&amp;#34;,&#xA;  &amp;#34;mechanical_arm&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9be.png?v8&amp;#34;,&#xA;  &amp;#34;mechanical_leg&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9bf.png?v8&amp;#34;,&#xA;  &amp;#34;medal_military&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f396.png?v8&amp;#34;,&#xA;  &amp;#34;medal_sports&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c5.png?v8&amp;#34;,&#xA;  &amp;#34;medical_symbol&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2695.png?v8&amp;#34;,&#xA;  &amp;#34;mega&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4e3.png?v8&amp;#34;,&#xA;  &amp;#34;melon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f348.png?v8&amp;#34;,&#xA;  &amp;#34;melting_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fae0.png?v8&amp;#34;,&#xA;  &amp;#34;memo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4dd.png?v8&amp;#34;,&#xA;  &amp;#34;men_wrestling&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f93c-2642.png?v8&amp;#34;,&#xA;  &amp;#34;mending_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2764-1fa79.png?v8&amp;#34;,&#xA;  &amp;#34;menorah&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f54e.png?v8&amp;#34;,&#xA;  &amp;#34;mens&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b9.png?v8&amp;#34;,&#xA;  &amp;#34;mermaid&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9dc-2640.png?v8&amp;#34;,&#xA;  &amp;#34;merman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9dc-2642.png?v8&amp;#34;,&#xA;  &amp;#34;merperson&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9dc.png?v8&amp;#34;,&#xA;  &amp;#34;metal&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f918.png?v8&amp;#34;,&#xA;  &amp;#34;metro&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f687.png?v8&amp;#34;,&#xA;  &amp;#34;mexico&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1fd.png?v8&amp;#34;,&#xA;  &amp;#34;microbe&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9a0.png?v8&amp;#34;,&#xA;  &amp;#34;micronesia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1eb-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;microphone&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3a4.png?v8&amp;#34;,&#xA;  &amp;#34;microscope&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f52c.png?v8&amp;#34;,&#xA;  &amp;#34;middle_finger&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f595.png?v8&amp;#34;,&#xA;  &amp;#34;military_helmet&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa96.png?v8&amp;#34;,&#xA;  &amp;#34;milk_glass&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f95b.png?v8&amp;#34;,&#xA;  &amp;#34;milky_way&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f30c.png?v8&amp;#34;,&#xA;  &amp;#34;minibus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f690.png?v8&amp;#34;,&#xA;  &amp;#34;minidisc&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4bd.png?v8&amp;#34;,&#xA;  &amp;#34;mirror&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa9e.png?v8&amp;#34;,&#xA;  &amp;#34;mirror_ball&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faa9.png?v8&amp;#34;,&#xA;  &amp;#34;mobile_phone_off&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4f4.png?v8&amp;#34;,&#xA;  &amp;#34;moldova&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1e9.png?v8&amp;#34;,&#xA;  &amp;#34;monaco&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1e8.png?v8&amp;#34;,&#xA;  &amp;#34;money_mouth_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f911.png?v8&amp;#34;,&#xA;  &amp;#34;money_with_wings&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4b8.png?v8&amp;#34;,&#xA;  &amp;#34;moneybag&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4b0.png?v8&amp;#34;,&#xA;  &amp;#34;mongolia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f3.png?v8&amp;#34;,&#xA;  &amp;#34;monkey&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f412.png?v8&amp;#34;,&#xA;  &amp;#34;monkey_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f435.png?v8&amp;#34;,&#xA;  &amp;#34;monocle_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d0.png?v8&amp;#34;,&#xA;  &amp;#34;monorail&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f69d.png?v8&amp;#34;,&#xA;  &amp;#34;montenegro&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;montserrat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f8.png?v8&amp;#34;,&#xA;  &amp;#34;moon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f314.png?v8&amp;#34;,&#xA;  &amp;#34;moon_cake&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f96e.png?v8&amp;#34;,&#xA;  &amp;#34;moose&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1face.png?v8&amp;#34;,&#xA;  &amp;#34;morocco&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;mortar_board&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f393.png?v8&amp;#34;,&#xA;  &amp;#34;mosque&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f54c.png?v8&amp;#34;,&#xA;  &amp;#34;mosquito&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f99f.png?v8&amp;#34;,&#xA;  &amp;#34;motor_boat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6e5.png?v8&amp;#34;,&#xA;  &amp;#34;motor_scooter&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6f5.png?v8&amp;#34;,&#xA;  &amp;#34;motorcycle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3cd.png?v8&amp;#34;,&#xA;  &amp;#34;motorized_wheelchair&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9bc.png?v8&amp;#34;,&#xA;  &amp;#34;motorway&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6e3.png?v8&amp;#34;,&#xA;  &amp;#34;mount_fuji&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5fb.png?v8&amp;#34;,&#xA;  &amp;#34;mountain&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f0.png?v8&amp;#34;,&#xA;  &amp;#34;mountain_bicyclist&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b5.png?v8&amp;#34;,&#xA;  &amp;#34;mountain_biking_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b5-2642.png?v8&amp;#34;,&#xA;  &amp;#34;mountain_biking_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b5-2640.png?v8&amp;#34;,&#xA;  &amp;#34;mountain_cableway&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6a0.png?v8&amp;#34;,&#xA;  &amp;#34;mountain_railway&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f69e.png?v8&amp;#34;,&#xA;  &amp;#34;mountain_snow&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3d4.png?v8&amp;#34;,&#xA;  &amp;#34;mouse&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f42d.png?v8&amp;#34;,&#xA;  &amp;#34;mouse2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f401.png?v8&amp;#34;,&#xA;  &amp;#34;mouse_trap&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faa4.png?v8&amp;#34;,&#xA;  &amp;#34;movie_camera&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3a5.png?v8&amp;#34;,&#xA;  &amp;#34;moyai&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5ff.png?v8&amp;#34;,&#xA;  &amp;#34;mozambique&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1ff.png?v8&amp;#34;,&#xA;  &amp;#34;mrs_claus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f936.png?v8&amp;#34;,&#xA;  &amp;#34;muscle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4aa.png?v8&amp;#34;,&#xA;  &amp;#34;mushroom&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f344.png?v8&amp;#34;,&#xA;  &amp;#34;musical_keyboard&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3b9.png?v8&amp;#34;,&#xA;  &amp;#34;musical_note&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3b5.png?v8&amp;#34;,&#xA;  &amp;#34;musical_score&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3bc.png?v8&amp;#34;,&#xA;  &amp;#34;mute&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f507.png?v8&amp;#34;,&#xA;  &amp;#34;mx_claus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f384.png?v8&amp;#34;,&#xA;  &amp;#34;myanmar&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;nail_care&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f485.png?v8&amp;#34;,&#xA;  &amp;#34;name_badge&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4db.png?v8&amp;#34;,&#xA;  &amp;#34;namibia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;national_park&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3de.png?v8&amp;#34;,&#xA;  &amp;#34;nauru&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;nauseated_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f922.png?v8&amp;#34;,&#xA;  &amp;#34;nazar_amulet&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ff.png?v8&amp;#34;,&#xA;  &amp;#34;neckbeard&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/neckbeard.png?v8&amp;#34;,&#xA;  &amp;#34;necktie&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f454.png?v8&amp;#34;,&#xA;  &amp;#34;negative_squared_cross_mark&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/274e.png?v8&amp;#34;,&#xA;  &amp;#34;nepal&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1f5.png?v8&amp;#34;,&#xA;  &amp;#34;nerd_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f913.png?v8&amp;#34;,&#xA;  &amp;#34;nest_with_eggs&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faba.png?v8&amp;#34;,&#xA;  &amp;#34;nesting_dolls&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa86.png?v8&amp;#34;,&#xA;  &amp;#34;netherlands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1f1.png?v8&amp;#34;,&#xA;  &amp;#34;neutral_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f610.png?v8&amp;#34;,&#xA;  &amp;#34;new&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f195.png?v8&amp;#34;,&#xA;  &amp;#34;new_caledonia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1e8.png?v8&amp;#34;,&#xA;  &amp;#34;new_moon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f311.png?v8&amp;#34;,&#xA;  &amp;#34;new_moon_with_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f31a.png?v8&amp;#34;,&#xA;  &amp;#34;new_zealand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1ff.png?v8&amp;#34;,&#xA;  &amp;#34;newspaper&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4f0.png?v8&amp;#34;,&#xA;  &amp;#34;newspaper_roll&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5de.png?v8&amp;#34;,&#xA;  &amp;#34;next_track_button&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23ed.png?v8&amp;#34;,&#xA;  &amp;#34;ng&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f196.png?v8&amp;#34;,&#xA;  &amp;#34;ng_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f645-2642.png?v8&amp;#34;,&#xA;  &amp;#34;ng_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f645-2640.png?v8&amp;#34;,&#xA;  &amp;#34;nicaragua&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1ee.png?v8&amp;#34;,&#xA;  &amp;#34;niger&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;nigeria&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;night_with_stars&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f303.png?v8&amp;#34;,&#xA;  &amp;#34;nine&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/0039-20e3.png?v8&amp;#34;,&#xA;  &amp;#34;ninja&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f977.png?v8&amp;#34;,&#xA;  &amp;#34;niue&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1fa.png?v8&amp;#34;,&#xA;  &amp;#34;no_bell&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f515.png?v8&amp;#34;,&#xA;  &amp;#34;no_bicycles&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b3.png?v8&amp;#34;,&#xA;  &amp;#34;no_entry&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26d4.png?v8&amp;#34;,&#xA;  &amp;#34;no_entry_sign&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6ab.png?v8&amp;#34;,&#xA;  &amp;#34;no_good&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f645.png?v8&amp;#34;,&#xA;  &amp;#34;no_good_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f645-2642.png?v8&amp;#34;,&#xA;  &amp;#34;no_good_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f645-2640.png?v8&amp;#34;,&#xA;  &amp;#34;no_mobile_phones&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4f5.png?v8&amp;#34;,&#xA;  &amp;#34;no_mouth&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f636.png?v8&amp;#34;,&#xA;  &amp;#34;no_pedestrians&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b7.png?v8&amp;#34;,&#xA;  &amp;#34;no_smoking&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6ad.png?v8&amp;#34;,&#xA;  &amp;#34;non-potable_water&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b1.png?v8&amp;#34;,&#xA;  &amp;#34;norfolk_island&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1eb.png?v8&amp;#34;,&#xA;  &amp;#34;north_korea&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1f5.png?v8&amp;#34;,&#xA;  &amp;#34;northern_mariana_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1f5.png?v8&amp;#34;,&#xA;  &amp;#34;norway&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f3-1f1f4.png?v8&amp;#34;,&#xA;  &amp;#34;nose&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f443.png?v8&amp;#34;,&#xA;  &amp;#34;notebook&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4d3.png?v8&amp;#34;,&#xA;  &amp;#34;notebook_with_decorative_cover&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4d4.png?v8&amp;#34;,&#xA;  &amp;#34;notes&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3b6.png?v8&amp;#34;,&#xA;  &amp;#34;nut_and_bolt&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f529.png?v8&amp;#34;,&#xA;  &amp;#34;o&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2b55.png?v8&amp;#34;,&#xA;  &amp;#34;o2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f17e.png?v8&amp;#34;,&#xA;  &amp;#34;ocean&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f30a.png?v8&amp;#34;,&#xA;  &amp;#34;octocat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/octocat.png?v8&amp;#34;,&#xA;  &amp;#34;octopus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f419.png?v8&amp;#34;,&#xA;  &amp;#34;oden&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f362.png?v8&amp;#34;,&#xA;  &amp;#34;office&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3e2.png?v8&amp;#34;,&#xA;  &amp;#34;office_worker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f4bc.png?v8&amp;#34;,&#xA;  &amp;#34;oil_drum&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6e2.png?v8&amp;#34;,&#xA;  &amp;#34;ok&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f197.png?v8&amp;#34;,&#xA;  &amp;#34;ok_hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f44c.png?v8&amp;#34;,&#xA;  &amp;#34;ok_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f646-2642.png?v8&amp;#34;,&#xA;  &amp;#34;ok_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f646.png?v8&amp;#34;,&#xA;  &amp;#34;ok_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f646-2640.png?v8&amp;#34;,&#xA;  &amp;#34;old_key&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5dd.png?v8&amp;#34;,&#xA;  &amp;#34;older_adult&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d3.png?v8&amp;#34;,&#xA;  &amp;#34;older_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f474.png?v8&amp;#34;,&#xA;  &amp;#34;older_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f475.png?v8&amp;#34;,&#xA;  &amp;#34;olive&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fad2.png?v8&amp;#34;,&#xA;  &amp;#34;om&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f549.png?v8&amp;#34;,&#xA;  &amp;#34;oman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f4-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;on&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f51b.png?v8&amp;#34;,&#xA;  &amp;#34;oncoming_automobile&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f698.png?v8&amp;#34;,&#xA;  &amp;#34;oncoming_bus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f68d.png?v8&amp;#34;,&#xA;  &amp;#34;oncoming_police_car&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f694.png?v8&amp;#34;,&#xA;  &amp;#34;oncoming_taxi&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f696.png?v8&amp;#34;,&#xA;  &amp;#34;one&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/0031-20e3.png?v8&amp;#34;,&#xA;  &amp;#34;one_piece_swimsuit&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa71.png?v8&amp;#34;,&#xA;  &amp;#34;onion&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9c5.png?v8&amp;#34;,&#xA;  &amp;#34;open_book&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4d6.png?v8&amp;#34;,&#xA;  &amp;#34;open_file_folder&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4c2.png?v8&amp;#34;,&#xA;  &amp;#34;open_hands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f450.png?v8&amp;#34;,&#xA;  &amp;#34;open_mouth&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f62e.png?v8&amp;#34;,&#xA;  &amp;#34;open_umbrella&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2602.png?v8&amp;#34;,&#xA;  &amp;#34;ophiuchus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26ce.png?v8&amp;#34;,&#xA;  &amp;#34;orange&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f34a.png?v8&amp;#34;,&#xA;  &amp;#34;orange_book&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4d9.png?v8&amp;#34;,&#xA;  &amp;#34;orange_circle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f7e0.png?v8&amp;#34;,&#xA;  &amp;#34;orange_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9e1.png?v8&amp;#34;,&#xA;  &amp;#34;orange_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f7e7.png?v8&amp;#34;,&#xA;  &amp;#34;orangutan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9a7.png?v8&amp;#34;,&#xA;  &amp;#34;orthodox_cross&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2626.png?v8&amp;#34;,&#xA;  &amp;#34;otter&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9a6.png?v8&amp;#34;,&#xA;  &amp;#34;outbox_tray&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4e4.png?v8&amp;#34;,&#xA;  &amp;#34;owl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f989.png?v8&amp;#34;,&#xA;  &amp;#34;ox&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f402.png?v8&amp;#34;,&#xA;  &amp;#34;oyster&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9aa.png?v8&amp;#34;,&#xA;  &amp;#34;package&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4e6.png?v8&amp;#34;,&#xA;  &amp;#34;page_facing_up&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4c4.png?v8&amp;#34;,&#xA;  &amp;#34;page_with_curl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4c3.png?v8&amp;#34;,&#xA;  &amp;#34;pager&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4df.png?v8&amp;#34;,&#xA;  &amp;#34;paintbrush&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f58c.png?v8&amp;#34;,&#xA;  &amp;#34;pakistan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f0.png?v8&amp;#34;,&#xA;  &amp;#34;palau&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1fc.png?v8&amp;#34;,&#xA;  &amp;#34;palestinian_territories&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f8.png?v8&amp;#34;,&#xA;  &amp;#34;palm_down_hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faf3.png?v8&amp;#34;,&#xA;  &amp;#34;palm_tree&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f334.png?v8&amp;#34;,&#xA;  &amp;#34;palm_up_hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faf4.png?v8&amp;#34;,&#xA;  &amp;#34;palms_up_together&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f932.png?v8&amp;#34;,&#xA;  &amp;#34;panama&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;pancakes&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f95e.png?v8&amp;#34;,&#xA;  &amp;#34;panda_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f43c.png?v8&amp;#34;,&#xA;  &amp;#34;paperclip&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4ce.png?v8&amp;#34;,&#xA;  &amp;#34;paperclips&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f587.png?v8&amp;#34;,&#xA;  &amp;#34;papua_new_guinea&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;parachute&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa82.png?v8&amp;#34;,&#xA;  &amp;#34;paraguay&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1fe.png?v8&amp;#34;,&#xA;  &amp;#34;parasol_on_ground&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f1.png?v8&amp;#34;,&#xA;  &amp;#34;parking&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f17f.png?v8&amp;#34;,&#xA;  &amp;#34;parrot&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f99c.png?v8&amp;#34;,&#xA;  &amp;#34;part_alternation_mark&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/303d.png?v8&amp;#34;,&#xA;  &amp;#34;partly_sunny&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26c5.png?v8&amp;#34;,&#xA;  &amp;#34;partying_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f973.png?v8&amp;#34;,&#xA;  &amp;#34;passenger_ship&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6f3.png?v8&amp;#34;,&#xA;  &amp;#34;passport_control&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6c2.png?v8&amp;#34;,&#xA;  &amp;#34;pause_button&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23f8.png?v8&amp;#34;,&#xA;  &amp;#34;paw_prints&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f43e.png?v8&amp;#34;,&#xA;  &amp;#34;pea_pod&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fadb.png?v8&amp;#34;,&#xA;  &amp;#34;peace_symbol&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/262e.png?v8&amp;#34;,&#xA;  &amp;#34;peach&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f351.png?v8&amp;#34;,&#xA;  &amp;#34;peacock&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f99a.png?v8&amp;#34;,&#xA;  &amp;#34;peanuts&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f95c.png?v8&amp;#34;,&#xA;  &amp;#34;pear&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f350.png?v8&amp;#34;,&#xA;  &amp;#34;pen&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f58a.png?v8&amp;#34;,&#xA;  &amp;#34;pencil&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4dd.png?v8&amp;#34;,&#xA;  &amp;#34;pencil2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/270f.png?v8&amp;#34;,&#xA;  &amp;#34;penguin&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f427.png?v8&amp;#34;,&#xA;  &amp;#34;pensive&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f614.png?v8&amp;#34;,&#xA;  &amp;#34;people_holding_hands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f91d-1f9d1.png?v8&amp;#34;,&#xA;  &amp;#34;people_hugging&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fac2.png?v8&amp;#34;,&#xA;  &amp;#34;performing_arts&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ad.png?v8&amp;#34;,&#xA;  &amp;#34;persevere&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f623.png?v8&amp;#34;,&#xA;  &amp;#34;person_bald&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9b2.png?v8&amp;#34;,&#xA;  &amp;#34;person_curly_hair&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9b1.png?v8&amp;#34;,&#xA;  &amp;#34;person_feeding_baby&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f37c.png?v8&amp;#34;,&#xA;  &amp;#34;person_fencing&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f93a.png?v8&amp;#34;,&#xA;  &amp;#34;person_in_manual_wheelchair&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9bd.png?v8&amp;#34;,&#xA;  &amp;#34;person_in_motorized_wheelchair&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9bc.png?v8&amp;#34;,&#xA;  &amp;#34;person_in_tuxedo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f935.png?v8&amp;#34;,&#xA;  &amp;#34;person_red_hair&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9b0.png?v8&amp;#34;,&#xA;  &amp;#34;person_white_hair&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9b3.png?v8&amp;#34;,&#xA;  &amp;#34;person_with_crown&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fac5.png?v8&amp;#34;,&#xA;  &amp;#34;person_with_probing_cane&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f9af.png?v8&amp;#34;,&#xA;  &amp;#34;person_with_turban&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f473.png?v8&amp;#34;,&#xA;  &amp;#34;person_with_veil&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f470.png?v8&amp;#34;,&#xA;  &amp;#34;peru&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;petri_dish&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9eb.png?v8&amp;#34;,&#xA;  &amp;#34;philippines&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1ed.png?v8&amp;#34;,&#xA;  &amp;#34;phone&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/260e.png?v8&amp;#34;,&#xA;  &amp;#34;pick&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26cf.png?v8&amp;#34;,&#xA;  &amp;#34;pickup_truck&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6fb.png?v8&amp;#34;,&#xA;  &amp;#34;pie&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f967.png?v8&amp;#34;,&#xA;  &amp;#34;pig&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f437.png?v8&amp;#34;,&#xA;  &amp;#34;pig2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f416.png?v8&amp;#34;,&#xA;  &amp;#34;pig_nose&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f43d.png?v8&amp;#34;,&#xA;  &amp;#34;pill&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f48a.png?v8&amp;#34;,&#xA;  &amp;#34;pilot&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-2708.png?v8&amp;#34;,&#xA;  &amp;#34;pinata&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa85.png?v8&amp;#34;,&#xA;  &amp;#34;pinched_fingers&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f90c.png?v8&amp;#34;,&#xA;  &amp;#34;pinching_hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f90f.png?v8&amp;#34;,&#xA;  &amp;#34;pineapple&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f34d.png?v8&amp;#34;,&#xA;  &amp;#34;ping_pong&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3d3.png?v8&amp;#34;,&#xA;  &amp;#34;pink_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa77.png?v8&amp;#34;,&#xA;  &amp;#34;pirate_flag&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3f4-2620.png?v8&amp;#34;,&#xA;  &amp;#34;pisces&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2653.png?v8&amp;#34;,&#xA;  &amp;#34;pitcairn_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f3.png?v8&amp;#34;,&#xA;  &amp;#34;pizza&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f355.png?v8&amp;#34;,&#xA;  &amp;#34;placard&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faa7.png?v8&amp;#34;,&#xA;  &amp;#34;place_of_worship&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6d0.png?v8&amp;#34;,&#xA;  &amp;#34;plate_with_cutlery&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f37d.png?v8&amp;#34;,&#xA;  &amp;#34;play_or_pause_button&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23ef.png?v8&amp;#34;,&#xA;  &amp;#34;playground_slide&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6dd.png?v8&amp;#34;,&#xA;  &amp;#34;pleading_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f97a.png?v8&amp;#34;,&#xA;  &amp;#34;plunger&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faa0.png?v8&amp;#34;,&#xA;  &amp;#34;point_down&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f447.png?v8&amp;#34;,&#xA;  &amp;#34;point_left&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f448.png?v8&amp;#34;,&#xA;  &amp;#34;point_right&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f449.png?v8&amp;#34;,&#xA;  &amp;#34;point_up&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/261d.png?v8&amp;#34;,&#xA;  &amp;#34;point_up_2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f446.png?v8&amp;#34;,&#xA;  &amp;#34;poland&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f1.png?v8&amp;#34;,&#xA;  &amp;#34;polar_bear&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f43b-2744.png?v8&amp;#34;,&#xA;  &amp;#34;police_car&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f693.png?v8&amp;#34;,&#xA;  &amp;#34;police_officer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f46e.png?v8&amp;#34;,&#xA;  &amp;#34;policeman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f46e-2642.png?v8&amp;#34;,&#xA;  &amp;#34;policewoman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f46e-2640.png?v8&amp;#34;,&#xA;  &amp;#34;poodle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f429.png?v8&amp;#34;,&#xA;  &amp;#34;poop&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4a9.png?v8&amp;#34;,&#xA;  &amp;#34;popcorn&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f37f.png?v8&amp;#34;,&#xA;  &amp;#34;portugal&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f9.png?v8&amp;#34;,&#xA;  &amp;#34;post_office&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3e3.png?v8&amp;#34;,&#xA;  &amp;#34;postal_horn&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4ef.png?v8&amp;#34;,&#xA;  &amp;#34;postbox&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4ee.png?v8&amp;#34;,&#xA;  &amp;#34;potable_water&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b0.png?v8&amp;#34;,&#xA;  &amp;#34;potato&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f954.png?v8&amp;#34;,&#xA;  &amp;#34;potted_plant&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fab4.png?v8&amp;#34;,&#xA;  &amp;#34;pouch&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f45d.png?v8&amp;#34;,&#xA;  &amp;#34;poultry_leg&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f357.png?v8&amp;#34;,&#xA;  &amp;#34;pound&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4b7.png?v8&amp;#34;,&#xA;  &amp;#34;pouring_liquid&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fad7.png?v8&amp;#34;,&#xA;  &amp;#34;pout&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f621.png?v8&amp;#34;,&#xA;  &amp;#34;pouting_cat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f63e.png?v8&amp;#34;,&#xA;  &amp;#34;pouting_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f64e.png?v8&amp;#34;,&#xA;  &amp;#34;pouting_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f64e-2642.png?v8&amp;#34;,&#xA;  &amp;#34;pouting_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f64e-2640.png?v8&amp;#34;,&#xA;  &amp;#34;pray&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f64f.png?v8&amp;#34;,&#xA;  &amp;#34;prayer_beads&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4ff.png?v8&amp;#34;,&#xA;  &amp;#34;pregnant_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fac3.png?v8&amp;#34;,&#xA;  &amp;#34;pregnant_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fac4.png?v8&amp;#34;,&#xA;  &amp;#34;pregnant_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f930.png?v8&amp;#34;,&#xA;  &amp;#34;pretzel&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f968.png?v8&amp;#34;,&#xA;  &amp;#34;previous_track_button&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23ee.png?v8&amp;#34;,&#xA;  &amp;#34;prince&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f934.png?v8&amp;#34;,&#xA;  &amp;#34;princess&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f478.png?v8&amp;#34;,&#xA;  &amp;#34;printer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5a8.png?v8&amp;#34;,&#xA;  &amp;#34;probing_cane&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9af.png?v8&amp;#34;,&#xA;  &amp;#34;puerto_rico&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;punch&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f44a.png?v8&amp;#34;,&#xA;  &amp;#34;purple_circle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f7e3.png?v8&amp;#34;,&#xA;  &amp;#34;purple_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f49c.png?v8&amp;#34;,&#xA;  &amp;#34;purple_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f7ea.png?v8&amp;#34;,&#xA;  &amp;#34;purse&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f45b.png?v8&amp;#34;,&#xA;  &amp;#34;pushpin&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4cc.png?v8&amp;#34;,&#xA;  &amp;#34;put_litter_in_its_place&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6ae.png?v8&amp;#34;,&#xA;  &amp;#34;qatar&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f6-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;question&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2753.png?v8&amp;#34;,&#xA;  &amp;#34;rabbit&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f430.png?v8&amp;#34;,&#xA;  &amp;#34;rabbit2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f407.png?v8&amp;#34;,&#xA;  &amp;#34;raccoon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f99d.png?v8&amp;#34;,&#xA;  &amp;#34;racehorse&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f40e.png?v8&amp;#34;,&#xA;  &amp;#34;racing_car&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ce.png?v8&amp;#34;,&#xA;  &amp;#34;radio&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4fb.png?v8&amp;#34;,&#xA;  &amp;#34;radio_button&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f518.png?v8&amp;#34;,&#xA;  &amp;#34;radioactive&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2622.png?v8&amp;#34;,&#xA;  &amp;#34;rage&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f621.png?v8&amp;#34;,&#xA;  &amp;#34;rage1&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/rage1.png?v8&amp;#34;,&#xA;  &amp;#34;rage2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/rage2.png?v8&amp;#34;,&#xA;  &amp;#34;rage3&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/rage3.png?v8&amp;#34;,&#xA;  &amp;#34;rage4&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/rage4.png?v8&amp;#34;,&#xA;  &amp;#34;railway_car&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f683.png?v8&amp;#34;,&#xA;  &amp;#34;railway_track&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6e4.png?v8&amp;#34;,&#xA;  &amp;#34;rainbow&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f308.png?v8&amp;#34;,&#xA;  &amp;#34;rainbow_flag&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3f3-1f308.png?v8&amp;#34;,&#xA;  &amp;#34;raised_back_of_hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f91a.png?v8&amp;#34;,&#xA;  &amp;#34;raised_eyebrow&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f928.png?v8&amp;#34;,&#xA;  &amp;#34;raised_hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/270b.png?v8&amp;#34;,&#xA;  &amp;#34;raised_hand_with_fingers_splayed&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f590.png?v8&amp;#34;,&#xA;  &amp;#34;raised_hands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f64c.png?v8&amp;#34;,&#xA;  &amp;#34;raising_hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f64b.png?v8&amp;#34;,&#xA;  &amp;#34;raising_hand_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f64b-2642.png?v8&amp;#34;,&#xA;  &amp;#34;raising_hand_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f64b-2640.png?v8&amp;#34;,&#xA;  &amp;#34;ram&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f40f.png?v8&amp;#34;,&#xA;  &amp;#34;ramen&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f35c.png?v8&amp;#34;,&#xA;  &amp;#34;rat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f400.png?v8&amp;#34;,&#xA;  &amp;#34;razor&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa92.png?v8&amp;#34;,&#xA;  &amp;#34;receipt&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9fe.png?v8&amp;#34;,&#xA;  &amp;#34;record_button&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23fa.png?v8&amp;#34;,&#xA;  &amp;#34;recycle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/267b.png?v8&amp;#34;,&#xA;  &amp;#34;red_car&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f697.png?v8&amp;#34;,&#xA;  &amp;#34;red_circle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f534.png?v8&amp;#34;,&#xA;  &amp;#34;red_envelope&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9e7.png?v8&amp;#34;,&#xA;  &amp;#34;red_haired_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9b0.png?v8&amp;#34;,&#xA;  &amp;#34;red_haired_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9b0.png?v8&amp;#34;,&#xA;  &amp;#34;red_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f7e5.png?v8&amp;#34;,&#xA;  &amp;#34;registered&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/00ae.png?v8&amp;#34;,&#xA;  &amp;#34;relaxed&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/263a.png?v8&amp;#34;,&#xA;  &amp;#34;relieved&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f60c.png?v8&amp;#34;,&#xA;  &amp;#34;reminder_ribbon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f397.png?v8&amp;#34;,&#xA;  &amp;#34;repeat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f501.png?v8&amp;#34;,&#xA;  &amp;#34;repeat_one&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f502.png?v8&amp;#34;,&#xA;  &amp;#34;rescue_worker_helmet&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26d1.png?v8&amp;#34;,&#xA;  &amp;#34;restroom&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6bb.png?v8&amp;#34;,&#xA;  &amp;#34;reunion&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;revolving_hearts&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f49e.png?v8&amp;#34;,&#xA;  &amp;#34;rewind&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23ea.png?v8&amp;#34;,&#xA;  &amp;#34;rhinoceros&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f98f.png?v8&amp;#34;,&#xA;  &amp;#34;ribbon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f380.png?v8&amp;#34;,&#xA;  &amp;#34;rice&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f35a.png?v8&amp;#34;,&#xA;  &amp;#34;rice_ball&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f359.png?v8&amp;#34;,&#xA;  &amp;#34;rice_cracker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f358.png?v8&amp;#34;,&#xA;  &amp;#34;rice_scene&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f391.png?v8&amp;#34;,&#xA;  &amp;#34;right_anger_bubble&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5ef.png?v8&amp;#34;,&#xA;  &amp;#34;rightwards_hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faf1.png?v8&amp;#34;,&#xA;  &amp;#34;rightwards_pushing_hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faf8.png?v8&amp;#34;,&#xA;  &amp;#34;ring&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f48d.png?v8&amp;#34;,&#xA;  &amp;#34;ring_buoy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6df.png?v8&amp;#34;,&#xA;  &amp;#34;ringed_planet&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa90.png?v8&amp;#34;,&#xA;  &amp;#34;robot&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f916.png?v8&amp;#34;,&#xA;  &amp;#34;rock&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faa8.png?v8&amp;#34;,&#xA;  &amp;#34;rocket&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f680.png?v8&amp;#34;,&#xA;  &amp;#34;rofl&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f923.png?v8&amp;#34;,&#xA;  &amp;#34;roll_eyes&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f644.png?v8&amp;#34;,&#xA;  &amp;#34;roll_of_paper&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9fb.png?v8&amp;#34;,&#xA;  &amp;#34;roller_coaster&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3a2.png?v8&amp;#34;,&#xA;  &amp;#34;roller_skate&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6fc.png?v8&amp;#34;,&#xA;  &amp;#34;romania&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1f4.png?v8&amp;#34;,&#xA;  &amp;#34;rooster&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f413.png?v8&amp;#34;,&#xA;  &amp;#34;rose&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f339.png?v8&amp;#34;,&#xA;  &amp;#34;rosette&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3f5.png?v8&amp;#34;,&#xA;  &amp;#34;rotating_light&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6a8.png?v8&amp;#34;,&#xA;  &amp;#34;round_pushpin&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4cd.png?v8&amp;#34;,&#xA;  &amp;#34;rowboat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6a3.png?v8&amp;#34;,&#xA;  &amp;#34;rowing_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6a3-2642.png?v8&amp;#34;,&#xA;  &amp;#34;rowing_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6a3-2640.png?v8&amp;#34;,&#xA;  &amp;#34;ru&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1fa.png?v8&amp;#34;,&#xA;  &amp;#34;rugby_football&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c9.png?v8&amp;#34;,&#xA;  &amp;#34;runner&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c3.png?v8&amp;#34;,&#xA;  &amp;#34;running&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c3.png?v8&amp;#34;,&#xA;  &amp;#34;running_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c3-2642.png?v8&amp;#34;,&#xA;  &amp;#34;running_shirt_with_sash&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3bd.png?v8&amp;#34;,&#xA;  &amp;#34;running_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c3-2640.png?v8&amp;#34;,&#xA;  &amp;#34;rwanda&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1fc.png?v8&amp;#34;,&#xA;  &amp;#34;sa&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f202.png?v8&amp;#34;,&#xA;  &amp;#34;safety_pin&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9f7.png?v8&amp;#34;,&#xA;  &amp;#34;safety_vest&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ba.png?v8&amp;#34;,&#xA;  &amp;#34;sagittarius&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2650.png?v8&amp;#34;,&#xA;  &amp;#34;sailboat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f5.png?v8&amp;#34;,&#xA;  &amp;#34;sake&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f376.png?v8&amp;#34;,&#xA;  &amp;#34;salt&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9c2.png?v8&amp;#34;,&#xA;  &amp;#34;saluting_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fae1.png?v8&amp;#34;,&#xA;  &amp;#34;samoa&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fc-1f1f8.png?v8&amp;#34;,&#xA;  &amp;#34;san_marino&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;sandal&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f461.png?v8&amp;#34;,&#xA;  &amp;#34;sandwich&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f96a.png?v8&amp;#34;,&#xA;  &amp;#34;santa&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f385.png?v8&amp;#34;,&#xA;  &amp;#34;sao_tome_principe&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f9.png?v8&amp;#34;,&#xA;  &amp;#34;sari&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f97b.png?v8&amp;#34;,&#xA;  &amp;#34;sassy_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f481-2642.png?v8&amp;#34;,&#xA;  &amp;#34;sassy_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f481-2640.png?v8&amp;#34;,&#xA;  &amp;#34;satellite&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4e1.png?v8&amp;#34;,&#xA;  &amp;#34;satisfied&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f606.png?v8&amp;#34;,&#xA;  &amp;#34;saudi_arabia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;sauna_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d6-2642.png?v8&amp;#34;,&#xA;  &amp;#34;sauna_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d6.png?v8&amp;#34;,&#xA;  &amp;#34;sauna_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d6-2640.png?v8&amp;#34;,&#xA;  &amp;#34;sauropod&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f995.png?v8&amp;#34;,&#xA;  &amp;#34;saxophone&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3b7.png?v8&amp;#34;,&#xA;  &amp;#34;scarf&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9e3.png?v8&amp;#34;,&#xA;  &amp;#34;school&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3eb.png?v8&amp;#34;,&#xA;  &amp;#34;school_satchel&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f392.png?v8&amp;#34;,&#xA;  &amp;#34;scientist&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f52c.png?v8&amp;#34;,&#xA;  &amp;#34;scissors&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2702.png?v8&amp;#34;,&#xA;  &amp;#34;scorpion&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f982.png?v8&amp;#34;,&#xA;  &amp;#34;scorpius&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/264f.png?v8&amp;#34;,&#xA;  &amp;#34;scotland&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3f4-e0067-e0062-e0073-e0063-e0074-e007f.png?v8&amp;#34;,&#xA;  &amp;#34;scream&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f631.png?v8&amp;#34;,&#xA;  &amp;#34;scream_cat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f640.png?v8&amp;#34;,&#xA;  &amp;#34;screwdriver&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa9b.png?v8&amp;#34;,&#xA;  &amp;#34;scroll&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4dc.png?v8&amp;#34;,&#xA;  &amp;#34;seal&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ad.png?v8&amp;#34;,&#xA;  &amp;#34;seat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4ba.png?v8&amp;#34;,&#xA;  &amp;#34;secret&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/3299.png?v8&amp;#34;,&#xA;  &amp;#34;see_no_evil&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f648.png?v8&amp;#34;,&#xA;  &amp;#34;seedling&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f331.png?v8&amp;#34;,&#xA;  &amp;#34;selfie&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f933.png?v8&amp;#34;,&#xA;  &amp;#34;senegal&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f3.png?v8&amp;#34;,&#xA;  &amp;#34;serbia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f7-1f1f8.png?v8&amp;#34;,&#xA;  &amp;#34;service_dog&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f415-1f9ba.png?v8&amp;#34;,&#xA;  &amp;#34;seven&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/0037-20e3.png?v8&amp;#34;,&#xA;  &amp;#34;sewing_needle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faa1.png?v8&amp;#34;,&#xA;  &amp;#34;seychelles&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1e8.png?v8&amp;#34;,&#xA;  &amp;#34;shaking_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fae8.png?v8&amp;#34;,&#xA;  &amp;#34;shallow_pan_of_food&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f958.png?v8&amp;#34;,&#xA;  &amp;#34;shamrock&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2618.png?v8&amp;#34;,&#xA;  &amp;#34;shark&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f988.png?v8&amp;#34;,&#xA;  &amp;#34;shaved_ice&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f367.png?v8&amp;#34;,&#xA;  &amp;#34;sheep&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f411.png?v8&amp;#34;,&#xA;  &amp;#34;shell&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f41a.png?v8&amp;#34;,&#xA;  &amp;#34;shield&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6e1.png?v8&amp;#34;,&#xA;  &amp;#34;shinto_shrine&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26e9.png?v8&amp;#34;,&#xA;  &amp;#34;ship&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6a2.png?v8&amp;#34;,&#xA;  &amp;#34;shipit&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/shipit.png?v8&amp;#34;,&#xA;  &amp;#34;shirt&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f455.png?v8&amp;#34;,&#xA;  &amp;#34;shit&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4a9.png?v8&amp;#34;,&#xA;  &amp;#34;shoe&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f45e.png?v8&amp;#34;,&#xA;  &amp;#34;shopping&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6cd.png?v8&amp;#34;,&#xA;  &amp;#34;shopping_cart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6d2.png?v8&amp;#34;,&#xA;  &amp;#34;shorts&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa73.png?v8&amp;#34;,&#xA;  &amp;#34;shower&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6bf.png?v8&amp;#34;,&#xA;  &amp;#34;shrimp&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f990.png?v8&amp;#34;,&#xA;  &amp;#34;shrug&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f937.png?v8&amp;#34;,&#xA;  &amp;#34;shushing_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f92b.png?v8&amp;#34;,&#xA;  &amp;#34;sierra_leone&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f1.png?v8&amp;#34;,&#xA;  &amp;#34;signal_strength&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4f6.png?v8&amp;#34;,&#xA;  &amp;#34;singapore&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;singer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f3a4.png?v8&amp;#34;,&#xA;  &amp;#34;sint_maarten&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1fd.png?v8&amp;#34;,&#xA;  &amp;#34;six&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/0036-20e3.png?v8&amp;#34;,&#xA;  &amp;#34;six_pointed_star&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f52f.png?v8&amp;#34;,&#xA;  &amp;#34;skateboard&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6f9.png?v8&amp;#34;,&#xA;  &amp;#34;ski&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3bf.png?v8&amp;#34;,&#xA;  &amp;#34;skier&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26f7.png?v8&amp;#34;,&#xA;  &amp;#34;skull&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f480.png?v8&amp;#34;,&#xA;  &amp;#34;skull_and_crossbones&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2620.png?v8&amp;#34;,&#xA;  &amp;#34;skunk&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9a8.png?v8&amp;#34;,&#xA;  &amp;#34;sled&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6f7.png?v8&amp;#34;,&#xA;  &amp;#34;sleeping&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f634.png?v8&amp;#34;,&#xA;  &amp;#34;sleeping_bed&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6cc.png?v8&amp;#34;,&#xA;  &amp;#34;sleepy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f62a.png?v8&amp;#34;,&#xA;  &amp;#34;slightly_frowning_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f641.png?v8&amp;#34;,&#xA;  &amp;#34;slightly_smiling_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f642.png?v8&amp;#34;,&#xA;  &amp;#34;slot_machine&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3b0.png?v8&amp;#34;,&#xA;  &amp;#34;sloth&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9a5.png?v8&amp;#34;,&#xA;  &amp;#34;slovakia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f0.png?v8&amp;#34;,&#xA;  &amp;#34;slovenia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ee.png?v8&amp;#34;,&#xA;  &amp;#34;small_airplane&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6e9.png?v8&amp;#34;,&#xA;  &amp;#34;small_blue_diamond&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f539.png?v8&amp;#34;,&#xA;  &amp;#34;small_orange_diamond&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f538.png?v8&amp;#34;,&#xA;  &amp;#34;small_red_triangle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f53a.png?v8&amp;#34;,&#xA;  &amp;#34;small_red_triangle_down&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f53b.png?v8&amp;#34;,&#xA;  &amp;#34;smile&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f604.png?v8&amp;#34;,&#xA;  &amp;#34;smile_cat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f638.png?v8&amp;#34;,&#xA;  &amp;#34;smiley&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f603.png?v8&amp;#34;,&#xA;  &amp;#34;smiley_cat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f63a.png?v8&amp;#34;,&#xA;  &amp;#34;smiling_face_with_tear&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f972.png?v8&amp;#34;,&#xA;  &amp;#34;smiling_face_with_three_hearts&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f970.png?v8&amp;#34;,&#xA;  &amp;#34;smiling_imp&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f608.png?v8&amp;#34;,&#xA;  &amp;#34;smirk&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f60f.png?v8&amp;#34;,&#xA;  &amp;#34;smirk_cat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f63c.png?v8&amp;#34;,&#xA;  &amp;#34;smoking&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6ac.png?v8&amp;#34;,&#xA;  &amp;#34;snail&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f40c.png?v8&amp;#34;,&#xA;  &amp;#34;snake&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f40d.png?v8&amp;#34;,&#xA;  &amp;#34;sneezing_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f927.png?v8&amp;#34;,&#xA;  &amp;#34;snowboarder&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c2.png?v8&amp;#34;,&#xA;  &amp;#34;snowflake&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2744.png?v8&amp;#34;,&#xA;  &amp;#34;snowman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26c4.png?v8&amp;#34;,&#xA;  &amp;#34;snowman_with_snow&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2603.png?v8&amp;#34;,&#xA;  &amp;#34;soap&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9fc.png?v8&amp;#34;,&#xA;  &amp;#34;sob&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f62d.png?v8&amp;#34;,&#xA;  &amp;#34;soccer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26bd.png?v8&amp;#34;,&#xA;  &amp;#34;socks&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9e6.png?v8&amp;#34;,&#xA;  &amp;#34;softball&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f94e.png?v8&amp;#34;,&#xA;  &amp;#34;solomon_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1e7.png?v8&amp;#34;,&#xA;  &amp;#34;somalia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f4.png?v8&amp;#34;,&#xA;  &amp;#34;soon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f51c.png?v8&amp;#34;,&#xA;  &amp;#34;sos&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f198.png?v8&amp;#34;,&#xA;  &amp;#34;sound&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f509.png?v8&amp;#34;,&#xA;  &amp;#34;south_africa&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ff-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;south_georgia_south_sandwich_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1f8.png?v8&amp;#34;,&#xA;  &amp;#34;south_sudan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f8.png?v8&amp;#34;,&#xA;  &amp;#34;space_invader&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f47e.png?v8&amp;#34;,&#xA;  &amp;#34;spades&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2660.png?v8&amp;#34;,&#xA;  &amp;#34;spaghetti&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f35d.png?v8&amp;#34;,&#xA;  &amp;#34;sparkle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2747.png?v8&amp;#34;,&#xA;  &amp;#34;sparkler&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f387.png?v8&amp;#34;,&#xA;  &amp;#34;sparkles&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2728.png?v8&amp;#34;,&#xA;  &amp;#34;sparkling_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f496.png?v8&amp;#34;,&#xA;  &amp;#34;speak_no_evil&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f64a.png?v8&amp;#34;,&#xA;  &amp;#34;speaker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f508.png?v8&amp;#34;,&#xA;  &amp;#34;speaking_head&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5e3.png?v8&amp;#34;,&#xA;  &amp;#34;speech_balloon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4ac.png?v8&amp;#34;,&#xA;  &amp;#34;speedboat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6a4.png?v8&amp;#34;,&#xA;  &amp;#34;spider&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f577.png?v8&amp;#34;,&#xA;  &amp;#34;spider_web&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f578.png?v8&amp;#34;,&#xA;  &amp;#34;spiral_calendar&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5d3.png?v8&amp;#34;,&#xA;  &amp;#34;spiral_notepad&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5d2.png?v8&amp;#34;,&#xA;  &amp;#34;sponge&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9fd.png?v8&amp;#34;,&#xA;  &amp;#34;spoon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f944.png?v8&amp;#34;,&#xA;  &amp;#34;squid&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f991.png?v8&amp;#34;,&#xA;  &amp;#34;sri_lanka&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1f0.png?v8&amp;#34;,&#xA;  &amp;#34;st_barthelemy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e7-1f1f1.png?v8&amp;#34;,&#xA;  &amp;#34;st_helena&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ed.png?v8&amp;#34;,&#xA;  &amp;#34;st_kitts_nevis&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f0-1f1f3.png?v8&amp;#34;,&#xA;  &amp;#34;st_lucia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f1-1f1e8.png?v8&amp;#34;,&#xA;  &amp;#34;st_martin&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f2-1f1eb.png?v8&amp;#34;,&#xA;  &amp;#34;st_pierre_miquelon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f5-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;st_vincent_grenadines&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1e8.png?v8&amp;#34;,&#xA;  &amp;#34;stadium&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3df.png?v8&amp;#34;,&#xA;  &amp;#34;standing_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9cd-2642.png?v8&amp;#34;,&#xA;  &amp;#34;standing_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9cd.png?v8&amp;#34;,&#xA;  &amp;#34;standing_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9cd-2640.png?v8&amp;#34;,&#xA;  &amp;#34;star&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2b50.png?v8&amp;#34;,&#xA;  &amp;#34;star2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f31f.png?v8&amp;#34;,&#xA;  &amp;#34;star_and_crescent&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/262a.png?v8&amp;#34;,&#xA;  &amp;#34;star_of_david&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2721.png?v8&amp;#34;,&#xA;  &amp;#34;star_struck&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f929.png?v8&amp;#34;,&#xA;  &amp;#34;stars&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f320.png?v8&amp;#34;,&#xA;  &amp;#34;station&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f689.png?v8&amp;#34;,&#xA;  &amp;#34;statue_of_liberty&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5fd.png?v8&amp;#34;,&#xA;  &amp;#34;steam_locomotive&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f682.png?v8&amp;#34;,&#xA;  &amp;#34;stethoscope&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa7a.png?v8&amp;#34;,&#xA;  &amp;#34;stew&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f372.png?v8&amp;#34;,&#xA;  &amp;#34;stop_button&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23f9.png?v8&amp;#34;,&#xA;  &amp;#34;stop_sign&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6d1.png?v8&amp;#34;,&#xA;  &amp;#34;stopwatch&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23f1.png?v8&amp;#34;,&#xA;  &amp;#34;straight_ruler&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4cf.png?v8&amp;#34;,&#xA;  &amp;#34;strawberry&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f353.png?v8&amp;#34;,&#xA;  &amp;#34;stuck_out_tongue&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f61b.png?v8&amp;#34;,&#xA;  &amp;#34;stuck_out_tongue_closed_eyes&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f61d.png?v8&amp;#34;,&#xA;  &amp;#34;stuck_out_tongue_winking_eye&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f61c.png?v8&amp;#34;,&#xA;  &amp;#34;student&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f393.png?v8&amp;#34;,&#xA;  &amp;#34;studio_microphone&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f399.png?v8&amp;#34;,&#xA;  &amp;#34;stuffed_flatbread&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f959.png?v8&amp;#34;,&#xA;  &amp;#34;sudan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1e9.png?v8&amp;#34;,&#xA;  &amp;#34;sun_behind_large_cloud&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f325.png?v8&amp;#34;,&#xA;  &amp;#34;sun_behind_rain_cloud&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f326.png?v8&amp;#34;,&#xA;  &amp;#34;sun_behind_small_cloud&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f324.png?v8&amp;#34;,&#xA;  &amp;#34;sun_with_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f31e.png?v8&amp;#34;,&#xA;  &amp;#34;sunflower&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f33b.png?v8&amp;#34;,&#xA;  &amp;#34;sunglasses&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f60e.png?v8&amp;#34;,&#xA;  &amp;#34;sunny&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2600.png?v8&amp;#34;,&#xA;  &amp;#34;sunrise&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f305.png?v8&amp;#34;,&#xA;  &amp;#34;sunrise_over_mountains&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f304.png?v8&amp;#34;,&#xA;  &amp;#34;superhero&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9b8.png?v8&amp;#34;,&#xA;  &amp;#34;superhero_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9b8-2642.png?v8&amp;#34;,&#xA;  &amp;#34;superhero_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9b8-2640.png?v8&amp;#34;,&#xA;  &amp;#34;supervillain&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9b9.png?v8&amp;#34;,&#xA;  &amp;#34;supervillain_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9b9-2642.png?v8&amp;#34;,&#xA;  &amp;#34;supervillain_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9b9-2640.png?v8&amp;#34;,&#xA;  &amp;#34;surfer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c4.png?v8&amp;#34;,&#xA;  &amp;#34;surfing_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c4-2642.png?v8&amp;#34;,&#xA;  &amp;#34;surfing_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c4-2640.png?v8&amp;#34;,&#xA;  &amp;#34;suriname&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;sushi&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f363.png?v8&amp;#34;,&#xA;  &amp;#34;suspect&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/suspect.png?v8&amp;#34;,&#xA;  &amp;#34;suspension_railway&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f69f.png?v8&amp;#34;,&#xA;  &amp;#34;svalbard_jan_mayen&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ef.png?v8&amp;#34;,&#xA;  &amp;#34;swan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9a2.png?v8&amp;#34;,&#xA;  &amp;#34;swaziland&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ff.png?v8&amp;#34;,&#xA;  &amp;#34;sweat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f613.png?v8&amp;#34;,&#xA;  &amp;#34;sweat_drops&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4a6.png?v8&amp;#34;,&#xA;  &amp;#34;sweat_smile&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f605.png?v8&amp;#34;,&#xA;  &amp;#34;sweden&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;sweet_potato&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f360.png?v8&amp;#34;,&#xA;  &amp;#34;swim_brief&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa72.png?v8&amp;#34;,&#xA;  &amp;#34;swimmer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ca.png?v8&amp;#34;,&#xA;  &amp;#34;swimming_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ca-2642.png?v8&amp;#34;,&#xA;  &amp;#34;swimming_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ca-2640.png?v8&amp;#34;,&#xA;  &amp;#34;switzerland&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e8-1f1ed.png?v8&amp;#34;,&#xA;  &amp;#34;symbols&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f523.png?v8&amp;#34;,&#xA;  &amp;#34;synagogue&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f54d.png?v8&amp;#34;,&#xA;  &amp;#34;syria&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f8-1f1fe.png?v8&amp;#34;,&#xA;  &amp;#34;syringe&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f489.png?v8&amp;#34;,&#xA;  &amp;#34;t-rex&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f996.png?v8&amp;#34;,&#xA;  &amp;#34;taco&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f32e.png?v8&amp;#34;,&#xA;  &amp;#34;tada&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f389.png?v8&amp;#34;,&#xA;  &amp;#34;taiwan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1fc.png?v8&amp;#34;,&#xA;  &amp;#34;tajikistan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1ef.png?v8&amp;#34;,&#xA;  &amp;#34;takeout_box&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f961.png?v8&amp;#34;,&#xA;  &amp;#34;tamale&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fad4.png?v8&amp;#34;,&#xA;  &amp;#34;tanabata_tree&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f38b.png?v8&amp;#34;,&#xA;  &amp;#34;tangerine&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f34a.png?v8&amp;#34;,&#xA;  &amp;#34;tanzania&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1ff.png?v8&amp;#34;,&#xA;  &amp;#34;taurus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2649.png?v8&amp;#34;,&#xA;  &amp;#34;taxi&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f695.png?v8&amp;#34;,&#xA;  &amp;#34;tea&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f375.png?v8&amp;#34;,&#xA;  &amp;#34;teacher&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f3eb.png?v8&amp;#34;,&#xA;  &amp;#34;teapot&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fad6.png?v8&amp;#34;,&#xA;  &amp;#34;technologist&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d1-1f4bb.png?v8&amp;#34;,&#xA;  &amp;#34;teddy_bear&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9f8.png?v8&amp;#34;,&#xA;  &amp;#34;telephone&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/260e.png?v8&amp;#34;,&#xA;  &amp;#34;telephone_receiver&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4de.png?v8&amp;#34;,&#xA;  &amp;#34;telescope&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f52d.png?v8&amp;#34;,&#xA;  &amp;#34;tennis&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3be.png?v8&amp;#34;,&#xA;  &amp;#34;tent&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26fa.png?v8&amp;#34;,&#xA;  &amp;#34;test_tube&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9ea.png?v8&amp;#34;,&#xA;  &amp;#34;thailand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1ed.png?v8&amp;#34;,&#xA;  &amp;#34;thermometer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f321.png?v8&amp;#34;,&#xA;  &amp;#34;thinking&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f914.png?v8&amp;#34;,&#xA;  &amp;#34;thong_sandal&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa74.png?v8&amp;#34;,&#xA;  &amp;#34;thought_balloon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4ad.png?v8&amp;#34;,&#xA;  &amp;#34;thread&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9f5.png?v8&amp;#34;,&#xA;  &amp;#34;three&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/0033-20e3.png?v8&amp;#34;,&#xA;  &amp;#34;thumbsdown&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f44e.png?v8&amp;#34;,&#xA;  &amp;#34;thumbsup&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f44d.png?v8&amp;#34;,&#xA;  &amp;#34;ticket&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ab.png?v8&amp;#34;,&#xA;  &amp;#34;tickets&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f39f.png?v8&amp;#34;,&#xA;  &amp;#34;tiger&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f42f.png?v8&amp;#34;,&#xA;  &amp;#34;tiger2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f405.png?v8&amp;#34;,&#xA;  &amp;#34;timer_clock&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/23f2.png?v8&amp;#34;,&#xA;  &amp;#34;timor_leste&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f1.png?v8&amp;#34;,&#xA;  &amp;#34;tipping_hand_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f481-2642.png?v8&amp;#34;,&#xA;  &amp;#34;tipping_hand_person&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f481.png?v8&amp;#34;,&#xA;  &amp;#34;tipping_hand_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f481-2640.png?v8&amp;#34;,&#xA;  &amp;#34;tired_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f62b.png?v8&amp;#34;,&#xA;  &amp;#34;tm&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2122.png?v8&amp;#34;,&#xA;  &amp;#34;togo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;toilet&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6bd.png?v8&amp;#34;,&#xA;  &amp;#34;tokelau&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f0.png?v8&amp;#34;,&#xA;  &amp;#34;tokyo_tower&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5fc.png?v8&amp;#34;,&#xA;  &amp;#34;tomato&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f345.png?v8&amp;#34;,&#xA;  &amp;#34;tonga&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f4.png?v8&amp;#34;,&#xA;  &amp;#34;tongue&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f445.png?v8&amp;#34;,&#xA;  &amp;#34;toolbox&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9f0.png?v8&amp;#34;,&#xA;  &amp;#34;tooth&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9b7.png?v8&amp;#34;,&#xA;  &amp;#34;toothbrush&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1faa5.png?v8&amp;#34;,&#xA;  &amp;#34;top&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f51d.png?v8&amp;#34;,&#xA;  &amp;#34;tophat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3a9.png?v8&amp;#34;,&#xA;  &amp;#34;tornado&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f32a.png?v8&amp;#34;,&#xA;  &amp;#34;tr&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f7.png?v8&amp;#34;,&#xA;  &amp;#34;trackball&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5b2.png?v8&amp;#34;,&#xA;  &amp;#34;tractor&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f69c.png?v8&amp;#34;,&#xA;  &amp;#34;traffic_light&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6a5.png?v8&amp;#34;,&#xA;  &amp;#34;train&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f68b.png?v8&amp;#34;,&#xA;  &amp;#34;train2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f686.png?v8&amp;#34;,&#xA;  &amp;#34;tram&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f68a.png?v8&amp;#34;,&#xA;  &amp;#34;transgender_flag&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3f3-26a7.png?v8&amp;#34;,&#xA;  &amp;#34;transgender_symbol&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26a7.png?v8&amp;#34;,&#xA;  &amp;#34;triangular_flag_on_post&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6a9.png?v8&amp;#34;,&#xA;  &amp;#34;triangular_ruler&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4d0.png?v8&amp;#34;,&#xA;  &amp;#34;trident&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f531.png?v8&amp;#34;,&#xA;  &amp;#34;trinidad_tobago&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f9.png?v8&amp;#34;,&#xA;  &amp;#34;tristan_da_cunha&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;triumph&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f624.png?v8&amp;#34;,&#xA;  &amp;#34;troll&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9cc.png?v8&amp;#34;,&#xA;  &amp;#34;trolleybus&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f68e.png?v8&amp;#34;,&#xA;  &amp;#34;trollface&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/trollface.png?v8&amp;#34;,&#xA;  &amp;#34;trophy&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3c6.png?v8&amp;#34;,&#xA;  &amp;#34;tropical_drink&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f379.png?v8&amp;#34;,&#xA;  &amp;#34;tropical_fish&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f420.png?v8&amp;#34;,&#xA;  &amp;#34;truck&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f69a.png?v8&amp;#34;,&#xA;  &amp;#34;trumpet&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ba.png?v8&amp;#34;,&#xA;  &amp;#34;tshirt&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f455.png?v8&amp;#34;,&#xA;  &amp;#34;tulip&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f337.png?v8&amp;#34;,&#xA;  &amp;#34;tumbler_glass&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f943.png?v8&amp;#34;,&#xA;  &amp;#34;tunisia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f3.png?v8&amp;#34;,&#xA;  &amp;#34;turkey&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f983.png?v8&amp;#34;,&#xA;  &amp;#34;turkmenistan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;turks_caicos_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1e8.png?v8&amp;#34;,&#xA;  &amp;#34;turtle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f422.png?v8&amp;#34;,&#xA;  &amp;#34;tuvalu&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1f9-1f1fb.png?v8&amp;#34;,&#xA;  &amp;#34;tv&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4fa.png?v8&amp;#34;,&#xA;  &amp;#34;twisted_rightwards_arrows&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f500.png?v8&amp;#34;,&#xA;  &amp;#34;two&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/0032-20e3.png?v8&amp;#34;,&#xA;  &amp;#34;two_hearts&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f495.png?v8&amp;#34;,&#xA;  &amp;#34;two_men_holding_hands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f46c.png?v8&amp;#34;,&#xA;  &amp;#34;two_women_holding_hands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f46d.png?v8&amp;#34;,&#xA;  &amp;#34;u5272&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f239.png?v8&amp;#34;,&#xA;  &amp;#34;u5408&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f234.png?v8&amp;#34;,&#xA;  &amp;#34;u55b6&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f23a.png?v8&amp;#34;,&#xA;  &amp;#34;u6307&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f22f.png?v8&amp;#34;,&#xA;  &amp;#34;u6708&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f237.png?v8&amp;#34;,&#xA;  &amp;#34;u6709&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f236.png?v8&amp;#34;,&#xA;  &amp;#34;u6e80&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f235.png?v8&amp;#34;,&#xA;  &amp;#34;u7121&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f21a.png?v8&amp;#34;,&#xA;  &amp;#34;u7533&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f238.png?v8&amp;#34;,&#xA;  &amp;#34;u7981&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f232.png?v8&amp;#34;,&#xA;  &amp;#34;u7a7a&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f233.png?v8&amp;#34;,&#xA;  &amp;#34;uganda&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1ec.png?v8&amp;#34;,&#xA;  &amp;#34;uk&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ec-1f1e7.png?v8&amp;#34;,&#xA;  &amp;#34;ukraine&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;umbrella&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2614.png?v8&amp;#34;,&#xA;  &amp;#34;unamused&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f612.png?v8&amp;#34;,&#xA;  &amp;#34;underage&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f51e.png?v8&amp;#34;,&#xA;  &amp;#34;unicorn&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f984.png?v8&amp;#34;,&#xA;  &amp;#34;united_arab_emirates&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1e6-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;united_nations&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1f3.png?v8&amp;#34;,&#xA;  &amp;#34;unlock&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f513.png?v8&amp;#34;,&#xA;  &amp;#34;up&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f199.png?v8&amp;#34;,&#xA;  &amp;#34;upside_down_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f643.png?v8&amp;#34;,&#xA;  &amp;#34;uruguay&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1fe.png?v8&amp;#34;,&#xA;  &amp;#34;us&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1f8.png?v8&amp;#34;,&#xA;  &amp;#34;us_outlying_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;us_virgin_islands&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1ee.png?v8&amp;#34;,&#xA;  &amp;#34;uzbekistan&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fa-1f1ff.png?v8&amp;#34;,&#xA;  &amp;#34;v&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/270c.png?v8&amp;#34;,&#xA;  &amp;#34;vampire&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9db.png?v8&amp;#34;,&#xA;  &amp;#34;vampire_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9db-2642.png?v8&amp;#34;,&#xA;  &amp;#34;vampire_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9db-2640.png?v8&amp;#34;,&#xA;  &amp;#34;vanuatu&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1fa.png?v8&amp;#34;,&#xA;  &amp;#34;vatican_city&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1e6.png?v8&amp;#34;,&#xA;  &amp;#34;venezuela&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;vertical_traffic_light&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6a6.png?v8&amp;#34;,&#xA;  &amp;#34;vhs&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4fc.png?v8&amp;#34;,&#xA;  &amp;#34;vibration_mode&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4f3.png?v8&amp;#34;,&#xA;  &amp;#34;video_camera&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4f9.png?v8&amp;#34;,&#xA;  &amp;#34;video_game&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3ae.png?v8&amp;#34;,&#xA;  &amp;#34;vietnam&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fb-1f1f3.png?v8&amp;#34;,&#xA;  &amp;#34;violin&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3bb.png?v8&amp;#34;,&#xA;  &amp;#34;virgo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/264d.png?v8&amp;#34;,&#xA;  &amp;#34;volcano&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f30b.png?v8&amp;#34;,&#xA;  &amp;#34;volleyball&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3d0.png?v8&amp;#34;,&#xA;  &amp;#34;vomiting_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f92e.png?v8&amp;#34;,&#xA;  &amp;#34;vs&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f19a.png?v8&amp;#34;,&#xA;  &amp;#34;vulcan_salute&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f596.png?v8&amp;#34;,&#xA;  &amp;#34;waffle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9c7.png?v8&amp;#34;,&#xA;  &amp;#34;wales&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3f4-e0067-e0062-e0077-e006c-e0073-e007f.png?v8&amp;#34;,&#xA;  &amp;#34;walking&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b6.png?v8&amp;#34;,&#xA;  &amp;#34;walking_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b6-2642.png?v8&amp;#34;,&#xA;  &amp;#34;walking_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6b6-2640.png?v8&amp;#34;,&#xA;  &amp;#34;wallis_futuna&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fc-1f1eb.png?v8&amp;#34;,&#xA;  &amp;#34;waning_crescent_moon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f318.png?v8&amp;#34;,&#xA;  &amp;#34;waning_gibbous_moon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f316.png?v8&amp;#34;,&#xA;  &amp;#34;warning&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26a0.png?v8&amp;#34;,&#xA;  &amp;#34;wastebasket&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5d1.png?v8&amp;#34;,&#xA;  &amp;#34;watch&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/231a.png?v8&amp;#34;,&#xA;  &amp;#34;water_buffalo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f403.png?v8&amp;#34;,&#xA;  &amp;#34;water_polo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f93d.png?v8&amp;#34;,&#xA;  &amp;#34;watermelon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f349.png?v8&amp;#34;,&#xA;  &amp;#34;wave&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f44b.png?v8&amp;#34;,&#xA;  &amp;#34;wavy_dash&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/3030.png?v8&amp;#34;,&#xA;  &amp;#34;waxing_crescent_moon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f312.png?v8&amp;#34;,&#xA;  &amp;#34;waxing_gibbous_moon&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f314.png?v8&amp;#34;,&#xA;  &amp;#34;wc&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6be.png?v8&amp;#34;,&#xA;  &amp;#34;weary&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f629.png?v8&amp;#34;,&#xA;  &amp;#34;wedding&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f492.png?v8&amp;#34;,&#xA;  &amp;#34;weight_lifting&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3cb.png?v8&amp;#34;,&#xA;  &amp;#34;weight_lifting_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3cb-2642.png?v8&amp;#34;,&#xA;  &amp;#34;weight_lifting_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3cb-2640.png?v8&amp;#34;,&#xA;  &amp;#34;western_sahara&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ea-1f1ed.png?v8&amp;#34;,&#xA;  &amp;#34;whale&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f433.png?v8&amp;#34;,&#xA;  &amp;#34;whale2&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f40b.png?v8&amp;#34;,&#xA;  &amp;#34;wheel&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6de.png?v8&amp;#34;,&#xA;  &amp;#34;wheel_of_dharma&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2638.png?v8&amp;#34;,&#xA;  &amp;#34;wheelchair&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/267f.png?v8&amp;#34;,&#xA;  &amp;#34;white_check_mark&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2705.png?v8&amp;#34;,&#xA;  &amp;#34;white_circle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26aa.png?v8&amp;#34;,&#xA;  &amp;#34;white_flag&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f3f3.png?v8&amp;#34;,&#xA;  &amp;#34;white_flower&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4ae.png?v8&amp;#34;,&#xA;  &amp;#34;white_haired_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f468-1f9b3.png?v8&amp;#34;,&#xA;  &amp;#34;white_haired_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9b3.png?v8&amp;#34;,&#xA;  &amp;#34;white_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f90d.png?v8&amp;#34;,&#xA;  &amp;#34;white_large_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/2b1c.png?v8&amp;#34;,&#xA;  &amp;#34;white_medium_small_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/25fd.png?v8&amp;#34;,&#xA;  &amp;#34;white_medium_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/25fb.png?v8&amp;#34;,&#xA;  &amp;#34;white_small_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/25ab.png?v8&amp;#34;,&#xA;  &amp;#34;white_square_button&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f533.png?v8&amp;#34;,&#xA;  &amp;#34;wilted_flower&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f940.png?v8&amp;#34;,&#xA;  &amp;#34;wind_chime&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f390.png?v8&amp;#34;,&#xA;  &amp;#34;wind_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f32c.png?v8&amp;#34;,&#xA;  &amp;#34;window&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa9f.png?v8&amp;#34;,&#xA;  &amp;#34;wine_glass&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f377.png?v8&amp;#34;,&#xA;  &amp;#34;wing&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fabd.png?v8&amp;#34;,&#xA;  &amp;#34;wink&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f609.png?v8&amp;#34;,&#xA;  &amp;#34;wireless&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6dc.png?v8&amp;#34;,&#xA;  &amp;#34;wolf&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f43a.png?v8&amp;#34;,&#xA;  &amp;#34;woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469.png?v8&amp;#34;,&#xA;  &amp;#34;woman_artist&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f3a8.png?v8&amp;#34;,&#xA;  &amp;#34;woman_astronaut&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f680.png?v8&amp;#34;,&#xA;  &amp;#34;woman_beard&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d4-2640.png?v8&amp;#34;,&#xA;  &amp;#34;woman_cartwheeling&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f938-2640.png?v8&amp;#34;,&#xA;  &amp;#34;woman_cook&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f373.png?v8&amp;#34;,&#xA;  &amp;#34;woman_dancing&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f483.png?v8&amp;#34;,&#xA;  &amp;#34;woman_facepalming&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f926-2640.png?v8&amp;#34;,&#xA;  &amp;#34;woman_factory_worker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f3ed.png?v8&amp;#34;,&#xA;  &amp;#34;woman_farmer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f33e.png?v8&amp;#34;,&#xA;  &amp;#34;woman_feeding_baby&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f37c.png?v8&amp;#34;,&#xA;  &amp;#34;woman_firefighter&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f692.png?v8&amp;#34;,&#xA;  &amp;#34;woman_health_worker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-2695.png?v8&amp;#34;,&#xA;  &amp;#34;woman_in_manual_wheelchair&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9bd.png?v8&amp;#34;,&#xA;  &amp;#34;woman_in_motorized_wheelchair&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9bc.png?v8&amp;#34;,&#xA;  &amp;#34;woman_in_tuxedo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f935-2640.png?v8&amp;#34;,&#xA;  &amp;#34;woman_judge&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-2696.png?v8&amp;#34;,&#xA;  &amp;#34;woman_juggling&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f939-2640.png?v8&amp;#34;,&#xA;  &amp;#34;woman_mechanic&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f527.png?v8&amp;#34;,&#xA;  &amp;#34;woman_office_worker&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f4bc.png?v8&amp;#34;,&#xA;  &amp;#34;woman_pilot&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-2708.png?v8&amp;#34;,&#xA;  &amp;#34;woman_playing_handball&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f93e-2640.png?v8&amp;#34;,&#xA;  &amp;#34;woman_playing_water_polo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f93d-2640.png?v8&amp;#34;,&#xA;  &amp;#34;woman_scientist&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f52c.png?v8&amp;#34;,&#xA;  &amp;#34;woman_shrugging&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f937-2640.png?v8&amp;#34;,&#xA;  &amp;#34;woman_singer&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f3a4.png?v8&amp;#34;,&#xA;  &amp;#34;woman_student&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f393.png?v8&amp;#34;,&#xA;  &amp;#34;woman_teacher&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f3eb.png?v8&amp;#34;,&#xA;  &amp;#34;woman_technologist&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f4bb.png?v8&amp;#34;,&#xA;  &amp;#34;woman_with_headscarf&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9d5.png?v8&amp;#34;,&#xA;  &amp;#34;woman_with_probing_cane&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f469-1f9af.png?v8&amp;#34;,&#xA;  &amp;#34;woman_with_turban&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f473-2640.png?v8&amp;#34;,&#xA;  &amp;#34;woman_with_veil&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f470-2640.png?v8&amp;#34;,&#xA;  &amp;#34;womans_clothes&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f45a.png?v8&amp;#34;,&#xA;  &amp;#34;womans_hat&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f452.png?v8&amp;#34;,&#xA;  &amp;#34;women_wrestling&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f93c-2640.png?v8&amp;#34;,&#xA;  &amp;#34;womens&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f6ba.png?v8&amp;#34;,&#xA;  &amp;#34;wood&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fab5.png?v8&amp;#34;,&#xA;  &amp;#34;woozy_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f974.png?v8&amp;#34;,&#xA;  &amp;#34;world_map&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f5fa.png?v8&amp;#34;,&#xA;  &amp;#34;worm&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fab1.png?v8&amp;#34;,&#xA;  &amp;#34;worried&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f61f.png?v8&amp;#34;,&#xA;  &amp;#34;wrench&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f527.png?v8&amp;#34;,&#xA;  &amp;#34;wrestling&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f93c.png?v8&amp;#34;,&#xA;  &amp;#34;writing_hand&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/270d.png?v8&amp;#34;,&#xA;  &amp;#34;x&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/274c.png?v8&amp;#34;,&#xA;  &amp;#34;x_ray&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa7b.png?v8&amp;#34;,&#xA;  &amp;#34;yarn&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9f6.png?v8&amp;#34;,&#xA;  &amp;#34;yawning_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f971.png?v8&amp;#34;,&#xA;  &amp;#34;yellow_circle&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f7e1.png?v8&amp;#34;,&#xA;  &amp;#34;yellow_heart&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f49b.png?v8&amp;#34;,&#xA;  &amp;#34;yellow_square&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f7e8.png?v8&amp;#34;,&#xA;  &amp;#34;yemen&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1fe-1f1ea.png?v8&amp;#34;,&#xA;  &amp;#34;yen&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4b4.png?v8&amp;#34;,&#xA;  &amp;#34;yin_yang&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/262f.png?v8&amp;#34;,&#xA;  &amp;#34;yo_yo&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1fa80.png?v8&amp;#34;,&#xA;  &amp;#34;yum&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f60b.png?v8&amp;#34;,&#xA;  &amp;#34;zambia&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ff-1f1f2.png?v8&amp;#34;,&#xA;  &amp;#34;zany_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f92a.png?v8&amp;#34;,&#xA;  &amp;#34;zap&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/26a1.png?v8&amp;#34;,&#xA;  &amp;#34;zebra&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f993.png?v8&amp;#34;,&#xA;  &amp;#34;zero&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/0030-20e3.png?v8&amp;#34;,&#xA;  &amp;#34;zimbabwe&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f1ff-1f1fc.png?v8&amp;#34;,&#xA;  &amp;#34;zipper_mouth_face&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f910.png?v8&amp;#34;,&#xA;  &amp;#34;zombie&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9df.png?v8&amp;#34;,&#xA;  &amp;#34;zombie_man&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9df-2642.png?v8&amp;#34;,&#xA;  &amp;#34;zombie_woman&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f9df-2640.png?v8&amp;#34;,&#xA;  &amp;#34;zzz&amp;#34;: &amp;#34;https://github.githubassets.com/images/icons/emoji/unicode/1f4a4.png?v8&amp;#34;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Wkhtmltox网页转换PDF</title>
      <link>/it/2024/081315-wkhtmltox/</link>
      <pubDate>Tue, 13 Aug 2024 07:52:11 +0000</pubDate>
      <guid>/it/2024/081315-wkhtmltox/</guid>
      <description>&lt;p&gt;网页要实现打印除了利用浏览器本身的功能以外，就是将html转换为pdf，然后pdf就可以打印可者另存。比浏览器自带的功能强大更多。&lt;/p&gt;&#xA;&lt;p&gt;wkhtmltopdf 是一个强大的开源工具，它能将HTML网页直接转换为高质量的PDF文档。&lt;br&gt;&#xA;wkhtmltopdf官方网站下载地址：&lt;a href=&#34;https://wkhtmltopdf.org/downloads.html&#34;&gt;https://wkhtmltopdf.org/downloads.html&lt;/a&gt; ，提供了各个常用OS的版本。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go库:Govaluate字符串转换为表达式</title>
      <link>/code/2024/081215-govaluate/</link>
      <pubDate>Mon, 12 Aug 2024 07:46:52 +0000</pubDate>
      <guid>/code/2024/081215-govaluate/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/Knetic/govaluate&#34;&gt;govaluate库&lt;/a&gt;将字符串转换为表达式，类似于JavaScript中的eval功能。这对于在sql数据表中的保存表达式等是有用的。&lt;/p&gt;&#xA;&lt;p&gt;go get github.com/Knetic/govaluate&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/122561534&#34;&gt;知乎介绍得更详细一些&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;不过我去看了，7年前更新。汗&amp;hellip;. 试了，尚且能用。&lt;br&gt;&#xA;另外一个 &lt;a href=&#34;https://github.com/casbin/govaluate&#34;&gt;https://github.com/casbin/govaluate&lt;/a&gt;  似乎最近有维护，但未测试。&lt;/p&gt;&#xA;&lt;p&gt;这个示例返回一个计算结果&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;  &amp;#34;fmt&amp;#34;&#xA;  &amp;#34;log&amp;#34;&#xA;&#xA;  &amp;#34;github.com/Knetic/govaluate&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;  expr, err := govaluate.NewEvaluableExpression(&amp;#34;10 &amp;gt; 0&amp;#34;)&#xA;  if err != nil {&#xA;    log.Fatal(&amp;#34;syntax error:&amp;#34;, err)&#xA;  }&#xA;&#xA;  result, err := expr.Evaluate(nil)&#xA;  if err != nil {&#xA;    log.Fatal(&amp;#34;evaluate error:&amp;#34;, err)&#xA;  }&#xA;&#xA;  fmt.Println(result)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;而对于经常的场景应该如下示例，传入一个变量参数&lt;/p&gt;</description>
    </item>
    <item>
      <title>TinyProxy 轻量的HTTP/HTTPS代理</title>
      <link>/it/2024/072816-tinyproxy/</link>
      <pubDate>Sun, 28 Jul 2024 08:36:28 +0000</pubDate>
      <guid>/it/2024/072816-tinyproxy/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://libs.websoft9.com/Websoft9/DocsPicture/zh/tinyproxy/tinyproxy-gui-websoft9.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://tinyproxy.github.io/&#34;&gt;Tinyproxy&lt;/a&gt; 是一个轻量级HTTP/HTTPS代理软件。速度快、体积小、占用资源少是它的特点。&lt;br&gt;&#xA;之前使用Golang建立了一个代理，但缺少管控工具，被个别未经许可使用，导致服务器流量较大。&lt;/p&gt;</description>
    </item>
    <item>
      <title>利用ollama实现的本地翻译机</title>
      <link>/code/2024/072811-translation/</link>
      <pubDate>Sun, 28 Jul 2024 03:33:14 +0000</pubDate>
      <guid>/code/2024/072811-translation/</guid>
      <description>&lt;p&gt;想法：输入任意语言，让它自动翻译成指定的母语&lt;br&gt;&#xA;问题：当英文翻译为中文时，出现断句等不正常现象&lt;/p&gt;&#xA;&lt;p&gt;以下仅为示例，可以扩充实现目标。不正常问题待解决。所以它是个不完善的代码。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chi快速入门</title>
      <link>/code/2024/072710-chi/</link>
      <pubDate>Sat, 27 Jul 2024 02:30:28 +0000</pubDate>
      <guid>/code/2024/072710-chi/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://camo.githubusercontent.com/d7637f90cc28fe5ffa2ffc4e568d0a23d555b2b969e51c3ca3f7034094c5374d/68747470733a2f2f63646e2e7261776769742e636f6d2f676f2d6368692f6368692f6d61737465722f5f6578616d706c65732f6368692e737667&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://go-chi.io/&#34;&gt;Chi&lt;/a&gt;是一个轻量的Web框架。&lt;a href=&#34;https://github.com/go-chi/chi&#34;&gt;Github&lt;/a&gt;，网文介绍可以&lt;a href=&#34;https://www.jianshu.com/p/0e269119c066&#34;&gt;看这里&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;net/http&amp;#34;&#xA;&#xA;    &amp;#34;github.com/go-chi/chi/v5&amp;#34;&#xA;    &amp;#34;github.com/go-chi/chi/v5/middleware&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;    r := chi.NewRouter()&#xA;    r.Use(middleware.Logger)&#xA;    r.Get(&amp;#34;/&amp;#34;, func(w http.ResponseWriter, r *http.Request) {&#xA;        w.Write([]byte(&amp;#34;Hello World!&amp;#34;))&#xA;    })&#xA;    http.ListenAndServe(&amp;#34;:3000&amp;#34;, r)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;看起来还是挺简单的。&lt;/p&gt;&#xA;&lt;h3 id=&#34;路由&#34;&gt;路由&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Connect(pattern string, h http.HandlerFunc)&#xA;Delete(pattern string, h http.HandlerFunc)&#xA;Get(pattern string, h http.HandlerFunc)&#xA;Head(pattern string, h http.HandlerFunc)&#xA;Options(pattern string, h http.HandlerFunc)&#xA;Patch(pattern string, h http.HandlerFunc)&#xA;Post(pattern string, h http.HandlerFunc)&#xA;Put(pattern string, h http.HandlerFunc)&#xA;Trace(pattern string, h http.HandlerFunc)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;一个都不能少。&lt;/p&gt;</description>
    </item>
    <item>
      <title>SSH Chat SSH聊天服务器</title>
      <link>/it/2024/072623-sshchat/</link>
      <pubDate>Fri, 26 Jul 2024 15:22:43 +0000</pubDate>
      <guid>/it/2024/072623-sshchat/</guid>
      <description>&lt;p&gt;通常我们都用ssh来远程进入服务器进行操作和管理。这里独避“希径”用于命令行聊天。毕竟ssh工具非常多，基本跨所有平台。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://camo.githubusercontent.com/02aea36c96ffa18a9c0affa4ed44f96e5a11359ac3dd846db5cafb62e4620751/68747470733a2f2f61736369696e656d612e6f72672f612f3437373038332e737667&#34; alt=&#34;https://asciinema.org/a/477083?speed=3&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/quackduck/devzat&#34;&gt;Github地址&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;也可以直接进入它的演示服务 ssh devzat.hackclub.com&lt;br&gt;&#xA;当然最好带上你的昵称： ssh &lt;a href=&#34;mailto:wang@devzat.hackclub.com&#34;&gt;wang@devzat.hackclub.com&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Qor5继续使用和学习</title>
      <link>/code/2024/072517-qor5/</link>
      <pubDate>Thu, 25 Jul 2024 09:08:26 +0000</pubDate>
      <guid>/code/2024/072517-qor5/</guid>
      <description>&lt;p&gt;QOR5的文档是给“专业”人员看的，个人要使用需要自己摸索。&lt;/p&gt;&#xA;&lt;h3 id=&#34;2分钟快速入门&#34;&gt;2分钟快速入门&lt;/h3&gt;&#xA;&lt;p&gt;官方的1分钟快速入门，使用的是Docker。就国内这个“行情”，Docker快要死了。我是手动运行示例。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pho无服务端备份相册</title>
      <link>/it/2024/071710-pho/</link>
      <pubDate>Wed, 17 Jul 2024 02:05:13 +0000</pubDate>
      <guid>/it/2024/071710-pho/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://i.scwy.net/it/2024/071510-nas/&#34;&gt;NAS&lt;/a&gt;的意义在于备份资料和照片，其中照片可能是最重要的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pho.tools/&#34;&gt;Pho&lt;/a&gt;是一个无服务端的相册备份应用。无服务端是因为它直接用你的 SMB/WebDAV/NFS/百度网盘 来做存储端。&lt;/p&gt;&#xA;&lt;p&gt;支持Android/IOS/Mac/Win，虽然有几项VIP功能，但基础功能也差不多了。&lt;/p&gt;&#xA;&lt;p&gt;PS：应用越简单越好，其它的让我来。另外，还需要一个手机的记事本/应用/通讯录的备份功能(怎么看起来越来越不简单)。&lt;/p&gt;</description>
    </item>
    <item>
      <title>普通人的AI大模型思考：分布式AI</title>
      <link>/it/2024/071707-ai/</link>
      <pubDate>Tue, 16 Jul 2024 23:46:16 +0000</pubDate>
      <guid>/it/2024/071707-ai/</guid>
      <description>&lt;p&gt;GPT这一类大模型，完全靠强大的GPU算力。但并不是每个人都买得起、买得到好的显卡，即使没有米国卡脖子。&lt;br&gt;&#xA;是不是可以发挥分布式的作用，聚合大量的小算力来完成大算力？&lt;br&gt;&#xA;就个人而言，需要计算（使用）的时候是少数。那么发挥“人人为我，我为人人”的BT下载思想，将计算量分发给多个个人电脑，通过量的累加，就可以达到质的变化。&lt;br&gt;&#xA;国家不是也在想办法解决光刻机吗？方案是反其道而行之：成立国家级光刻工厂。&lt;br&gt;&#xA;之前有国家级计算项目，也是通过发动网友一起来计算的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Easytier 无公网组网,去中心化,含手机端使用内网方法</title>
      <link>/it/2024/071513-easytier/</link>
      <pubDate>Mon, 15 Jul 2024 05:37:49 +0000</pubDate>
      <guid>/it/2024/071513-easytier/</guid>
      <description>&lt;p&gt;我一直在用zerotier，并且做了服务端，运行良好。今天看到Easytier，似乎更简单。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.easytier.top/&#34;&gt;EasyTier&lt;/a&gt;一个简单、安全、去中心化的内网穿透 VPN 组网方案。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;去中心化：无需依赖中心化服务，节点平等且独立。&#xA;安全：支持利用 WireGuard 加密通信，也支持 AES-GCM 加密保护中转流量。&#xA;高性能：全链路零拷贝，性能与主流组网软件相当。&#xA;跨平台：支持 MacOS/Linux/Windows，未来将支持 IOS 和 Android。可执行文件静态链接，部署简单。&#xA;无公网 IP 组网：支持利用共享的公网节点组网，可参考 配置指南&#xA;NAT 穿透：支持基于 UDP 的 NAT 穿透，即使在复杂的网络环境下也能建立稳定的连接。&#xA;子网代理（点对网）：节点可以将可访问的网段作为代理暴露给 VPN 子网，允许其他节点通过该节点访问这些子网。&#xA;智能路由：根据流量智能选择链路，减少延迟，提高吞吐量。&#xA;TCP 支持：在 UDP 受限的情况下，通过并发 TCP 链接提供可靠的数据传输，优化性能。&#xA;高可用性：支持多路径和在检测到高丢包率或网络错误时切换到健康路径。&#xA;IPV6 支持：支持利用 IPV6 组网。&#xA;多协议类型: 支持使用 WebSocket、QUIC 等协议进行节点间通信。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;这里主要是使用它的无中心化，无需公网IP的组内网特点。&lt;br&gt;&#xA;在&lt;a href=&#34;https://github.com/EasyTier/EasyTier/&#34;&gt;Github&lt;/a&gt;上有Linux和Win版本。暂时没有IOS和Android，据说可以通过WireGuard接入（未试）。&lt;br&gt;&#xA;看起来这是一个不错的备选方案。&lt;/p&gt;</description>
    </item>
    <item>
      <title>NAS 畅网X86P5研究及使用</title>
      <link>/it/2024/071510-nas/</link>
      <pubDate>Mon, 15 Jul 2024 02:50:29 +0000</pubDate>
      <guid>/it/2024/071510-nas/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../071510-nas-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;购畅网的X86P5开发板，配上一个3D打印盒子，加上多年余下的2.5寸硬盘，巴掌大小，便是一个小型NAS。&lt;br&gt;&#xA;N100，加上余下的8GB DDR5，双2.5G网，性能做NAS其实是有富余，我一般还加一些服务。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我们需要一台什么样的PC</title>
      <link>/it/2024/070711-pc/</link>
      <pubDate>Sun, 07 Jul 2024 03:02:52 +0000</pubDate>
      <guid>/it/2024/070711-pc/</guid>
      <description>&lt;p&gt;虽然看起来我们大量的手机应用和使用时长，但其实PC并没有离开我们。对于大众来说，它只是更可有可无或退居二线。这不包括我。&lt;br&gt;&#xA;我们需要什么样的PC？&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gost GO语言实现的安全隧道</title>
      <link>/it/2024/070415-gost/</link>
      <pubDate>Thu, 04 Jul 2024 07:35:29 +0000</pubDate>
      <guid>/it/2024/070415-gost/</guid>
      <description>&lt;p&gt;2025.5.11&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/SianHH/gostc-open&#34;&gt;有网友&lt;/a&gt;提供了一个客户端(GOSTC)和一些免费服务器资源，可以简单使用一下。&lt;br&gt;&#xA;&lt;a href=&#34;https://gost.sian.one/&#34;&gt;https://gost.sian.one/&lt;/a&gt;&lt;br&gt;&#xA;看起来开源了客户端和服务端，且有B站视频讲解。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://v3.gost.run/images/gost.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://v3.gost.run/&#34;&gt;GOST&lt;/a&gt; 最新版本3。功能特性:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;多端口监听&#xA;多级转发链&#xA;多协议支持&#xA;TCP/UDP端口转发&#xA;反向代理和隧道&#xA;TCP/UDP透明代理&#xA;DNS解析和代理&#xA;TUN/TAP设备&#xA;负载均衡&#xA;路由控制&#xA;限速限流&#xA;准入控制&#xA;插件系统&#xA;监控指标&#xA;动态配置&#xA;Web API&#xA;GUI/WebUI&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/go-gost/gost/releases&#34;&gt;下载&lt;/a&gt;，还有一个简单的&lt;a href=&#34;https://ui.gost.run/&#34;&gt;UI界面&lt;/a&gt;。看起来GOST功能相当丰富。&lt;br&gt;&#xA;这里主要用它的端口转发功能： gost -L http://:80/192.168.1.40:9999 -api :18080 即当访问本机80端口时，转向请求另外的IP及端口。定义了WebAPI端口。&lt;br&gt;&#xA;查看配置：&lt;/p&gt;</description>
    </item>
    <item>
      <title>tusd断点续传库</title>
      <link>/code/2024/070221-tusd/</link>
      <pubDate>Tue, 02 Jul 2024 13:05:40 +0000</pubDate>
      <guid>/code/2024/070221-tusd/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://github.com/tus/tus.io/raw/main/src/assets/logos-tus-default.svg?raw=true&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://tus.github.io/tusd/&#34;&gt;tusd&lt;/a&gt; 是基于golang 开发的对于tus 断点续传协议的实现，既可以做为server 使用，也可以使用golang 包，开发自己的文件存储服务&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tus/tusd&#34;&gt;Github&lt;/a&gt; tus是一种基于HTTP的可恢复文件上传的协议。意味着上传可以随时中断，并可以恢复没有再次重新上传之前的数据。&lt;/p&gt;</description>
    </item>
    <item>
      <title>端口转发及使用</title>
      <link>/code/2024/062711-port/</link>
      <pubDate>Thu, 27 Jun 2024 03:39:13 +0000</pubDate>
      <guid>/code/2024/062711-port/</guid>
      <description>&lt;p&gt;代码很简单,这里的应用场景是可以通过端口转发，将目的IP指向动态IP上，从而实现直接访问通过电信等家庭网络中的非标准服务器。&lt;br&gt;&#xA;如果外网IP较难获取到，那估计只能等IPV6了。&lt;br&gt;&#xA;至于如何获取到目的IP（动态变化），只需要花百元购一个云服务器/云空间（它的IP是固定的）转发一下即可。&lt;br&gt;&#xA;当然，现在的云服务器也不贵。这都是穷闹的。不过毕竟云服务器没家里的带宽和自由。&lt;br&gt;&#xA;通过以下转发，即可浏览器输入localhost看到指定的内容，目的端口就任意了(家庭宽带是封禁了80端口的)。&lt;br&gt;&#xA;如果通过修改本机hosts，是不是可以实现自定义域名访问?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot做个圆形可旋转的菜单</title>
      <link>/code/2024/062612-circular_menu/</link>
      <pubDate>Wed, 26 Jun 2024 04:24:02 +0000</pubDate>
      <guid>/code/2024/062612-circular_menu/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../062612-circular_menu-03.png&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;因为购买了一个圆形按钮，想着用它来作什么。它有五个按键：左、右、按下、按下左、按下右。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../062612-circular_menu-01.gif&#34; alt=&#34;&#34;&gt;&#xA;使用Godot制作一个圆形菜单，按下键作为确认，左右进行选择。多余的按下左右作为旋转控制(实际没啥用)。&lt;br&gt;&#xA;把工程设为透明，置顶，无窗口。代码实现了拖动功能。定义好功能按钮。&lt;br&gt;&#xA;为了简单(懒)，通过前端定义了RichTextlLabel，代码直接复制过来用。&lt;br&gt;&#xA;完善一下，从配置文件读取，即可实现选择并执行的功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Redka Go开发的Redis数据库?</title>
      <link>/it/2024/062521-redka/</link>
      <pubDate>Tue, 25 Jun 2024 13:20:09 +0000</pubDate>
      <guid>/it/2024/062521-redka/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/nalgeon/redka&#34;&gt;Redka&lt;/a&gt;旨在使用SQLite重新实现Redis的优秀部分,同时保持与Redis API的兼容性。&lt;br&gt;&#xA;意即使用Sqlite来代替Redis。Go跨平台，所以Win/Linux可以自己编译使用。速度上比Redis慢2-5倍。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://colobu.com/2024/06/04/redka-redis-with-sqlite&#34;&gt;此网文&lt;/a&gt;介绍得比较详细。&lt;/p&gt;</description>
    </item>
    <item>
      <title>视频播放器</title>
      <link>/it/2024/061216-movieplayer/</link>
      <pubDate>Wed, 12 Jun 2024 08:22:00 +0000</pubDate>
      <guid>/it/2024/061216-movieplayer/</guid>
      <description>&lt;p&gt;家里闲置下来的Pi4，想利用起来作成一个视频播放器。免得那个过时的小米电视这样那样的问题。哪怕是在Linux下，也比小米那种安卓系统强，会有更多的解决方案。&lt;/p&gt;</description>
    </item>
    <item>
      <title>智能眼镜的现状及需求分析</title>
      <link>/it/2024/060908-glass/</link>
      <pubDate>Sun, 09 Jun 2024 00:39:08 +0000</pubDate>
      <guid>/it/2024/060908-glass/</guid>
      <description>&lt;p&gt;文章试图通过AI的帮助来完成部份。它给我整理的如下：&lt;/p&gt;&#xA;&lt;h3 id=&#34;一引言&#34;&gt;一、引言&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;简述智能眼镜的概念：智能眼镜是一种集成了计算、显示、通讯等多种功能的可穿戴设备，旨在通过直观的视觉交互方式，为用户提供信息获取、娱乐、健康监测等服务。&#xA;强调其在技术发展和消费电子领域的独特地位，以及其作为未来智能生活入口的潜力。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;二智能眼镜技术现状&#34;&gt;二、智能眼镜技术现状&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;显示技术：介绍目前主流的显示技术，如波导显示、Micro LED、LCD等，及其各自的优缺点。&#xA;交互方式：探讨语音控制、手势识别、眼球追踪等交互技术的应用现状。&#xA;硬件配置与续航能力：分析智能眼镜的处理器、内存、存储以及电池续航能力的发展水平。&#xA;连接性与兼容性：讨论智能眼镜与智能手机、智能家居等设备的联动能力，以及对不同操作系统的支持情况。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;三市场主要产品概览&#34;&gt;三、市场主要产品概览&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;介绍市场上已有的标志性产品，如Google Glass、Microsoft HoloLens、Snap Spectacles等，分析它们的特点、目标用户群及市场反响。&#xA;提及新兴品牌或概念产品的创新尝试，展示行业活力。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;四用户需求分析&#34;&gt;四、用户需求分析&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;1. 消费者市场：&#xA;    便捷性与时尚性：用户对于外观设计、佩戴舒适度的需求。&#xA;    信息即时性：期望在不打断日常生活节奏的前提下，快速获取信息。&#xA;    健康监测：心率、睡眠质量、运动量等健康数据的监测需求。&#xA;    娱乐体验：高质量的AR/VR内容体验，包括游戏、影视观看等。&#xA;2. 企业级应用：&#xA;    远程协作：支持远程会议、工作指导等功能，提高工作效率。&#xA;    工业与医疗：在复杂环境下的信息辅助、手术导航等专业应用。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;五面临的挑战与机遇&#34;&gt;五、面临的挑战与机遇&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;隐私与安全：用户数据保护、防偷窥技术的必要性。&#xA;法律法规：不同国家和地区对于智能眼镜使用的法律限制。&#xA;技术突破：如何在保持轻便的同时提升性能，以及降低成本。&#xA;市场教育与接受度：用户对智能眼镜价值的认知提升与市场推广策略。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;六未来发展趋势&#34;&gt;六、未来发展趋势&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;技术融合：AI、5G、物联网等技术与智能眼镜的深度融合。&#xA;应用场景拓展：教育、旅游、零售等新领域的应用探索。&#xA;生态构建：软硬件结合，建立更广泛的应用生态和服务体系。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;七结语&#34;&gt;七、结语&lt;/h3&gt;&#xA;&lt;p&gt;总结智能眼镜作为下一代智能终端的广阔前景，强调在满足用户多元化需求的同时，需不断攻克技术难关，加强行业规范，促进健康可持续发展。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ChatTTS文字转语音</title>
      <link>/it/2024/060210-chattts/</link>
      <pubDate>Sun, 02 Jun 2024 02:42:54 +0000</pubDate>
      <guid>/it/2024/060210-chattts/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../060210-chattts-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;试用&lt;a href=&#34;https://github.com/2noise/chattts&#34;&gt;ChatTTS&lt;/a&gt;以及&lt;a href=&#34;https://github.com/jianchang512/ChatTTS-ui&#34;&gt;它的UI&lt;/a&gt;，后者提供了一个API可调用。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/jianchang512/ChatTTS-ui/releases&#34;&gt;Windows版本很简单，直接下载使用&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;这里记录一下Linux版本的安装：&lt;/p&gt;&#xA;&lt;p&gt;1.配置好 python3.9+环境&lt;br&gt;&#xA;因为Ubuntu自带的Python更新，所以直接安装将导致某一步不可用，不能继续。&lt;br&gt;&#xA;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/506491209?utm_id=0&#34;&gt;按照此页&lt;/a&gt;介绍的方法安装一个Python3.9的版本。&lt;br&gt;&#xA;1). 安装依赖:sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libbz2-dev liblzma-dev sqlite3 libsqlite3-dev tk-dev uuid-dev libgdbm-compat-dev&lt;br&gt;&#xA;2). 在 Python 官网下载界面下载 Python 3.9 的源代码 , 或者 sudo wget &lt;a href=&#34;https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tar.xz&#34;&gt;https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tar.xz&lt;/a&gt;&lt;br&gt;&#xA;3). sudo ./configure &amp;ndash;enable-optimizations &amp;ndash;with-lto &amp;ndash;enable-shared  检查依赖与配置编译&lt;br&gt;&#xA;4). sudo make -j 6 编译&lt;br&gt;&#xA;5). sudo make&lt;br&gt;&#xA;6). sudo make altinstall 安装&#xA;7). sudo ln -s /usr/local/lib/libpython3.9.so.1.0 /usr/lib/  可能存在找不到动态链接库的问题&lt;br&gt;&#xA;8). python3.9 使用，pip3.9 -V  后续安装相关也使用pip3.9,而不是pip3&lt;/p&gt;</description>
    </item>
    <item>
      <title>rqlite分布工数据库</title>
      <link>/it/2024/052216-rqlite/</link>
      <pubDate>Wed, 22 May 2024 08:14:40 +0000</pubDate>
      <guid>/it/2024/052216-rqlite/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://rqlite.io/logo-text-shadow.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;rqlite是一个使用Go语言开发的轻量级的分布式数据库，它使用SQLite作为后端存储引擎，可以通过HTTP API进行访问，具有高可用性和可扩展性。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用手机批量发短信</title>
      <link>/code/2024/051817-sms/</link>
      <pubDate>Sat, 18 May 2024 09:22:01 +0000</pubDate>
      <guid>/code/2024/051817-sms/</guid>
      <description>&lt;p&gt;一般批量发短信都使用短信平台，通过服务商发送。用手机批量发送短信是因为：手机号显示自己的(服务商是一长串商用短信号码)，另外服务商的限制较多。当然手机发短信就贵且慢。&lt;/p&gt;</description>
    </item>
    <item>
      <title>高血压相关知识</title>
      <link>/health/2024/051720-hypertension/</link>
      <pubDate>Fri, 17 May 2024 12:21:19 +0000</pubDate>
      <guid>/health/2024/051720-hypertension/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../051720-hypertension-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;IT从业人员长期的熬夜、不规律作息、久坐、压力往往是高血压的根源之一。&lt;/p&gt;&#xA;&lt;p&gt;最新的血压标准：&lt;br&gt;&#xA;正常值：&amp;lt;130/85mmHg&lt;br&gt;&#xA;偏高：130&lt;del&gt;139/85&lt;/del&gt;89mmHg&lt;br&gt;&#xA;一级：140-159/90-99mmHg之间。&lt;br&gt;&#xA;二级：160-180/100-110mmHg范围内。&lt;br&gt;&#xA;三级：血压超过180/110mmHg，或低压在110mmHg以上。&lt;/p&gt;</description>
    </item>
    <item>
      <title>离贾维斯(JARVIS)越来越近</title>
      <link>/it/2024/051407-jarvis/</link>
      <pubDate>Mon, 13 May 2024 23:43:59 +0000</pubDate>
      <guid>/it/2024/051407-jarvis/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../051407-jarvis-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;仿佛离&amp;quot;贾维斯&amp;quot;越来越近，通过一系列开源AI项目，逐渐拼凑出一个个人的人工智能助手。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://i.scwy.net/code/2023/112311-wake/&#34;&gt;Porcupine&lt;/a&gt;作唤醒&lt;/li&gt;&#xA;&lt;li&gt;?判断命令结束&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ahmetoner.com/whisper-asr-webservice&#34;&gt;Whisper&lt;/a&gt;作语音转文字&#xA;sudo docker run -d -p 9000:9000 -e ASR_MODEL=base -e ASR_ENGINE=openai_whisper onerahmet/openai-whisper-asr-webservice:latest)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ollama.com/&#34;&gt;Ollama&lt;/a&gt;作离线AI&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/1Panel-dev/MaxKB&#34;&gt;MaxKB&lt;/a&gt;作本地知识库&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/RVC-Boss/GPT-SoVITS&#34;&gt;SoVITS&lt;/a&gt;作文字转语音，可以随意克隆人的声音&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;除步骤2似乎暂时没有好的解决办法外，其它板块都已经有模有样了。&lt;br&gt;&#xA;步骤2现在是通过Golang在录音时判断音频阀值。&lt;/p&gt;</description>
    </item>
    <item>
      <title>PicoShare的改进设想</title>
      <link>/it/2024/050920-picoshare/</link>
      <pubDate>Thu, 09 May 2024 12:27:39 +0000</pubDate>
      <guid>/it/2024/050920-picoshare/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://demo.pico.rocks/&#34;&gt;PicoShare&lt;/a&gt;是一个免注册的文件共享工具。它允许上传文件，设置保存时间，并分享或在线观看。&lt;br&gt;&#xA;&lt;a href=&#34;https://u.scwy.net&#34;&gt;我也建了一个服务, https://u.scwy.net&lt;/a&gt;，非常好记。&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/mtlynch/picoshare&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;改进设想：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;当前最新版本1.4.2，仿佛没有直接进入上传界面，而是需要先创建用户，生成一个稍长的地址，与老版本直接进入上传界面不同。&lt;/p&gt;</description>
    </item>
    <item>
      <title>被动运动思考</title>
      <link>/health/2024/050911-sport/</link>
      <pubDate>Thu, 09 May 2024 03:22:28 +0000</pubDate>
      <guid>/health/2024/050911-sport/</guid>
      <description>&lt;p&gt;最新几天有点问题去医院，主要还是IT工作者的通病：久坐不运动、熬夜。于是也在思考关于[b]被动运动[/b]。&lt;/p&gt;&#xA;&lt;p&gt;比如朋友销售的产品“律动仪”，就是站或坐在机器上面，通过机器的运动，带动你运动。&lt;/p&gt;</description>
    </item>
    <item>
      <title>搭建一个自己的人工智能系统</title>
      <link>/it/2024/050110-ai/</link>
      <pubDate>Wed, 01 May 2024 02:26:23 +0000</pubDate>
      <guid>/it/2024/050110-ai/</guid>
      <description>&lt;p&gt;最近两天试了ollama，一个可以离线使用的AI系统，载入各种可用的模型后，可以实现本的一些AI应用。&lt;/p&gt;&#xA;&lt;p&gt;下载了十多个，因为并没有N卡，只是利用CPU来运算，速度有限，也只能用一些稍小的模型。&lt;br&gt;&#xA;&lt;img src=&#34;../050110-ai-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang调用Ollama API实现AI</title>
      <link>/code/2024/043021-ollama/</link>
      <pubDate>Tue, 30 Apr 2024 13:54:07 +0000</pubDate>
      <guid>/code/2024/043021-ollama/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://ollama.com/public/blog/meta-ollama-llama3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最新在Win或Linux下部署一个&lt;a href=&#34;https://ollama.com/&#34;&gt;Ollama&lt;/a&gt;都很简单，在&lt;a href=&#34;https://github.com/ollama/ollama&#34;&gt;Github&lt;/a&gt;上也有介绍和资料，Linux下 curl -fsSL &lt;a href=&#34;https://ollama.com/install.sh&#34;&gt;https://ollama.com/install.sh&lt;/a&gt; | sh 即可。&lt;/p&gt;&#xA;&lt;p&gt;要服务器上安装，其它客户端调用，主要是修改环境变量 OLLAMA_HOST=&amp;ldquo;0.0.0.0&amp;rdquo; 这样的地址即可，&lt;a href=&#34;https://github.com/ollama/ollama/blob/main/docs/faq.md&#34;&gt;问答&lt;/a&gt;中也有介绍。环境变量 OLLAMA_MODELS 应该是指定模型的地址。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang调用实现TTS</title>
      <link>/code/2024/043013-tts/</link>
      <pubDate>Tue, 30 Apr 2024 05:54:23 +0000</pubDate>
      <guid>/code/2024/043013-tts/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/zhaopuyang/golang-tts&#34;&gt;https://github.com/zhaopuyang/golang-tts&lt;/a&gt; 这个库确实可用，不过功能还是简单了点。&lt;/p&gt;&#xA;&lt;p&gt;Windows下有效&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import golang_tts &amp;#34;github.com/zhaopuyang/golang-tts&amp;#34;&#xA;&#xA;func main() {&#xA;&#x9;golang_tts.SpeakText(&amp;#34;你好,世界!&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://github.com/guquan-lengyue/ms_edge_tts&#34;&gt;https://github.com/guquan-lengyue/ms_edge_tts&lt;/a&gt; 看起来是API调用，暂时不选择&lt;/p&gt;</description>
    </item>
    <item>
      <title>端口敲门 PortKnocking</title>
      <link>/it/2024/042408-portknocking/</link>
      <pubDate>Wed, 24 Apr 2024 00:09:50 +0000</pubDate>
      <guid>/it/2024/042408-portknocking/</guid>
      <description>&lt;p&gt;端口敲门 Port Knocking 就是将需要开放的端口放在正确的“敲门声”之后才允许访问。在Ubuntu中可以安装knockd服务。&lt;br&gt;&#xA;借鉴到Web服务器中，可以有以下方案：&lt;/p&gt;</description>
    </item>
    <item>
      <title>云基金-小额投资基金</title>
      <link>/money/2024/042009-fund/</link>
      <pubDate>Sat, 20 Apr 2024 01:24:16 +0000</pubDate>
      <guid>/money/2024/042009-fund/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../042009-fund-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;如标题所提到的基金，不同于现在股票与基金这种。是指的将广大民众的小额资金收集起来，一起投资某个项目。&lt;br&gt;&#xA;具体投资什么项目，由小额投资人决定，管理者进行资料收集和分析，充分说明项目的优缺点及风险点。&lt;br&gt;&#xA;管理者收取项目的管理费用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Win下蓝牙扫描</title>
      <link>/code/2024/041017-bluetooth/</link>
      <pubDate>Wed, 10 Apr 2024 09:06:22 +0000</pubDate>
      <guid>/code/2024/041017-bluetooth/</guid>
      <description>&lt;p&gt;其实是想在Win下做一个普通蓝牙设备的扫描，似乎并没达到。&lt;br&gt;&#xA;网上搜索到的一般都是BLE，而我要搜索类似手机的蓝牙。&lt;/p&gt;&#xA;&lt;p&gt;以下代码是BLE扫描&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;os/exec&amp;#34;&#xA;&#x9;&amp;#34;time&amp;#34;&#xA;&#xA;&#x9;&amp;#34;tinygo.org/x/bluetooth&amp;#34;&#xA;)&#xA;&#xA;var (&#xA;&#x9;deviceMAC       = &amp;#34;4C:57:CA:7D:5D:26&amp;#34;      // Bluetooth Device MAC ID 7C:2A:DB:00:7A:94&#xA;&#x9;minRSSI   int16 = -60                      // Minimum RSSI tolerance value of the bluetooth device&#xA;&#x9;timeout         = 30 * time.Second         // Timeout Time&#xA;&#x9;adapter         = bluetooth.DefaultAdapter // Bluetooth Receiver&#xA;)&#xA;&#xA;var timer = time.NewTicker(timeout)&#xA;&#xA;func lockWindows() {&#xA;&#x9;err := exec.Command(&amp;#34;cmd&amp;#34;, &amp;#34;/C&amp;#34;, &amp;#34;rundll32.exe user32.dll,LockWorkStation&amp;#34;).Run()&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;return&#xA;&#x9;}&#xA;}&#xA;&#xA;func startTimer() {&#xA;&#x9;go func() {&#xA;&#x9;&#x9;for range timer.C {&#xA;&#x9;&#x9;&#x9;lockWindows()&#xA;&#x9;&#x9;}&#xA;&#x9;}()&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;startTimer()&#xA;&#xA;&#x9;err := adapter.Enable()&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(&amp;#34;Failed to initialize adapter!&amp;#34;)&#xA;&#x9;}&#xA;&#xA;&#x9;err = adapter.Scan(func(adapter *bluetooth.Adapter, device bluetooth.ScanResult) {&#xA;&#x9;&#x9;if device.Address.String() == deviceMAC {&#xA;&#x9;&#x9;&#x9;if device.RSSI &amp;gt; minRSSI {&#xA;&#x9;&#x9;&#x9;&#x9;timer.Reset(timeout)&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;})&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(&amp;#34;Scan Error!&amp;#34;)&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个是普通蓝牙扫描，但设备没有刷新的样子，是Win的缓存？&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot富文本节点显示动画</title>
      <link>/code/2024/040908-rich/</link>
      <pubDate>Tue, 09 Apr 2024 00:47:43 +0000</pubDate>
      <guid>/code/2024/040908-rich/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/LucyLavend/GodotPrintRichExamples&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../040908-rich-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;动画可以在RichTextLable节点，甚至print_rich输出到调试窗中。它是将若干张动图png连在一起播放，达到动画效果。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;添加普通节点，挂接以下代码。用于生成动画资源文件，例如funny_cat.tres。&lt;br&gt;&#xA;设置图片目录,设置帧间隔,保存输出的动画资源。(生成资源文件后，可以删除此节点。)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;@tool&#xA;extends Node&#xA;&#xA;#这个脚本允许您生成一个动画纹理资源&#xA;#从选定文件夹中的所有图像中提取。&#xA;&#xA;#将此脚本放在一个节点上，在检查器中设置属性，然后点击生成&#xA;#然后，您可以查看并保存来自检查器的输出&#xA;&#xA;#你可以使用像ezgif.com这样的网站从gif中提取所有的帧&#xA;&#xA;@export_dir var images_directory&#xA;@export var frame_duration_sec = .1&#xA;&#xA;@export var generate: bool = false:&#xA;&#x9;set = _set_generate_button&#xA;&#xA;@export var output: AnimatedTexture&#xA;&#xA;func _set_generate_button(_new_value: bool):&#xA;&#x9;generate = false&#xA;&#x9;&#xA;&#x9;var new_animated_texture = AnimatedTexture.new()&#xA;&#x9;var dir = DirAccess.open(images_directory)&#xA;&#x9;var file_counter = 0&#xA;&#xA;&#x9;for file in dir.get_files():&#xA;&#x9;&#x9;if file.ends_with(&amp;#34;.png&amp;#34;):&#xA;&#x9;&#x9;&#x9;var image_texture : CompressedTexture2D = load(images_directory + &amp;#34;/&amp;#34; + file)&#xA;&#x9;&#x9;&#x9;if image_texture != null:&#xA;&#x9;&#x9;&#x9;&#x9;new_animated_texture.set_frame_texture(file_counter, image_texture)&#xA;&#x9;&#x9;&#x9;&#x9;new_animated_texture.set_frame_duration(file_counter, frame_duration_sec)&#xA;&#x9;&#x9;&#x9;&#x9;file_counter += 1&#xA;&#x9;&#xA;&#x9;new_animated_texture.frames = file_counter&#xA;&#x9;output = new_animated_texture&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;在RichTextLabel节点，或print_rich输出：print_rich(&amp;quot;[img=160x160]res://Images/funny_cat.tres&amp;quot;)&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Godot与蚂蚁框</title>
      <link>/code/2024/040108-mouse/</link>
      <pubDate>Mon, 01 Apr 2024 00:21:44 +0000</pubDate>
      <guid>/code/2024/040108-mouse/</guid>
      <description>&lt;h3 id=&#34;鼠标拖动画蚂蚁框&#34;&gt;鼠标拖动画蚂蚁框&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../040108-mouse-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;extends Control&#xA;&#xA;@onready var color_rect = $ColorRect&#xA;@onready var ant_line_box: Control = $&amp;#34;.&amp;#34;&#xA;&#xA;&#xA;var is_pressed = false&#x9;# 鼠标是否按下&#xA;var pressed_mouse_pos = Vector2.ZERO  # 鼠标按下时的位置&#xA;&#xA;func _ready() -&amp;gt; void:&#xA;&#x9;ant_line_box.connect(&amp;#34;gui_input&amp;#34;,_on_AntLineBox_gui_input)&#xA;&#xA;func _on_AntLineBox_gui_input(event):&#xA;&#x9;if event is InputEventMouseButton:&#xA;&#x9;&#x9;self.is_pressed = event.pressed&#xA;&#x9;&#x9;self.pressed_mouse_pos = get_global_mouse_position()&#xA;&#x9;if event is InputEventMouseMotion:&#xA;&#x9;&#x9;if self.is_pressed:&#xA;&#x9;&#x9;&#x9;var mouse_pos = get_global_mouse_position()&#xA;&#x9;&#x9;&#x9;var mouse_offset = mouse_pos - self.pressed_mouse_pos&#xA;&#x9;&#x9;&#x9;var pos = Vector2.ZERO&#xA;&#x9;&#x9;&#x9;pos = self.pressed_mouse_pos&#xA;&#x9;&#x9;&#x9;if mouse_offset.x &amp;lt; 0:&#xA;&#x9;&#x9;&#x9;&#x9;pos.x = mouse_pos.x&#xA;&#x9;&#x9;&#x9;if mouse_offset.y &amp;lt; 0:&#xA;&#x9;&#x9;&#x9;&#x9;pos.y = mouse_pos.y&#xA;&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;&#x9;color_rect.set_position(pos)&#xA;&#x9;&#x9;&#x9;color_rect.set_size(mouse_offset.abs())&#xA;&#x9;&#x9;&#x9;color_rect.material.set_shader_parameter(&amp;#34;pos&amp;#34;, pos)&#xA;&#x9;&#x9;&#x9;color_rect.material.set_shader_parameter(&amp;#34;size&amp;#34;, mouse_offset.abs())&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;shader绘制蚂蚁线&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot收集到几个Shader</title>
      <link>/code/2024/032916-shader/</link>
      <pubDate>Fri, 29 Mar 2024 08:02:58 +0000</pubDate>
      <guid>/code/2024/032916-shader/</guid>
      <description>&lt;p&gt;Shader是个神奇的存在，&lt;a href=&#34;https://i.scwy.net/it/2020/102616-shader/&#34;&gt;之前也有过收集&lt;/a&gt;，这次继续收集官方示例中的着色器.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../032916-shader-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;outline.gdshader 黑色外部边线（第1排第2图效果）&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;shader_type canvas_item;&#xA;&#xA;uniform float outline_width = 2.0;&#xA;uniform vec4 outline_color : source_color;&#xA;&#xA;void fragment() {&#xA;&#x9;vec4 col = texture(TEXTURE, UV);&#xA;&#x9;vec2 ps = TEXTURE_PIXEL_SIZE;&#xA;&#x9;float a;&#xA;&#x9;float maxa = col.a;&#xA;&#x9;float mina = col.a;&#xA;&#xA;&#x9;a = texture(TEXTURE, UV + vec2(0.0, -outline_width) * ps).a;&#xA;&#x9;maxa = max(a, maxa);&#xA;&#x9;mina = min(a, mina);&#xA;&#xA;&#x9;a = texture(TEXTURE, UV + vec2(0.0, outline_width) * ps).a;&#xA;&#x9;maxa = max(a, maxa);&#xA;&#x9;mina = min(a, mina);&#xA;&#xA;&#x9;a = texture(TEXTURE, UV + vec2(-outline_width, 0.0) * ps).a;&#xA;&#x9;maxa = max(a, maxa);&#xA;&#x9;mina = min(a, mina);&#xA;&#xA;&#x9;a = texture(TEXTURE, UV + vec2(outline_width, 0.0) * ps).a;&#xA;&#x9;maxa = max(a, maxa);&#xA;&#x9;mina = min(a, mina);&#xA;&#xA;&#x9;COLOR = mix(col, outline_color, maxa - mina);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;aura.gdshader 外部光环(第1排第3个效果，类似上方效果)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot中Websocket进行通信</title>
      <link>/code/2024/032821-websocket/</link>
      <pubDate>Thu, 28 Mar 2024 13:18:33 +0000</pubDate>
      <guid>/code/2024/032821-websocket/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../032821-websocket-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;服务端 server.gd&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;extends Node&#xA;&#xA;const PORT = 9080&#xA;var tcp_server := TCPServer.new()&#xA;var socket := WebSocketPeer.new()&#xA;&#xA;# 输出信息到富文本框&#xA;func log_message(message):&#xA;&#x9;var time = &amp;#34;[color=#aaaaaa] %s [/color]&amp;#34; % Time.get_time_string_from_system()&#xA;&#x9;%TextServer.text += time + message + &amp;#34;\n&amp;#34;&#xA;&#xA;# 服务器监听&#xA;func _ready():&#xA;&#x9;if tcp_server.listen(PORT) != OK:&#xA;&#x9;&#x9;log_message(&amp;#34;Unable to start server.&amp;#34;)&#xA;&#x9;&#x9;set_process(false)  # 监听不成功时停止刷新&#xA;&#xA;func _process(_delta):&#xA;&#x9;while tcp_server.is_connection_available():  # 有可用连接时&#xA;&#x9;&#x9;var conn: StreamPeerTCP = tcp_server.take_connection()&#xA;&#x9;&#x9;assert(conn != null)&#xA;&#x9;&#x9;socket.accept_stream(conn)&#xA;&#xA;&#x9;socket.poll()&#xA;&#xA;&#x9;if socket.get_ready_state() == WebSocketPeer.STATE_OPEN:   # 接收信息&#xA;&#x9;&#x9;while socket.get_available_packet_count():&#xA;&#x9;&#x9;&#x9;log_message(socket.get_packet().get_string_from_utf8())&#xA;&#xA;func _exit_tree():&#xA;&#x9;socket.close()&#xA;&#x9;tcp_server.stop()&#xA;&#xA;# 按发送键&#xA;func _on_button_pong_pressed():&#xA;&#x9;socket.send_text(&amp;#34;打&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;客户端 client.gd&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot滚动数字效果</title>
      <link>/code/2024/032321-scrolle/</link>
      <pubDate>Sat, 23 Mar 2024 13:55:23 +0000</pubDate>
      <guid>/code/2024/032321-scrolle/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../032321-scrolle-01.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;简单用ScrollContainer实现滚动效果，真正要好话，估计得自己用draw_string绘制，偷个懒。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../032321-scrolle-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;extends Node2D&#xA;&#xA;## 开奖号码&#xA;@export var lotterNum :String = &amp;#34;917651&amp;#34;&#xA;## 滚动速度&#xA;@export var scrollSpeed :int = 10&#xA;&#xA;@onready var number: Control = $Label&#xA;@onready var scroll_label: Label = $ScrollContainer/Label&#xA;@onready var lottery_label: Label = $Label&#xA;@onready var scroll_container: ScrollContainer = $ScrollContainer&#xA;&#xA;var oldScreenValue :int = -100&#x9;&#x9;&#x9;# 保存原有滚动值，当没变化时，表示到底&#xA;var currentNumber :int = 0 &#x9;&#x9;&#x9;# 当前显示第n个值&#xA;&#xA;func _ready() -&amp;gt; void:&#xA;&#x9;setScollLabelValue()   # 设置滚动值&#xA;&#x9;var timer = Timer.new()&#xA;&#x9;timer.wait_time = 0.01&#xA;&#x9;timer.autostart = true&#xA;&#x9;timer.timeout.connect(func():&#xA;&#x9;&#x9;scroll_container.scroll_vertical += scrollSpeed&#xA;&#x9;&#x9;&#xA;&#x9;&#x9;# 滚动到底的处理&#xA;&#x9;&#x9;if scroll_container.scroll_vertical==oldScreenValue:&#xA;&#x9;&#x9;&#x9;number.get_children()[currentNumber].text = lotterNum.substr(currentNumber,1)&#xA;&#x9;&#x9;&#x9;number.get_children()[currentNumber].visible = true&#x9;&#x9;&#xA;&#x9;&#x9;&#x9;currentNumber+=1&#xA;&#x9;&#x9;&#x9;if currentNumber==6:&#xA;&#x9;&#x9;&#x9;&#x9;timer.stop()&#xA;&#x9;&#x9;&#x9;&#x9;scroll_container.visible = false&#xA;&#x9;&#x9;&#x9;&#x9;return&#xA;&#x9;&#x9;&#x9;scroll_container.scroll_vertical=0&#xA;&#x9;&#x9;&#x9;setScollLabelValue()&#xA;&#x9;&#x9;&#x9;&#xA;&#x9;&#x9;else:&#xA;&#x9;&#x9;&#x9;oldScreenValue=scroll_container.scroll_vertical&#xA;&#x9;)&#xA;&#x9;add_child(timer)&#xA;&#xA;func setScollLabelValue() -&amp;gt; void:&#xA;&#x9;number.get_children()[currentNumber].visible = false # 原标签隐藏&#xA;&#x9;scroll_container.position.x  = number.get_children()[currentNumber].position.x + 150 # 滚动内容定位&#xA;&#x9;scroll_label.text = &amp;#34;&amp;#34;&#x9;&#xA;&#x9;for i in range(20):&#xA;&#x9;&#x9;scroll_label.text += &amp;#34;\n&amp;#34; + str(i % 10)&#xA;&#x9;for i in range(int(lotterNum.substr(currentNumber,1))):&#xA;&#x9;&#x9;scroll_label.text += &amp;#34;\n&amp;#34; + str(i % 10)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Godot做的一个桌面工具</title>
      <link>/code/2024/032014-desktop/</link>
      <pubDate>Wed, 20 Mar 2024 06:08:03 +0000</pubDate>
      <guid>/code/2024/032014-desktop/</guid>
      <description>&lt;p&gt;快速的用Godot做了一个桌面工具，用于显示内存占用、CPU占用及网络情况。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../032014-desktop-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;代码涉及到多线程,很短,也不够优化。&lt;br&gt;&#xA;运行时占用30MB左右，编译后程序大小70MB左右。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot扫描内网TCP服务器</title>
      <link>/code/2024/031923-scanserver/</link>
      <pubDate>Tue, 19 Mar 2024 15:30:02 +0000</pubDate>
      <guid>/code/2024/031923-scanserver/</guid>
      <description>&lt;p&gt;接上回&lt;a href=&#34;https://i.scwy.net/code/2024/031918-sendfile/&#34;&gt;在Godot建立TCP网络，发送文件&lt;/a&gt;。&lt;br&gt;&#xA;为了达成在内网作服务器，分担下载压力的功能，还需要内网TCP服务器扫描功能。&lt;/p&gt;&#xA;&lt;p&gt;部份代码依然比较笨拙，且这里直接写了掩码，暂时只能通过shell去获取。godot本身似乎没有这样的功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot建立TCP网络发送文件</title>
      <link>/code/2024/031918-sendfile/</link>
      <pubDate>Tue, 19 Mar 2024 10:36:35 +0000</pubDate>
      <guid>/code/2024/031918-sendfile/</guid>
      <description>&lt;p&gt;需求：之前实现过&lt;a href=&#34;https://i.scwy.net/code/2024/031200-up_down/&#34;&gt;通过HTTPClient实现上传与下载&lt;/a&gt;。但全都来服务器上下载文件，导致服务器压力增大。特别是同一个局域网中，完全可以“共享”下载。即先下载完的做服务器，供其它客户机下载。比如在网吧中。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../031918-sendfile-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;步骤：选择文件-&amp;gt;创建服务器-&amp;gt;创建客户端-&amp;gt;向客户端发文件/向服务端发文件&lt;/p&gt;&#xA;&lt;p&gt;以下实现利用TCP建立服务器，与客户机互发文件。代码尚可优化。&lt;/p&gt;</description>
    </item>
    <item>
      <title>穷人版服务器放家</title>
      <link>/it/2024/031820-net/</link>
      <pubDate>Mon, 18 Mar 2024 12:35:03 +0000</pubDate>
      <guid>/it/2024/031820-net/</guid>
      <description>&lt;p&gt;需要将一台游戏开放到公网，供大家娱乐。但是租用服务器或托管还是不便宜。&lt;/p&gt;&#xA;&lt;p&gt;(看到一家号称100M独享8核16GB,5800元/年,已算便宜)&lt;/p&gt;&#xA;&lt;p&gt;看成都电信149家庭套餐(500M下行/50M上行)，似乎现在还能申请到公网IP。不管是IPV4还是IPV6都不要紧。&lt;br&gt;&#xA;再网上购一台云服务器作跳转，可能5、6百元5-10MB。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot图片拖动</title>
      <link>/code/2024/031810-drop/</link>
      <pubDate>Mon, 18 Mar 2024 02:40:36 +0000</pubDate>
      <guid>/code/2024/031810-drop/</guid>
      <description>&lt;p&gt;在游戏的“背包系统”中经常会需要物品的拖动，Godot内置了拖动相关函数。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../031810-drop-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.bilibili.com/video/BV1wr421x7bK/?spm_id_from=333.788.recommend_more_video.10&amp;amp;vd_source=b56d1c2a8432369e046076e4b0bad6fa&#34;&gt;B站转载的视频学习&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;bool _can_drop_data(at_position: Vector2, data: Variant)  是否允许拖动/接收(目标)&#xA;void _drop_data(at_position: Vector2, data: Variant) 拖动传递来的数据(目标)&#xA;Variant _get_drag_data(at_position: Vector2) 拖动对象数据(源)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;看起来只有Control类型下的节点类型有完全的几个函数。而Node2D下只有_get_drag_data函数。&lt;/p&gt;</description>
    </item>
    <item>
      <title>在Godot中嵌入浏览器</title>
      <link>/code/2024/031723-browser/</link>
      <pubDate>Sun, 17 Mar 2024 15:14:15 +0000</pubDate>
      <guid>/code/2024/031723-browser/</guid>
      <description>&lt;p&gt;如果能在Godot中嵌入浏览器，将扩展更多的应用场景。比如我只想将Godot用于制作普通的GUI。&lt;/p&gt;&#xA;&lt;p&gt;下载&lt;a href=&#34;https://github.com/Lecrapouille/gdcef&#34;&gt;Github&lt;/a&gt;上的项目，在Win下实现还是很快速简单的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/Lecrapouille/gdcef/tree/godot-4.x&#34;&gt;进入当前4.x版本&lt;/a&gt;下载有2D和3D示例可查看。&lt;/p&gt;&#xA;&lt;p&gt;在2D示例中，需自行在当前目录下建立cef_artifacts目录，将下方下载的build目录内容复制到cef_artifacts中。即可在Godot看到效果。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot生成二维码</title>
      <link>/code/2024/031719-qrcode/</link>
      <pubDate>Sun, 17 Mar 2024 11:45:53 +0000</pubDate>
      <guid>/code/2024/031719-qrcode/</guid>
      <description>&lt;p&gt;游戏的分享或者通过手机上传照片等场景下，需要在界面中显示二维码。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/Greaby/godot-qrcode-generator&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;这是一个生成二维码的类，原理不复杂。把作者的classes目录复制到自己项目下即可引用。&lt;br&gt;&#xA;作者开发于4.1版本，在Godot4.3上测试通过。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot用代码加载Shader</title>
      <link>/code/2024/031712-shader/</link>
      <pubDate>Sun, 17 Mar 2024 04:53:07 +0000</pubDate>
      <guid>/code/2024/031712-shader/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../031712-shader-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;对于代码党，或在某些情况下，更适合用代码。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#x9;var shader = ShaderMaterial.new()&#xA;&#x9;var gradient = load(&amp;#34;res://shader/gradient_texture_2d.tres&amp;#34;)&#xA;&#x9;shader.shader = load(&amp;#34;res://shader/light.gdshader&amp;#34;)  # 加载shader&#xA;&#x9;shader.set_shader_parameter(&amp;#34;light_vector&amp;#34;,gradient)   # 设置参数&#xA;&#x9;$logo.material = shader # 将shader加载到节点&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;shader内容，是一个划过光线的效果。与主题无关，参数是一个sampler2D(用于绑定2D纹理的采样器类型)类型。使用了GradientTexture2D左上暗，右下亮的渐变纹理，实现了扫光从左上到右下。&lt;br&gt;&#xA;如果你需要从左向右(或相反)，就使用左暗右亮。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot之tilemap</title>
      <link>/code/2024/031519-tilemap/</link>
      <pubDate>Fri, 15 Mar 2024 11:54:00 +0000</pubDate>
      <guid>/code/2024/031519-tilemap/</guid>
      <description>&lt;p&gt;基于标题问题，一个一个解决。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot小地图</title>
      <link>/code/2024/031519-minimap/</link>
      <pubDate>Fri, 15 Mar 2024 11:52:51 +0000</pubDate>
      <guid>/code/2024/031519-minimap/</guid>
      <description>&lt;p&gt;基于标题的问题，一个一个解决。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 自定义类</title>
      <link>/code/2024/031420-class/</link>
      <pubDate>Thu, 14 Mar 2024 12:39:58 +0000</pubDate>
      <guid>/code/2024/031420-class/</guid>
      <description>&lt;p&gt;多此一举的部份，只是为了举例&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;extends Node&#xA;class_name ease_timer&#xA;&#xA;var timer :int = 0  ## 定时秒&#xA;var timerTask&#xA;var obj&#xA;signal timer_stop&#xA;&#xA;func _init(set_obj :SceneTree, set_timer :int) -&amp;gt; void:&#xA;&#x9;timer = set_timer&#xA;&#x9;obj = set_obj&#xA;&#xA;func start():&#xA;&#x9;timerTask = obj.create_timer(timer)&#xA;&#x9;await timerTask.timeout&#xA;&#x9;emit_signal(&amp;#34;timer_stop&amp;#34;)&#xA;&#x9;return timerTask&#xA;&#xA;func stop() -&amp;gt; void:&#xA;&#x9;timerTask.free()&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#x9;var my_timer = ease_timer.new(get_tree(), 10)&#xA;&#x9;my_timer.start()&#xA;&#x9;await my_timer.timer_stop&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;换一个载入方式&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot状态鸡(状态机)</title>
      <link>/code/2024/031416-state_machine/</link>
      <pubDate>Thu, 14 Mar 2024 08:46:44 +0000</pubDate>
      <guid>/code/2024/031416-state_machine/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../031416-state_machine-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;状态鸡就是 处理对象状态的机器。目的还是简化大型程序，分而治之。避免“史山代码”。&lt;/p&gt;&#xA;&lt;h3 id=&#34;管理机statemachine&#34;&gt;管理机(StateMachine)&lt;/h3&gt;&#xA;&lt;p&gt;顾名思义，即进行状态的管理。其实这里的代码就只是把初始状态传入(_ready中),一些对象(管理机自己)传入。&lt;br&gt;&#xA;然后将各事件传给各状态(handle_input/update/physics_update)。定义一个切换状态的函数(transition_to)&lt;br&gt;&#xA;看起来没进行啥真正的管理。各个状态都在它之下进行切换。新添加其它状态也一样。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot实现Web上传与下载</title>
      <link>/code/2024/031200-up_down/</link>
      <pubDate>Mon, 11 Mar 2024 16:11:46 +0000</pubDate>
      <guid>/code/2024/031200-up_down/</guid>
      <description>&lt;p&gt;Godot中也会遇到上传或下载文件的时候，比如下载资源包，上传队友的语音文件等。&lt;/p&gt;&#xA;&lt;p&gt;这里使用了 HTTPClient 低级节点，从低层一步步实现上传下载&lt;/p&gt;&#xA;&lt;p&gt;下载代码&lt;br&gt;&#xA;此代码含项目中的个别内容，需自行删除&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot录音并转换为mp3/ogg</title>
      <link>/code/2024/031010-record/</link>
      <pubDate>Sun, 10 Mar 2024 02:35:35 +0000</pubDate>
      <guid>/code/2024/031010-record/</guid>
      <description>&lt;p&gt;UI很简单，两个节点：AudioStreamPlayer用于录音，Button用于开始/结束录音。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt; 项目设置必须 音频-驱动-启动输入，启用它，否则你得到的是空的音频文件。(在这上面折腾好久)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 三十行代码实现多人游戏</title>
      <link>/code/2024/030821-mplayer/</link>
      <pubDate>Fri, 08 Mar 2024 13:57:05 +0000</pubDate>
      <guid>/code/2024/030821-mplayer/</guid>
      <description>&lt;p&gt;看看别人的写的简单多人游戏代码 &lt;a href=&#34;https://www.bilibili.com/video/BV1aH4y167Lv/?spm_id_from=333.337.search-card.all.click&amp;amp;vd_source=b56d1c2a8432369e046076e4b0bad6fa&#34;&gt;B站视频&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://www.bilibili.com/video/BV1GF411D7q7/?spm_id_from=333.337.search-card.all.click&amp;amp;vd_source=b56d1c2a8432369e046076e4b0bad6fa&#34;&gt;B站上&lt;/a&gt;还有一个E文的无语音视频，似乎更简单，也可以借鉴理解。&lt;br&gt;&#xA;希望更简单的，可以直接跳到第二个示例&lt;/p&gt;&#xA;&lt;h1 id=&#34;示例1&#34;&gt;示例1&lt;/h1&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../030821-mplayer-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;主场景&#34;&gt;主场景&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../030821-mplayer-02.png&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;代码并不复杂&lt;/p&gt;&#xA;&lt;p&gt;MainScene关联代码&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;extends Node2D&#xA;@onready var players: Node = $Players&#xA;@onready var camera : Camera2D = $Camera2D&#xA;const PLAYER = preload(&amp;#34;res://player.tscn&amp;#34;)&#xA;var peer = ENetMultiplayerPeer.new()&#xA;&#xA;## 创建服务器&#xA;func _on_create_button_down() -&amp;gt; void:&#xA;&#x9;#创建监听的服务器,即创建了一个地址为 127.0.0.1:7788 的服务器&#xA;&#x9;var error = peer.create_server(7788)&#xA;&#x9;if error != OK:&#xA;&#x9;&#x9;printerr(&amp;#34;创建服务器失败, 错误码&amp;#34;, error)&#xA;&#x9;&#x9;return&#xA;&#x9;multiplayer.multiplayer_peer = peer   &#xA;&#x9;&#xA;&#x9;multiplayer.peer_connected.connect(_on_peer_connected)  # 监听连接事件&#xA;&#x9;add_player(multiplayer.get_unique_id())  # 服务端也创建一个玩家&#xA;&#xA;## 添加玩家到$Players节点下&#xA;func add_player(id: int) -&amp;gt; void:&#xA;&#x9;var player = PLAYER.instantiate()&#xA;&#x9;player.name = str(id)&#xA;&#x9;players.add_child(player)&#xA;&#xA;## 当有新的客户端连接时，该方法会被触发, 该方法只有主机端会被触发！&#xA;func _on_peer_connected(id: int) -&amp;gt; void:&#xA;&#x9;print(&amp;#34;有玩家连接，ID为&amp;#34;,id)&#x9;&#xA;&#x9;add_player(id) # 添加新玩家&#xA;&#xA;## 创建客户端连接&#xA;func _on_join_button_down() -&amp;gt; void:&#x9;&#xA;&#x9;peer.create_client(&amp;#34;127.0.0.1&amp;#34;, 7788)&#xA;&#x9;multiplayer.multiplayer_peer = peer&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Camera2D关联代码,主要是让镜头跟着玩家移动&lt;/p&gt;</description>
    </item>
    <item>
      <title>学习传奇游戏复刻记录</title>
      <link>/code/2024/030821-mir/</link>
      <pubDate>Fri, 08 Mar 2024 13:00:15 +0000</pubDate>
      <guid>/code/2024/030821-mir/</guid>
      <description>&lt;p&gt;2025.4.12&lt;/p&gt;&#xA;&lt;p&gt;忘了更新，此项目因为作者工作忙（借口？)，已暂停。个人择机再研究继续。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;跟着网友教程，使用Godot复刻传奇游戏。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/makeryangcom/Engine2D&#34;&gt;Github&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://git.scwy.net/ease/Engine2D&#34;&gt;我个人自动克隆的项目&lt;/a&gt;，每4小时自动一次。&lt;br&gt;&#xA;&lt;a href=&#34;https://www.makeryang.com/&#34;&gt;他的官方网址&lt;/a&gt; &lt;br&gt;&#xA;&lt;a href=&#34;https://space.bilibili.com/596334734/channel/collectiondetail?sid=2355967&#34;&gt;B站课程更新中&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;为了简单(懒)，并没有按教程一步步搭建环境，毕竟那不是重点，利用现在有的PVE开一个Ubuntu即可，何况各端都可以导出Win程序。&lt;br&gt;&#xA;为了更简单(更懒)，尽可以减少每次Github新代码后的修改，于是：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot的多线程</title>
      <link>/code/2024/030522-thread/</link>
      <pubDate>Tue, 05 Mar 2024 14:21:31 +0000</pubDate>
      <guid>/code/2024/030522-thread/</guid>
      <description>&lt;p&gt;Godot需要学习的几个点：网络、线程、着色器&lt;/p&gt;&#xA;&lt;h2 id=&#34;线程安全的api&#34;&gt;线程安全的API&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.godotengine.org/zh-cn/4.x/tutorials/performance/thread_safe_apis.html#doc-thread-safe-apis&#34;&gt;官方文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用多线程&#34;&gt;使用多线程&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.godotengine.org/zh-cn/4.x/tutorials/performance/using_multiple_threads.html&#34;&gt;官方文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;创建线程&#34;&gt;创建线程&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var thread: Thread&#xA;func _read():&#xA;    thread = Thread.new()&#xA;    thread.start(_thread_func.bind(&amp;#34;Waff&amp;#34;))&#xA;&#xA;func _thread_func(user):&#xA;    print(&amp;#34;我是一个线程，用户是:&amp;#34;,user)&#xA;&#xA;func _exit_tree():&#xA;    thread.wait_to_finish()&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;mutex&#34;&gt;Mutex&lt;/h3&gt;&#xA;&lt;p&gt;当从不同线程访问一个数据时, 一定要使用 Mutex&lt;br&gt;&#xA;Mutex.lock() 当其它线程试图锁同一个mutex时，就会阻塞，进入暂停状态；&lt;br&gt;&#xA;Mutex.unlock() 允许其它线程锁定&lt;/p&gt;</description>
    </item>
    <item>
      <title>自建Git服务器Gogs,同步Github库</title>
      <link>/it/2024/030520-git/</link>
      <pubDate>Tue, 05 Mar 2024 12:37:05 +0000</pubDate>
      <guid>/it/2024/030520-git/</guid>
      <description>&lt;p&gt;之前自建了一个&lt;a href=&#34;https://git.scwy.net/&#34;&gt;Git服务&lt;/a&gt;，主要还是个人用。代码不会丢，还可以随便(回)滚。&lt;/p&gt;&#xA;&lt;p&gt;经常想同步一些Github.com上的项目，今天稍作研究。至少能用了。&lt;/p&gt;&#xA;&lt;p&gt;先在帐号下建立好库名，然后使用类似以下脚本。可能第一次需要输入你的帐号密码存于系统中。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot加载超大型地图的解决探讨（学习更新中）</title>
      <link>/code/2024/030516-loadmap/</link>
      <pubDate>Tue, 05 Mar 2024 08:39:43 +0000</pubDate>
      <guid>/code/2024/030516-loadmap/</guid>
      <description>&lt;p&gt;有网友提出，当地图过大时，会导致加载时间过长，内存占用过大，以及较大的PCK包等问题。于是网上搜搜解决方法。&lt;/p&gt;&#xA;&lt;h3 id=&#34;1&#34;&gt;1&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/Yogoda/ZoneLoadingSystem&#34;&gt;在Github中&lt;/a&gt;，有网友的解决方法：将超大地图切分为几个区域，使用条件触发。&lt;br&gt;&#xA;也提到几个问题：需要手动的划分区域，且区域之间需要精心设计，以避免玩家看到“空”(未加载)区域。比如扭曲环境，使用“雾”来掩盖。在“两个场景”中切换时会更麻烦。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot使用ENetMultiplayerPeer实现的简单聊天室</title>
      <link>/code/2024/030419-chat/</link>
      <pubDate>Mon, 04 Mar 2024 11:34:02 +0000</pubDate>
      <guid>/code/2024/030419-chat/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../030419-chat-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;确实是比较简单，创建服务器，加入服务器。连接后，每次都会获取名字和内容。&lt;/p&gt;&#xA;&lt;p&gt;get_tree().set_multiplayer(SceneMultiplayer.new(),self.get_path()) 啥意思？不用也没啥区别。&lt;br&gt;&#xA;peer.get_host().compress(ENetConnection.COMPRESS_RANGE_CODER) 这个有效果吗？估计得人多才能有测试。&lt;br&gt;&#xA;为什么要在发送信息时使用 msg_rpc.rpc(my_name.text,send_message.text) ?  执行远程客户端上的msg()函数，并附带上当前的姓名和消息内容。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tweens: 制作简单动画</title>
      <link>/code/2024/030122-tween/</link>
      <pubDate>Fri, 01 Mar 2024 14:13:01 +0000</pubDate>
      <guid>/code/2024/030122-tween/</guid>
      <description>&lt;p&gt;Tweens是可以使用数学函数随时间修改其他对象的属性值的对象。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var tween : Tween = create_tween()&#xA;var tween : Tween = get_tree().create_tween().bind_node(self)   # 创建一个新的全局Tween对象&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;tween_property(object, property, final_val, duration)&lt;br&gt;&#xA;object:  目标对象&lt;br&gt;&#xA;property: 要更改的属性&lt;br&gt;&#xA;final_val: 最终值&lt;br&gt;&#xA;duration: 持续时间（秒）&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决 Gravatar 不能用的问题 及 StudyGolang 论坛的头像处理</title>
      <link>/code/2024/030116-avatar/</link>
      <pubDate>Fri, 01 Mar 2024 08:47:25 +0000</pubDate>
      <guid>/code/2024/030116-avatar/</guid>
      <description>&lt;p&gt;因为想建一个论坛，于是使用了StudyGolang。不知道为什么硬要使用七牛（就一个小破站，哪需要搞那么复杂，而且还没得选。）,又还涉及到 Gravatar 头像网站不能打开的问题(那些坐在办公室打游戏的脑壳有包)。&lt;/p&gt;</description>
    </item>
    <item>
      <title>传奇游戏的运营设计</title>
      <link>/other/2024/030110-hero/</link>
      <pubDate>Fri, 01 Mar 2024 02:33:29 +0000</pubDate>
      <guid>/other/2024/030110-hero/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;通过API引入沪深股市，允许游戏中炒股。&lt;br&gt;&#xA;可能会出现时间差的问题，导致部分人利用此漏洞。可考虑自行模拟股市，允许城主发行股票。&lt;/li&gt;&#xA;&lt;li&gt;通过API，允许与现实中的实体店互动（例如订餐、外卖）&lt;/li&gt;&#xA;&lt;li&gt;通过API，允许第三方与游戏中的人物聊天&lt;/li&gt;&#xA;&lt;li&gt;付费订制VIP专属形像&lt;/li&gt;&#xA;&lt;li&gt;付费在游戏中添加店面&lt;/li&gt;&#xA;&lt;li&gt;添加角色的个人说明功能，可以添加个人照片、介绍文字。（允许手机扫码后，通过手机上传）&lt;/li&gt;&#xA;&lt;li&gt;定制角色进入游戏时，全局语音和特色文字&lt;/li&gt;&#xA;&lt;li&gt;博彩系统&lt;/li&gt;&#xA;&lt;li&gt;游戏中广告位&lt;/li&gt;&#xA;&lt;li&gt;拍卖系统&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Godot关于网络(持续更新)</title>
      <link>/code/2024/022918-godot-net/</link>
      <pubDate>Thu, 29 Feb 2024 10:54:12 +0000</pubDate>
      <guid>/code/2024/022918-godot-net/</guid>
      <description>&lt;p&gt;收录关于Godot网络的方方面面，陆续增加.&lt;/p&gt;&#xA;&lt;h2 id=&#34;高级多人游戏&#34;&gt;高级多人游戏&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.godotengine.org/zh-cn/4.x/tutorials/networking/high_level_multiplayer.html&#34;&gt;官方原文链接&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# 客户端&#xA;var peer = ENetMultiplayerPeer.new()&#xA;peer.create_client(IP_ADDRESS, PORT)&#xA;multiplayer.multiplayer_peer = peer&#xA;&#xA;# 服务端&#xA;var peer = ENetMultiplayerPeer.new()&#xA;peer.create_server(PORT, MAX_CLIENTS)&#xA;multiplayer.multiplayer_peer = peer&#xA;&#xA;# 中止网络&#xA;multiplayer.multiplayer_peer = null&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;各客户端都会分配一个整数ID，服务端ID为1&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot浮动文字</title>
      <link>/code/2024/022911-float/</link>
      <pubDate>Thu, 29 Feb 2024 03:42:51 +0000</pubDate>
      <guid>/code/2024/022911-float/</guid>
      <description>&lt;p&gt;主场景中，鼠标左键点击则出现浮动文字&lt;br&gt;&#xA;&lt;img src=&#34;../022911-float-01.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;浮动文字场景：&lt;br&gt;&#xA;&lt;img src=&#34;../022911-float-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;代码:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;extends Node2D&#xA;&#xA;@export var text :String&#xA;@export var velocity = Vector2.ZERO&#xA;@export var gravity = Vector2.ZERO&#xA;@export var mass = 100&#xA;&#xA;func _ready():&#xA;&#x9;var tween = create_tween()&#xA;&#x9;#tween.tween_property($Label,&amp;#34;modulate&amp;#34;,Color($Label.modulate.r,$Label.modulate.g,$Label.modulate.b,0),1.0)&#xA;&#x9;$Label.scale = Vector2(0,0)&#xA;&#x9;$Label.text = text &#xA;&#x9;tween.tween_property($Label,&amp;#34;scale&amp;#34;,Vector2(1.0,1.0),1.0)&#xA;&#x9;tween.tween_property($Label,&amp;#34;scale&amp;#34;,Vector2(0.0,0.0),1.0).set_delay(0.8)&#xA;&#x9;tween.connect(&amp;#34;finished&amp;#34;,onTweenFinished)&#xA;&#xA;func _process(delta):&#xA;&#x9;velocity += gravity * mass * delta&#xA;&#x9;position += velocity * delta&#xA;&#xA;func onTweenFinished():&#xA;&#x9;queue_free()&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;主场景代码：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot ProjectSettings 获取工程设置</title>
      <link>/code/2024/022721-project_settings/</link>
      <pubDate>Tue, 27 Feb 2024 13:36:03 +0000</pubDate>
      <guid>/code/2024/022721-project_settings/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://docs.godotengine.org/zh-cn/4.x/classes/class_projectsettings.html&#34;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;这个对象常用于读取自定义游戏配置选项。&lt;/p&gt;&#xA;&lt;p&gt;例如用以下代码来获取项目名称：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ProjectSettings.get_setting(&amp;#34;application/config/name&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;项目描述：application/config/description&lt;br&gt;&#xA;版本信息：application/config/version&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 等待信息和协程 await</title>
      <link>/code/2024/022720-await/</link>
      <pubDate>Tue, 27 Feb 2024 12:51:33 +0000</pubDate>
      <guid>/code/2024/022720-await/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://docs.godotengine.org/zh-cn/4.x/tutorials/scripting/gdscript/gdscript_basics.html#awaiting-for-signals-or-coroutines&#34;&gt;原文链接&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;await&lt;/strong&gt; 关键字可以用来创建协程，会等待某个信号发出之后再继续执行下面的代码&lt;br&gt;&#xA;例如，要暂停代码执行，直到到用户按下某个按钮后才能继续往下执行剩余代码，你就可以这样写：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang获取网段内所有IP</title>
      <link>/code/2024/022621-ip/</link>
      <pubDate>Mon, 26 Feb 2024 13:11:35 +0000</pubDate>
      <guid>/code/2024/022621-ip/</guid>
      <description>&lt;p&gt;通过网关IP和掩码，获取本网段所有IP。通过“通义千问”搜索出来的不靠谱。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;net&amp;#34;&#xA;)&#xA;&#xA;// 获取同网段所有 IP 地址&#xA;func getIPsInRange(ipAddr string, subnetMask string) ([]string, error) {&#xA;&#x9;ip := net.ParseIP(ipAddr)&#xA;&#x9;mask := net.IPMask(net.ParseIP(subnetMask).To4())&#xA;&#xA;&#x9;// 获取 IP 地址所在的网络&#xA;&#x9;_, ipNet, err := net.ParseCIDR(fmt.Sprintf(&amp;#34;%s/%d&amp;#34;, ip, countBits(mask)))&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;return nil, err&#xA;&#x9;}&#xA;&#xA;&#x9;// 遍历网络中的 IP 地址&#xA;&#x9;ips := []string{}&#xA;&#x9;for {&#xA;&#x9;&#x9;ip = ip_inc(ip)&#xA;&#x9;&#x9;if ipNet.Contains(ip) == false {&#xA;&#x9;&#x9;&#x9;break&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;ips = append(ips, ip.String())&#xA;&#x9;}&#xA;&#xA;&#x9;return ips, nil&#xA;}&#xA;&#xA;// 计算子网掩码中的位数&#xA;func countBits(mask net.IPMask) int {&#xA;&#x9;count := 0&#xA;&#x9;for _, b := range mask {&#xA;&#x9;&#x9;for b &amp;gt; 0 {&#xA;&#x9;&#x9;&#x9;b &amp;amp;= (b - 1)&#xA;&#x9;&#x9;&#x9;count++&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;return count&#xA;}&#xA;&#xA;// IP地址加1的操作&#xA;func ip_inc(ip net.IP) net.IP {&#xA;&#x9;for j := len(ip) - 1; j &amp;gt;= 0; j-- {&#xA;&#x9;&#x9;ip[j]++&#xA;&#x9;&#x9;if ip[j] &amp;gt; 0 {&#xA;&#x9;&#x9;&#x9;break&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;return ip&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;ip := &amp;#34;192.168.8.0&amp;#34;&#xA;&#x9;mask := &amp;#34;255.255.255.0&amp;#34;&#xA;&#xA;&#x9;ips, err := getIPsInRange(ip, mask)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;Error:&amp;#34;, err)&#xA;&#x9;&#x9;return&#xA;&#x9;}&#xA;&#xA;&#x9;for _, ipStr := range ips {&#xA;&#x9;&#x9;fmt.Println(ipStr)&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Godot热更</title>
      <link>/code/2024/022520-godot/</link>
      <pubDate>Sun, 25 Feb 2024 12:17:52 +0000</pubDate>
      <guid>/code/2024/022520-godot/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../022520-godot-02.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;也不知道这算不算“热更”，流程如下：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Godot客户端启动后，获取服务端信息，判断版本是否相同，是否需要下载压缩包(pck)&lt;/li&gt;&#xA;&lt;li&gt;载入固定(或服务端指定)的启动场景运行。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Godot客户端只需要一个载入场景，且导出时包含到主程序中。这样我的客户端程序只有76.8MB，通过WinRar压缩为自解包，大小为22.2MB。已经足够小了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot下载数据</title>
      <link>/code/2024/022509-godot/</link>
      <pubDate>Sun, 25 Feb 2024 01:18:33 +0000</pubDate>
      <guid>/code/2024/022509-godot/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://godotengine.org/assets/home/foundation/godot-foundation-logo-dark.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;在Godot中实现下载更建议使用HttpClient，它不是控件。主要是在其它线程中进行下载，在_process()中显示进度。保存时使用 file.store_buffer。&lt;/p&gt;</description>
    </item>
    <item>
      <title>go代码的磁力文件下载</title>
      <link>/code/2024/022321-magnet/</link>
      <pubDate>Fri, 23 Feb 2024 13:37:39 +0000</pubDate>
      <guid>/code/2024/022321-magnet/</guid>
      <description>&lt;p&gt;网上示例较少，有需要研究，例如进度条之类&amp;hellip;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import &amp;#34;github.com/anacrolix/torrent&amp;#34;&#xA;&#xA;func main() {&#xA;&#x9;c, _ := torrent.NewClient(nil)&#xA;&#x9;t, _ := c.AddMagnet(&amp;#34;magnet:?xt=urn:btih:4418164d056abc248c4f0ba07c676ee01f3eb72d&amp;amp;dn=%e5%8f%a4%e6%a5%bc%e9%95%87%e9%99%b5%e5%ae%ab&amp;amp;tr=udp%3a%2f%2fopentracker.i2p.rocks%3a6969%2fannounce&amp;amp;tr=udp%3a%2f%2ftracker.altrosky.nl%3a6969%2fannounce&amp;#34;)&#xA;&#x9;&amp;lt;-t.GotInfo()&#xA;&#x9;t.DownloadAll()&#xA;&#x9;c.WaitAll()&#xA;&#x9;c.Close()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;通过BitComet制作BT文件并做种，获取到磁链。在制作BT文件中，估计是因为(联通)内网的原因，根本没有流量。在制作Torrent文件时，Web种子中添加一个可供Web下载的地址，做种成功。&lt;br&gt;&#xA;但看起来并未通过Web下载，还是通过种子机上传，不知道这样的意义何在。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go1.22的变化</title>
      <link>/code/2024/021908-go122/</link>
      <pubDate>Mon, 19 Feb 2024 00:35:38 +0000</pubDate>
      <guid>/code/2024/021908-go122/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://blog.csdn.net/EDDYCJY/article/details/136075923&#34; alt=&#34;网文介绍&#34;&gt; ，我只是作一些个人记录，并不全面。&lt;br&gt;&#xA;据说性能提升1-3%,内存占用减少1%。启用PGO(Profile-guided Optimization 配置文件引导优化)后，大多数程序的性能提高2%-14%&lt;/p&gt;</description>
    </item>
    <item>
      <title>Smb(samba)服务</title>
      <link>/code/2024/020110-smb/</link>
      <pubDate>Thu, 01 Feb 2024 02:40:59 +0000</pubDate>
      <guid>/code/2024/020110-smb/</guid>
      <description>&lt;p&gt;SMB（全称是Server Message Block）是一个网络协议名，协议实现文件共享，也称为CIFS（Common Internet File System ）。&lt;br&gt;&#xA;Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件。一般在linux/ubuntu上安装还是很简单的，配置也不复杂。但最近总是有问题，只能看看有没有golang实现的smb服务代码了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Harlequin 终端数据库管理工具</title>
      <link>/it/2024/013111-harlequin/</link>
      <pubDate>Wed, 31 Jan 2024 03:28:45 +0000</pubDate>
      <guid>/it/2024/013111-harlequin/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://harlequin.sh&#34;&gt;Harlequin&lt;/a&gt; 是基于终端进行数据库管理的工具。终端工具更适合于服务器这样的常命令行环境。&lt;br&gt;&#xA;它信赖于Python3.8或更高版本。应该是跨平台的。&lt;br&gt;&#xA;安装：pipx install harlequin&lt;br&gt;&#xA;自身只支持DuckDB(默认)和Sqlite数据库，其它数据库支持可以自行安装&lt;/p&gt;</description>
    </item>
    <item>
      <title>直接在html中使用vue3</title>
      <link>/code/2024/012217-html_vue/</link>
      <pubDate>Mon, 22 Jan 2024 09:14:36 +0000</pubDate>
      <guid>/code/2024/012217-html_vue/</guid>
      <description>&lt;p&gt;啥脚手架，啥npm，还是太复杂，针对只想在前端用vue的来说。&lt;/p&gt;&#xA;&lt;h3 id=&#34;基础h5&#34;&gt;基础H5&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&#xA;&amp;lt;html lang=&amp;#34;zh&amp;#34;&amp;gt;&#xA;&amp;lt;head&amp;gt;&#xA;    &amp;lt;meta charset=&amp;#34;UTF-8&amp;#34;&amp;gt;&#xA;    &amp;lt;meta name=&amp;#34;viewport&amp;#34; content=&amp;#34;width=device-width, initial-scale=1.0&amp;#34;&amp;gt;&#xA;    &amp;lt;title&amp;gt;网页&amp;lt;/title&amp;gt;&#xA;&amp;lt;/head&amp;gt;&#xA;&amp;lt;body&amp;gt;&#xA;&amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;引入vue3&#34;&gt;引入vue3&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;script src=&amp;#34;https://unpkg.com/vue@3/dist/vue.global.js&amp;#34;&amp;gt;&amp;lt;/script&amp;gt;&#xA;&#xA;&amp;lt;div id=&amp;#34;app&amp;#34;&amp;gt;{{ message }}&amp;lt;/div&amp;gt;&#xA;&#xA;&amp;lt;script&amp;gt;&#xA;  const { createApp, ref } = Vue&#xA;&#xA;  createApp({&#xA;    setup() {&#xA;      const message = ref(&amp;#39;Hello vue!&amp;#39;)&#xA;      return {&#xA;        message&#xA;      }&#xA;    }&#xA;  }).mount(&amp;#39;#app&amp;#39;)&#xA;&amp;lt;/script&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;压缩过的js&lt;/p&gt;</description>
    </item>
    <item>
      <title>静态文件之电影播放</title>
      <link>/code/2024/012111-movie/</link>
      <pubDate>Sun, 21 Jan 2024 03:36:37 +0000</pubDate>
      <guid>/code/2024/012111-movie/</guid>
      <description>&lt;p&gt;这是一个电影播放的静态文件服务器，缘于那台不好安装软件的Arm Win11：不少的视频软件都不支持WinArm版。那就直接在浏览器里播放就好。而实际上有些浏览器点击就下载。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Vue快速学习</title>
      <link>/code/2024/011716-vue/</link>
      <pubDate>Wed, 17 Jan 2024 08:06:54 +0000</pubDate>
      <guid>/code/2024/011716-vue/</guid>
      <description>&lt;p&gt;上篇&lt;a href=&#34;https://i.scwy.net/it/2024/011616-nodejs/&#34;&gt;Node.js的光速入门&lt;/a&gt;{:target=&amp;quot;_blank&amp;quot;}是为了学习VUE，而学VUE其实是为了学习UNIApp。嗯，有点套娃的感觉。或许还要返回去学学TypeScript。&lt;br&gt;&#xA;其实&lt;a href=&#34;https://i.scwy.net/it/2021/121821-uniapp/&#34;&gt;2021就有关于uve3的学习&lt;/a&gt;{:target=&amp;quot;_blank&amp;quot;}，这里算是复习，没咋用就会忘。这次结合视频讲座快速的再入门。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://cn.vuejs.org/&#34;&gt;官网https://cn.vuejs.org/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;基础项目&#34;&gt;基础项目&lt;/h3&gt;&#xA;&lt;p&gt;创建：npm init vue@latest&lt;br&gt;&#xA;安装相关：npm install&lt;br&gt;&#xA;运行：npm run dev&lt;/p&gt;&#xA;&lt;p&gt;或者使用cnpm: 安装cnpm：npm install -g cnpm &amp;ndash;registry=https://registry.npm.taobao.org&lt;/p&gt;&#xA;&lt;h3 id=&#34;净身&#34;&gt;净身&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../011716-vue-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;把不必要的删除掉，主要就是src目录app.vue和main.js，assets放一些静态文件，package.json为node.js配置，vite.config.js为vue配置&lt;/p&gt;</description>
    </item>
    <item>
      <title>Node.js光速入门再出门</title>
      <link>/it/2024/011616-nodejs/</link>
      <pubDate>Tue, 16 Jan 2024 08:53:39 +0000</pubDate>
      <guid>/it/2024/011616-nodejs/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://nodejs.org/static/images/logo.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://nodejs.org/&#34;&gt;Node.js官网&lt;/a&gt;  &lt;a href=&#34;https://nodejs.org/en/learn/getting-started/introduction-to-nodejs&#34;&gt;文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;现在才来看Node.js有点晚，到处都可以见到它的踪迹。不过快速的学习一下也没啥问题，不指它当主力。当前最新21.6.0。&lt;br&gt;&#xA;Node.js 是能够在服务端运行JavaScript的开放源代码、跨平台执行环境。Node.js 在浏览器之外运行 V8 JavaScript 引擎，这是 Google Chrome 的核心。这使得 Node.js 的性能非常高。&lt;br&gt;&#xA;简单来说，就是把javascript作为后端语言，脱离了它原来只在网页上干的那点事。&lt;br&gt;&#xA;看起来，也可以通过一些工具来打包为可执行文件：https://github.com/nexe/nexe&lt;/p&gt;</description>
    </item>
    <item>
      <title>农村综合服务平台(思考)</title>
      <link>/other/2024/011612-countryside/</link>
      <pubDate>Tue, 16 Jan 2024 04:09:43 +0000</pubDate>
      <guid>/other/2024/011612-countryside/</guid>
      <description>&lt;h3 id=&#34;城市套路深我要回农村&#34;&gt;城市套路深，我要回农村。&lt;/h3&gt;&#xA;&lt;p&gt;现在的农村现状是：大量的老弱病残和部份“出不去”的人员。这里的大量是指的比例。大量的撂荒，因为老人小孩子劳动能力有限。或许这主要是指的四川这种丘陵地区，不适合大面积耕种的地区。&lt;/p&gt;</description>
    </item>
    <item>
      <title>VSCode插件及技巧收集（持续更新）</title>
      <link>/it/2024/011611-vscode/</link>
      <pubDate>Tue, 16 Jan 2024 03:07:28 +0000</pubDate>
      <guid>/it/2024/011611-vscode/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://code.visualstudio.com/favicon.ico&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;技巧&#34;&gt;技巧&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;增大资源管理器目录缩进层级区分&lt;br&gt;&#xA;&lt;img src=&#34;../011611-vscode-01.png&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;Ctrl+,打开设置，搜索tree，将Workbench&amp;gt;Tree项增大，比如16。&lt;br&gt;&#xA;&lt;img src=&#34;../011611-vscode-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>更换GORM默认的SQLite驱动</title>
      <link>/code/2024/011414-sqlite/</link>
      <pubDate>Sun, 14 Jan 2024 06:40:23 +0000</pubDate>
      <guid>/code/2024/011414-sqlite/</guid>
      <description>&lt;p&gt;原文：https://blog.xiaoz.org/archives/18195&lt;/p&gt;&#xA;&lt;p&gt;在使用GORM中，当使用sqlite作数据库时，跨平台编译会存在问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Caddy如何将指定类型文件跳转到指定服务器</title>
      <link>/it/2024/011210-caddy/</link>
      <pubDate>Fri, 12 Jan 2024 02:44:19 +0000</pubDate>
      <guid>/it/2024/011210-caddy/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://caddyserver.com/resources/images/logo-dark.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;需求是：在Caddy服务器下，指定某些类型的文件（例如图片、视频）请求，转发到指定服务器。指定服务器还可以通过Caddy实现均衡负载。&lt;/p&gt;&#xA;&lt;p&gt;这样的目的是将主服务和高带宽服务分开。&lt;/p&gt;</description>
    </item>
    <item>
      <title>移动之家</title>
      <link>/other/2024/011111-moveroom/</link>
      <pubDate>Thu, 11 Jan 2024 03:41:53 +0000</pubDate>
      <guid>/other/2024/011111-moveroom/</guid>
      <description>&lt;p&gt;移动之家，嗯，MoveHome，这英文，真不错。似乎应该“Mobile Home”&lt;br&gt;&#xA;刚看了些房车类的视频，于是又开始乱想。&lt;br&gt;&#xA;这是有别于房车的想法，只是想一个可以移动的家。类似于&lt;a href=&#34;https://i.scwy.net/other/2019/101018-fang/&#34;&gt;这种感觉&lt;/a&gt;&lt;br&gt;&#xA;&lt;img src=&#34;/other/2019/101018-fang-01.gif&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;它这个还是结构太复杂&lt;/p&gt;</description>
    </item>
    <item>
      <title>uniapp安卓修改再打包</title>
      <link>/it/2024/011011-apkbuild/</link>
      <pubDate>Wed, 10 Jan 2024 03:14:05 +0000</pubDate>
      <guid>/it/2024/011011-apkbuild/</guid>
      <description>&lt;p&gt;最近需要一个安卓应用，无奈看看UNI。&lt;br&gt;&#xA;有个需求是：通过扫码安装，且能识别来源途径。在微信小程序中很简单，因为微信做了这个事：二维码包括了来源参数，并将其传入小程序。&lt;br&gt;&#xA;自已做的APP如何实现呢？一个无奈的办法就是生成若干APK。不同的来源通过二维码扫码后，返回的是不同的APK。&lt;br&gt;&#xA;这样就会存在较多的APK生成，代码基本完全相同，除了标识代码。所以就需要一个自动修改标识代码，自动生成APK的工具。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot命令行导出</title>
      <link>/code/2024/010322-godot_out/</link>
      <pubDate>Wed, 03 Jan 2024 14:53:48 +0000</pubDate>
      <guid>/code/2024/010322-godot_out/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://godotengine.org/assets/home/foundation/godot-foundation-logo-dark.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;对于我这种视觉动物，需要对效果进行频繁的调试、查看，但UI界面上的操作太多，累死。&lt;/p&gt;&#xA;&lt;p&gt;这里是godot命令行导出的指令。我这里是导出Android。前提是已配置好Android导出各项，能在UI中正常导出。&lt;/p&gt;</description>
    </item>
    <item>
      <title>科学家利用分子振动消灭 99% 的癌细胞</title>
      <link>/health/2024/010109-vibrating/</link>
      <pubDate>Mon, 01 Jan 2024 01:56:02 +0000</pubDate>
      <guid>/health/2024/010109-vibrating/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.sciencealert.com/images/2023/09/CancerCellsRedOnBlueBackground1042x415.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;源地址：&lt;br&gt;&#xA;&lt;a href=&#34;https://www.sciencealert.com/scientists-destroy-99-of-cancer-cells-in-the-lab-using-vibrating-molecules&#34;&gt;Scientists Destroy 99% of Cancer Cells in The Lab Using Vibrating Molecules&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://www.nature.com/articles/s41557-023-01383-y&#34;&gt;Molecular jackhammers eradicate cancer cells by vibronic-driven action&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;科学家发现了一种利用近红外光刺激氨基花青(aminocyanine）分子分解癌细胞膜的方法。研究报告发表在《Nature Chemistry》期刊上。研究人员将他们的分子机器称为“分子手提钻”，其机械运动速度是另一种光分子机器 Feringa 型马达的百万倍。Feringa 型马达由 Ben Feringa 发明，他因此在 2016 年赢得诺贝尔化学奖。对实验室培养的癌细胞的测试显示，其破坏细胞的命中率高达 99%。对患有黑色素瘤小鼠的实验结果显示，半数不再复发。氨基花青分子能保持稳定，可吸附在癌细胞表面，然后用近红外光刺激振动破坏细胞膜。&lt;/p&gt;</description>
    </item>
    <item>
      <title>设置系统代理</title>
      <link>/code/2023/123121-proxy/</link>
      <pubDate>Sun, 31 Dec 2023 13:04:58 +0000</pubDate>
      <guid>/code/2023/123121-proxy/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/anfragment/zen&#34;&gt;Zen&lt;/a&gt;是一个过滤广告的软件，就是一个Web代理，所有请求经过它，它会判断是否为广告。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../123121-proxy-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;原本只是想汉化一下，它是使用的 Wails。发现它的设置系统代理的代码，位于 proxy 目录下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Windows设置代理&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;log&amp;#34;&#xA;&#xA;&#x9;&amp;#34;golang.org/x/sys/windows&amp;#34;&#xA;&#x9;&amp;#34;golang.org/x/sys/windows/registry&amp;#34;&#xA;)&#xA;&#xA;var (&#xA;&#x9;wininet                          = windows.NewLazySystemDLL(&amp;#34;wininet.dll&amp;#34;)&#xA;&#x9;internetSetOption                = wininet.NewProc(&amp;#34;InternetSetOptionW&amp;#34;)&#xA;&#x9;INTERNET_OPTION_SETTINGS_CHANGED = 39&#xA;&#x9;INTERNET_OPTION_REFRESH          = 37&#xA;)&#xA;&#xA;func (p *Proxy) setSystemProxy() error {&#xA;&#x9;k, err := registry.OpenKey(registry.CURRENT_USER, `Software\Microsoft\Windows\CurrentVersion\Internet Settings`, registry.ALL_ACCESS)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;return err&#xA;&#x9;}&#xA;&#x9;defer k.Close()&#xA;&#xA;&#x9;if err := k.SetDWordValue(&amp;#34;ProxyEnable&amp;#34;, 1); err != nil {&#xA;&#x9;&#x9;return err&#xA;&#x9;}&#xA;&#xA;&#x9;if err := k.SetStringValue(&amp;#34;ProxyServer&amp;#34;, fmt.Sprintf(&amp;#34;%s:%d&amp;#34;, &amp;#34;127.0.0.1&amp;#34;, p.port)); err != nil {&#xA;&#x9;&#x9;if err := k.SetDWordValue(&amp;#34;ProxyEnable&amp;#34;, 0); err != nil {&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;failed to disable proxy during error handling: %v&amp;#34;, err)&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;return err&#xA;&#x9;}&#xA;&#xA;&#x9;callInternetSetOption(INTERNET_OPTION_SETTINGS_CHANGED)&#xA;&#x9;callInternetSetOption(INTERNET_OPTION_REFRESH)&#xA;&#xA;&#x9;return nil&#xA;}&#xA;&#xA;func (p *Proxy) unsetSystemProxy() error {&#xA;&#x9;k, err := registry.OpenKey(registry.CURRENT_USER, `Software\Microsoft\Windows\CurrentVersion\Internet Settings`, registry.ALL_ACCESS)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;return err&#xA;&#x9;}&#xA;&#x9;defer k.Close()&#xA;&#xA;&#x9;if err := k.SetDWordValue(&amp;#34;ProxyEnable&amp;#34;, 0); err != nil {&#xA;&#x9;&#x9;return err&#xA;&#x9;}&#xA;&#xA;&#x9;callInternetSetOption(INTERNET_OPTION_SETTINGS_CHANGED)&#xA;&#x9;callInternetSetOption(INTERNET_OPTION_REFRESH)&#xA;&#xA;&#x9;return nil&#xA;}&#xA;&#xA;func callInternetSetOption(dwOption int) {&#xA;&#x9;ret, _, err := internetSetOption.Call(0, uintptr(dwOption), 0, 0)&#xA;&#x9;if ret == 0 {&#xA;&#x9;&#x9;log.Printf(&amp;#34;failed to call InternetSetOption with option %d: %v&amp;#34;, dwOption, err)&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Linux设置代理&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;os/exec&amp;#34;&#xA;&#x9;&amp;#34;strings&amp;#34;&#xA;)&#xA;func (p *Proxy) setSystemProxy() error {&#xA;&#x9;if binaryExists(&amp;#34;gsettings&amp;#34;) {&#xA;&#x9;&#x9;commands := [][]string{&#xA;&#x9;&#x9;&#x9;[]string{&amp;#34;gsettings&amp;#34;, &amp;#34;set&amp;#34;, &amp;#34;org.gnome.system.proxy&amp;#34;, &amp;#34;mode&amp;#34;, &amp;#34;manual&amp;#34;},&#xA;&#x9;&#x9;&#x9;[]string{&amp;#34;gsettings&amp;#34;, &amp;#34;set&amp;#34;, &amp;#34;org.gnome.system.proxy.http&amp;#34;, &amp;#34;host&amp;#34;, &amp;#34;127.0.0.1&amp;#34;},&#xA;&#x9;&#x9;&#x9;[]string{&amp;#34;gsettings&amp;#34;, &amp;#34;set&amp;#34;, &amp;#34;org.gnome.system.proxy.http&amp;#34;, &amp;#34;port&amp;#34;, fmt.Sprint(p.port)},&#xA;&#x9;&#x9;&#x9;[]string{&amp;#34;gsettings&amp;#34;, &amp;#34;set&amp;#34;, &amp;#34;org.gnome.system.proxy.https&amp;#34;, &amp;#34;host&amp;#34;, &amp;#34;127.0.0.1&amp;#34;},&#xA;&#x9;&#x9;&#x9;[]string{&amp;#34;gsettings&amp;#34;, &amp;#34;set&amp;#34;, &amp;#34;org.gnome.system.proxy.https&amp;#34;, &amp;#34;port&amp;#34;, fmt.Sprint(p.port)},&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;for _, command := range commands {&#xA;&#x9;&#x9;&#x9;cmd := exec.Command(command[0], command[1:]...)&#xA;&#x9;&#x9;&#x9;out, err := cmd.CombinedOutput()&#xA;&#x9;&#x9;&#x9;if err != nil {&#xA;&#x9;&#x9;&#x9;&#x9;return fmt.Errorf(&amp;#34;%s: %v\n%s&amp;#34;, strings.Join(command, &amp;#34; &amp;#34;), err, out)&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;return nil&#xA;&#x9;}&#xA;&#x9;// TODO: add support for other desktop environments&#xA;&#xA;&#x9;return fmt.Errorf(&amp;#34;system proxy configuration is currently only supported on GNOME&amp;#34;)&#xA;}&#xA;&#xA;func (p *Proxy) unsetSystemProxy() error {&#xA;&#x9;command := []string{&amp;#34;gsettings&amp;#34;, &amp;#34;set&amp;#34;, &amp;#34;org.gnome.system.proxy&amp;#34;, &amp;#34;mode&amp;#34;, &amp;#34;none&amp;#34;}&#xA;&#x9;cmd := exec.Command(command[0], command[1:]...)&#xA;&#x9;out, err := cmd.CombinedOutput()&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;return fmt.Errorf(&amp;#34;%s: %v\n%s&amp;#34;, strings.Join(command, &amp;#34; &amp;#34;), err, out)&#xA;&#x9;}&#xA;&#xA;&#x9;return nil&#xA;}&#xA;&#xA;func binaryExists(name string) bool {&#xA;&#x9;_, err := exec.LookPath(name)&#xA;&#x9;return err == nil&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>孩子，我想告诉你</title>
      <link>/teach/2023/123018-totalk/</link>
      <pubDate>Sat, 30 Dec 2023 10:41:14 +0000</pubDate>
      <guid>/teach/2023/123018-totalk/</guid>
      <description>&lt;p&gt;作为一个父亲，对孩子的爱是刻在基因里里，想把那些自己走过的山路告诉你。&lt;/p&gt;&#xA;&lt;p&gt;我想此文章也像其它一样，持续更新，随想随写。即使不太成章法，但只要有一两点能够有所作用，那也好过自己亲自踩坑。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Github等网站代理下载服务</title>
      <link>/it/2023/123017-proxydown/</link>
      <pubDate>Sat, 30 Dec 2023 09:17:09 +0000</pubDate>
      <guid>/it/2023/123017-proxydown/</guid>
      <description>&lt;p&gt;受国情影响，github.com是一阵一阵的犯病，能不能开全靠运气。昨天临时开通了一个月的香港服务器，把它作了一个代理下载站：&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pd.scwy.net&#34;&gt;代理下载 https://pd.scwy.net&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../123017-proxydown-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wails当前2.7.0</title>
      <link>/code/2023/122522-wails/</link>
      <pubDate>Mon, 25 Dec 2023 14:02:50 +0000</pubDate>
      <guid>/code/2023/122522-wails/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://wails.io/img/wails-logo-horizontal-dark.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://i.scwy.net/tags/wails/&#34;&gt;之前也多次介绍过Wails&lt;/a&gt;，它是一个利用WebView的Go库。当前版本来到了2.7.0，&lt;a href=&#34;https://wails.io&#34;&gt;官网地址&lt;/a&gt;也变了(&lt;a href=&#34;https://wails.io&#34;&gt;https://wails.io&lt;/a&gt;)，害得我一通找。&lt;br&gt;&#xA;电脑上的版本还是2.5.1，go install github.com/wailsapp/wails/v2/cmd/wails@latest 更新一下工具。用 wails doctor 检查运行环境。&lt;/p&gt;</description>
    </item>
    <item>
      <title>博客绑定个人微信收款新方法</title>
      <link>/it/2023/122401-pay/</link>
      <pubDate>Sat, 23 Dec 2023 17:49:35 +0000</pubDate>
      <guid>/it/2023/122401-pay/</guid>
      <description>&lt;p&gt;之前采用的方式为通过较早的网页版微信协议，此协议使用时间不久被逐渐禁用，表现为小部份老微信可能登陆。因此使用可能是受到限制的。&lt;br&gt;&#xA;将收费功能嵌入Hugo静态博客的思路为：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Qrcp 文件传输工具及应用</title>
      <link>/it/2023/122320-qrcp/</link>
      <pubDate>Sat, 23 Dec 2023 12:56:56 +0000</pubDate>
      <guid>/it/2023/122320-qrcp/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://qrcp.sh/&#34;&gt;QRCP&lt;/a&gt;是一个命令行工具，用于分享自己的文件或文件夹。为了方便，它会在命令行上显示一个二维码，不需要你输入地址，即可在浏览器中下载分享的文件。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://qrcp.sh/img/screenshot.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;其实原理很简单，也是golang写的，因此跨平台可用。它随机生成一个端口号及地址，提供给第三方下载。它自包含客户端，使它下载可以无需浏览器。&lt;/p&gt;</description>
    </item>
    <item>
      <title>树莓派Pi0可用的中文TTS方案</title>
      <link>/it/2023/112519-tts/</link>
      <pubDate>Sat, 25 Nov 2023 11:23:18 +0000</pubDate>
      <guid>/it/2023/112519-tts/</guid>
      <description>&lt;p&gt;在Pi Zero 2的Raspbian系统，找了几个离线TTS软件都未成功。英文比较容易，要TTS中文就要麻烦些。&lt;/p&gt;&#xA;&lt;p&gt;这次成功的是使用了edge-tts生成中文音频，它包含了几种中文语音，且安装简单:&lt;/p&gt;</description>
    </item>
    <item>
      <title>语音唤醒</title>
      <link>/code/2023/112311-wake/</link>
      <pubDate>Thu, 23 Nov 2023 03:00:25 +0000</pubDate>
      <guid>/code/2023/112311-wake/</guid>
      <description>&lt;p&gt;语音唤醒是各智能音箱都在使用的，是当前人机语音交互的开始。之前使用的 snowboy ,似乎已“牺牲”，刚使用PicoVoice。比较可惜的是它还不支持中文，不过我想只使用它的唤醒，那也足够了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>碎碎念(保持更新:2025.8.18)</title>
      <link>/other/2023/111618-talk/</link>
      <pubDate>Thu, 16 Nov 2023 10:28:33 +0000</pubDate>
      <guid>/other/2023/111618-talk/</guid>
      <description>&lt;p&gt;这里只是随时想到、记录下来的一些“零碎”，可能是想法、思考与所见或报怨。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;AI将何去何从？人类命运是否就此改变？下一代将面临怎么样的竞争？教育系统的转变是不可能跟上时代变化的，而身处传统教育中，如何才能有所突破，让下一代有所不同，适应巨大的变化。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mqtt服务器 Broker</title>
      <link>/it/2023/111422-mqtt/</link>
      <pubDate>Tue, 14 Nov 2023 14:15:35 +0000</pubDate>
      <guid>/it/2023/111422-mqtt/</guid>
      <description>&lt;p&gt;使用&lt;a href=&#34;https://github.com/fhmq/hmq&#34;&gt;HMQ&lt;/a&gt;建立了一个MQTT服务器，然后建立一个客户端，看看推送和获取。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;log&amp;#34;&#xA;&#x9;&amp;#34;os&amp;#34;&#xA;&#x9;&amp;#34;os/signal&amp;#34;&#xA;&#x9;&amp;#34;time&amp;#34;&#xA;&#xA;&#x9;MQTT &amp;#34;github.com/eclipse/paho.mqtt.golang&amp;#34;&#xA;)&#xA;&#xA;var (&#xA;&#x9;server = &amp;#34;scwy.net&amp;#34;&#xA;&#x9;port   = &amp;#34;1884&amp;#34;&#xA;&#x9;uid    = &amp;#34;Ease&amp;#34;&#xA;&#x9;topic  = &amp;#34;Ease001&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;// 创建 MQTT 客户端配置&#xA;&#x9;opts := MQTT.NewClientOptions()&#xA;&#x9;opts.AddBroker(fmt.Sprintf(&amp;#34;tcp://%s:%s&amp;#34;, server, port))&#xA;&#x9;opts.SetClientID(uid)&#xA;&#x9;// 创建 MQTT 客户端实例&#xA;&#x9;client := MQTT.NewClient(opts)&#xA;&#x9;// 连接到 MQTT 服务器&#xA;&#x9;if token := client.Connect(); token.Wait() &amp;amp;&amp;amp; token.Error() != nil {&#xA;&#x9;&#x9;log.Fatal(token.Error())&#xA;&#x9;}&#xA;&#x9;// 在连接成功后进行订阅和发布操作&#xA;&#x9;go func() {&#xA;&#x9;&#x9;// 订阅主题&#xA;&#x9;&#x9;if token := client.Subscribe(topic, 0, func(c MQTT.Client, m MQTT.Message) {&#xA;&#x9;&#x9;&#x9;fmt.Printf(&amp;#34;主题 %s 反馈信息:  %s \n&amp;#34;, m.Topic(), m.Payload())&#xA;&#x9;&#x9;}); token.Wait() &amp;amp;&amp;amp; token.Error() != nil {&#xA;&#x9;&#x9;&#x9;log.Fatal(token.Error())&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;// 发布消息&#xA;&#x9;&#x9;for i := 0; i &amp;lt; 3; i++ {&#xA;&#x9;&#x9;&#x9;text := fmt.Sprintf(&amp;#34;信息%d&amp;#34;, i)&#xA;&#x9;&#x9;&#x9;token := client.Publish(topic, 0, false, text)&#xA;&#x9;&#x9;&#x9;token.Wait()&#xA;&#x9;&#x9;&#x9;fmt.Println(&amp;#34;发布:&amp;#34;, text)&#xA;&#x9;&#x9;&#x9;time.Sleep(time.Second)&#xA;&#x9;&#x9;}&#xA;&#x9;}()&#xA;&#x9;// 等待退出信号&#xA;&#x9;c := make(chan os.Signal, 1)&#xA;&#x9;signal.Notify(c, os.Interrupt)&#xA;&#x9;&amp;lt;-c&#xA;&#x9;// 断开与 MQTT 服务器的连接&#xA;&#x9;client.Disconnect(250)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>玩软件&#39;神秘鸭&#39;,学习思路</title>
      <link>/it/2023/111010-ai/</link>
      <pubDate>Fri, 10 Nov 2023 02:25:31 +0000</pubDate>
      <guid>/it/2023/111010-ai/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://wequ.net/logo.webp&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;刚看到一款软件“&lt;a href=&#34;https://wequ.net/cn/&#34;&gt;神秘鸭&lt;/a&gt;”，主要用于通过语音软/硬件连接或执行一些指令。&lt;/p&gt;&#xA;&lt;h3 id=&#34;使用及原理&#34;&gt;使用及原理：&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;服务器上注册帐号并添加自己的指令，获取到一个访问地址(类似API，任何人皆可访问喔，看起来它是通过复杂度来解决被猜解的)&lt;/li&gt;&#xA;&lt;li&gt;手机或者硬件通过访问以上地址，将指令请求通过服务器下发到各用户客户端&lt;/li&gt;&#xA;&lt;li&gt;各用户客户端执行相应命令/功能&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;手机小爱同学实现控制&#34;&gt;手机小爱同学实现控制&lt;/h3&gt;&#xA;&lt;p&gt;需要添加语音指令，访问以上提到的网址&lt;/p&gt;</description>
    </item>
    <item>
      <title>手动安装esp32的arduino环境</title>
      <link>/it/2023/110916-esp32/</link>
      <pubDate>Thu, 09 Nov 2023 08:51:28 +0000</pubDate>
      <guid>/it/2023/110916-esp32/</guid>
      <description>&lt;p&gt;众所周知的原因，github.com下载东西，速度得看命。&lt;/p&gt;&#xA;&lt;p&gt;今天又在新版arduino上安装esp32环境，大致方法如下：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;下载arduino&lt;/li&gt;&#xA;&lt;li&gt;git整个esp32环境:&#xA;git clone &lt;a href=&#34;https://github.com/espressif/arduino-esp32.git&#34;&gt;https://github.com/espressif/arduino-esp32.git&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;下载工具包&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;看资源包：C:\Users\xxx\AppData\Local\Arduino15\packages\arduino\hardware\esp32\xx.xx.xx\package中的 package_esp32_index.template.json 文件，它指出我应该下载哪些文件&lt;br&gt;&#xA;我的运行环境是：x86_64-mingw32&lt;br&gt;&#xA;手动下载zip到C:\Users\xxx\AppData\Local\Arduino15\packages\arduino\hardware\esp32\xx.xx.xx\tools\dist目录中&lt;br&gt;&#xA;列如：https://codeload.github.com/espressif/esp32-arduino-libs/zip/91077b905f50a66c4ecfae2fd5070530c932e97f 下载到 dist 目录下为 esp32-arduino-libs-91077b905f50a66c4ecfae2fd5070530c932e97f.zip 文件，下载后将自动解压。&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/espressif/crosstool-NG/releases/download/esp-12.2.0_20230208/xtensa-esp32-elf-12.2.0_20230208-x86_64-w64-mingw32.zip&#34;&gt;https://github.com/espressif/crosstool-NG/releases/download/esp-12.2.0_20230208/xtensa-esp32-elf-12.2.0_20230208-x86_64-w64-mingw32.zip&lt;/a&gt; 下载为 xtensa-esp32-elf-12.2.0_20230208-x86_64-w64-mingw32.zip&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/espressif/crosstool-NG/releases/download/esp-12.2.0_20230208/xtensa-esp32s2-elf-12.2.0_20230208-x86_64-w64-mingw32.zip&#34;&gt;https://github.com/espressif/crosstool-NG/releases/download/esp-12.2.0_20230208/xtensa-esp32s2-elf-12.2.0_20230208-x86_64-w64-mingw32.zip&lt;/a&gt; 下载为  xtensa-esp32s2-elf-12.2.0_20230208-x86_64-w64-mingw32.zip&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/espressif/crosstool-NG/releases/download/esp-12.2.0_20230208/xtensa-esp32s3-elf-12.2.0_20230208-x86_64-w64-mingw32.zip&#34;&gt;https://github.com/espressif/crosstool-NG/releases/download/esp-12.2.0_20230208/xtensa-esp32s3-elf-12.2.0_20230208-x86_64-w64-mingw32.zip&lt;/a&gt; 下载为  xtensa-esp32s3-elf-12.2.0_20230208-x86_64-w64-mingw32.zip&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/espressif/binutils-gdb/releases/download/esp-gdb-v12.1_20221002/xtensa-esp-elf-gdb-12.1_20221002-x86_64-w64-mingw32.zip&#34;&gt;https://github.com/espressif/binutils-gdb/releases/download/esp-gdb-v12.1_20221002/xtensa-esp-elf-gdb-12.1_20221002-x86_64-w64-mingw32.zip&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/espressif/crosstool-NG/releases/download/esp-12.2.0_20230208/riscv32-esp-elf-12.2.0_20230208-x86_64-w64-mingw32.zip&#34;&gt;https://github.com/espressif/crosstool-NG/releases/download/esp-12.2.0_20230208/riscv32-esp-elf-12.2.0_20230208-x86_64-w64-mingw32.zip&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/espressif/binutils-gdb/releases/download/esp-gdb-v12.1_20221002/riscv32-esp-elf-gdb-12.1_20221002-x86_64-w64-mingw32.zip&#34;&gt;https://github.com/espressif/binutils-gdb/releases/download/esp-gdb-v12.1_20221002/riscv32-esp-elf-gdb-12.1_20221002-x86_64-w64-mingw32.zip&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/espressif/openocd-esp32/releases/download/v0.12.0-esp32-20230419/openocd-esp32-win32-0.12.0-esp32-20230419.zip&#34;&gt;https://github.com/espressif/openocd-esp32/releases/download/v0.12.0-esp32-20230419/openocd-esp32-win32-0.12.0-esp32-20230419.zip&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/espressif/arduino-esp32/releases/download/2.0.9/esptool-v4.6-win64.zip&#34;&gt;https://github.com/espressif/arduino-esp32/releases/download/2.0.9/esptool-v4.6-win64.zip&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/earlephilhower/esp-quick-toolchain/releases/download/3.0.0-gnu12/x86_64-w64-mingw32.mklittlefs-c41e51a.200706.zip&#34;&gt;https://github.com/earlephilhower/esp-quick-toolchain/releases/download/3.0.0-gnu12/x86_64-w64-mingw32.mklittlefs-c41e51a.200706.zip&lt;/a&gt;&lt;br&gt;&#xA;还有这个：https://github.com/igrr/mkspiffs/releases/download/0.2.3/mkspiffs-0.2.3-arduino-esp32-win32.zip&lt;br&gt;&#xA;也就是把所有x86_64-mingw32环境对应的工具都下载到本地解压。&lt;br&gt;&#xA;到&lt;a href=&#34;https://d.serctl.com/&#34;&gt;这里 https://d.serctl.com/&lt;/a&gt;手动下载到dist中，再运行get.exe。&lt;/p&gt;</description>
    </item>
    <item>
      <title>树莓派Pi4的频率</title>
      <link>/it/2023/110710-pi/</link>
      <pubDate>Tue, 07 Nov 2023 02:44:35 +0000</pubDate>
      <guid>/it/2023/110710-pi/</guid>
      <description>&lt;p&gt;想要便携，于是电力就是个人类绕不过去的障碍。电力存储及集成度(小型化)的突破，将是科技重大的突破。&lt;/p&gt;&#xA;&lt;h3 id=&#34;树莓派设为低功耗模式&#34;&gt;树莓派设为低功耗模式&lt;/h3&gt;&#xA;&lt;p&gt;以下脚本参数1,2,3用于调整CPU模式，r读取CPU模式及频率&lt;br&gt;&#xA;不过看起来低功耗模式也在600Mhz，试图设置更低不生效。不知还有其它什么方法可以“省电”&lt;br&gt;&#xA;另外，你可以通过 vcgencmd measure_temp 看到它的温度&lt;br&gt;&#xA;或者一行的脚本： while true ; do vcgencmd measure_temp ; sleep 1 ; done&lt;br&gt;&#xA;看到一个关闭网卡来节电的，非永久生效： sudo iw dev wlan0 set power_save off&lt;/p&gt;</description>
    </item>
    <item>
      <title>程小奔复活记</title>
      <link>/it/2023/110618-cxb/</link>
      <pubDate>Mon, 06 Nov 2023 10:43:59 +0000</pubDate>
      <guid>/it/2023/110618-cxb/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;/teach/2019/101420-mblock-01.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://i.scwy.net/teach/2019/101420-mblock/&#34;&gt;程小奔&lt;/a&gt;是2019年购买的，本着不浪费和废物再利用的观念，花了点时间把它“复活”一下。&lt;/p&gt;&#xA;&lt;p&gt;这里是用于显示网站的访问数显示。下方的小点是用于显示一个时间状态，不会每次都直接访问地址。&lt;/p&gt;&#xA;&lt;p&gt;PS: 看起来它并不支持https，而只能用http&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../110618-cxb-02.jpg&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;第一张图是总访问量，因为显示倍数有限，所有只取前四位。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gost GO语言实现的安全隧道</title>
      <link>/it/2023/102318-gost/</link>
      <pubDate>Mon, 23 Oct 2023 10:54:37 +0000</pubDate>
      <guid>/it/2023/102318-gost/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://gost.run/images/gost.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://gost.run/&#34;&gt;官方网址&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;多端口监听&lt;br&gt;&#xA;多级转发链&lt;br&gt;&#xA;多协议支持&lt;br&gt;&#xA;TCP/UDP端口转发&lt;br&gt;&#xA;反向代理和隧道&lt;br&gt;&#xA;TCP/UDP透明代理&lt;br&gt;&#xA;DNS解析和代理&lt;br&gt;&#xA;TUN/TAP设备&lt;br&gt;&#xA;Unix域套接字重定向&lt;br&gt;&#xA;串口重定向&lt;br&gt;&#xA;负载均衡&lt;br&gt;&#xA;路由控制&lt;br&gt;&#xA;限速限流&lt;br&gt;&#xA;准入控制&lt;br&gt;&#xA;插件系统&lt;br&gt;&#xA;Prometheus监控指标&lt;br&gt;&#xA;动态配置&lt;br&gt;&#xA;Web API&lt;/p&gt;</description>
    </item>
    <item>
      <title>NetBird又是一个VPN</title>
      <link>/it/2023/100619-netbird/</link>
      <pubDate>Fri, 06 Oct 2023 11:30:16 +0000</pubDate>
      <guid>/it/2023/100619-netbird/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://netbird.io/&#34;&gt;NetBird&lt;/a&gt; 是一个简单快速的企业级 VPN 替代方案，建立在原生 WireGuard® 之上，可以轻松为您的组织或家庭创建安全的私人网络。它几乎不需要任何配置工作，从而摆脱了开放端口、复杂的防火墙规则、VPN 网关等烦琐任务的困扰&lt;/p&gt;</description>
    </item>
    <item>
      <title>Raspberry Pi5 将于10月底发布</title>
      <link>/it/2023/100309-pi5/</link>
      <pubDate>Tue, 03 Oct 2023 01:07:02 +0000</pubDate>
      <guid>/it/2023/100309-pi5/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.oschina.net/news/259858/introducing-raspberry-pi-5?fr=top&#34;&gt;关于Pi5的信息可以看这里&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;在 Raspberry Pi 4 发布四年后，Raspberry Pi 公司宣布 Raspberry Pi 5 将于 10 月底推出。&lt;/p&gt;&#xA;&lt;p&gt;根据介绍，Raspberry Pi 5 4GB 型号的售价为 60 美元，8GB 版本的售价为 80 美元。与 Raspberry Pi 4 相比，Raspberry Pi 5 的 CPU 和 GPU 性能提高了两到三倍；内存和 I/O 带宽大约是两倍；并且是首款采用英国剑桥内部设计的芯片的 Raspberry Pi 计算机。&lt;/p&gt;</description>
    </item>
    <item>
      <title>动态IP与黄页</title>
      <link>/it/2023/092822-yellowpage/</link>
      <pubDate>Thu, 28 Sep 2023 14:30:16 +0000</pubDate>
      <guid>/it/2023/092822-yellowpage/</guid>
      <description>&lt;p&gt;针对众多的动态IP，甚至内网IP，其实搭建一个服务器，让大家共享，就可以解决问题。&lt;br&gt;&#xA;这里当然先要抛开国内众多的备案及限制问题，纯技术的考虑解决。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gogs 自建Git</title>
      <link>/it/2023/092721-gogs/</link>
      <pubDate>Wed, 27 Sep 2023 13:19:27 +0000</pubDate>
      <guid>/it/2023/092721-gogs/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://gogs.io/img/hero.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://gogs.io/&#34;&gt;Gogs&lt;/a&gt; 一款极易搭建的自助 Git 服务，Golang开发自然跨平台。&lt;/p&gt;&#xA;&lt;p&gt;搭建很简单，个人或小团队使用，完全可以用sqlite3。在现有的N100上搭建一个，极其简单，速度起飞。&lt;br&gt;&#xA;除了个人常规git以外，是否可以解决时断时续的github.com呢？也就是克隆一些常用的项目（也可以备不时之需，万一卡脖子了呢）。比如对一些常用的项目定时clone；针对断断续续的问题，让它自动重试&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sqlite3读写性能的优化</title>
      <link>/code/2023/091921-sqlite/</link>
      <pubDate>Tue, 19 Sep 2023 13:34:11 +0000</pubDate>
      <guid>/code/2023/091921-sqlite/</guid>
      <description>&lt;p&gt;原文链接 &lt;a href=&#34;https://blog.csdn.net/Ango_/article/details/122074816&#34;&gt;https://blog.csdn.net/Ango_/article/details/122074816&lt;/a&gt; ，2022年左右，稍微旧了一点，但值得参考学习。&lt;/p&gt;&#xA;&lt;p&gt;sqlite3是一个广泛应用于小场景的数据库，并发性差一点，但便携性很好。&lt;/p&gt;&#xA;&lt;h3 id=&#34;优化方式&#34;&gt;优化方式&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;关闭写同步&lt;/strong&gt;，PRAGMA synchronous = OFF，在 sqlite3 中 synchronous 有三种模式，分别是 FULL，NORMAL 和 OFF，在系统意外终止的时候，安全性逐级减弱，FULL模式下，保证数据不会损坏，安全性最高，写入速度也最慢。OFF 模式会比 FULL 模式快50倍以上。&lt;br&gt;&#xA;&lt;strong&gt;使用事务&lt;/strong&gt;，如果有许多数据需要插入数据库，逐条插入，导致频繁的提交以及磁盘IO，使用事务机制，可以批量插入数据，可以极大的提升写入速度。实际测试中的情况是，开启事务之后，写入速度也可以提升近50倍。&lt;br&gt;&#xA;&lt;strong&gt;执行准备&lt;/strong&gt;，执行准备相当于将sql语句提前编译，省去每次执行sql语句时候的语法检查等操作，可以极大的优化sql语句的执行效率，其原理有点像 LuaJit 将 Lua 语言成静态机器码，提高运行速度。实测情况中，使用执行准备可以提升40倍的写入速度。&lt;br&gt;&#xA;&lt;strong&gt;内存模式&lt;/strong&gt;，sqlite3 支持内存模式，将数据库直接创建到内存中，打开地址传入”:memory:”即可，内存模式相比正常模式，可以省区IO的时间，使用内存模式的加速思路是，先将数据库创建到内存中，数据写入完整之后，再调用 “VACUUM INTO ‘out.db3’;” 语句将其写入到磁盘，在开启了执行准备的情况下，这种方式会稍微快上一点点。&lt;/p&gt;</description>
    </item>
    <item>
      <title>QOR5学习</title>
      <link>/code/2023/091623-qor5/</link>
      <pubDate>Sat, 16 Sep 2023 15:02:13 +0000</pubDate>
      <guid>/code/2023/091623-qor5/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://i.scwy.net/tags/qor/&#34;&gt;之前学习过QOR&lt;/a&gt;，熟悉以后可以快速的构建后台。今天看它悄悄更新了，名为QOR5，学起来。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://qor5.com/&#34;&gt;官网如前&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;docs.qor5.com/&#34;&gt;文档亦如前&lt;/a&gt;,不过看起来示例多了。&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/qor5/&#34;&gt;Github&lt;/a&gt;发现的人不多。&lt;/p&gt;&#xA;&lt;h3 id=&#34;1分钟感受&#34;&gt;1分钟感受&lt;/h3&gt;&#xA;&lt;p&gt;官方文档有一篇&lt;a href=&#34;https://docs.qor5.com/getting-started/one-minute-quick-start.html&#34;&gt;1分钟快速入门&lt;/a&gt;，硬是多研究了一下才成功运行。&lt;/p&gt;&#xA;&lt;h5 id=&#34;安装qor5示例构建工具&#34;&gt;安装QOR5示例构建工具&lt;/h5&gt;&#xA;&lt;p&gt;go install github.com/qor5/docs/cmd/qor5@latest&lt;/p&gt;&#xA;&lt;h5 id=&#34;运行qor5构建&#34;&gt;运行QOR5构建&lt;/h5&gt;&#xA;&lt;p&gt;qor5&lt;br&gt;&#xA;提示输入包名等，按提示选择或输入&lt;/p&gt;&#xA;&lt;h5 id=&#34;进入目录运行&#34;&gt;进入目录运行&lt;/h5&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;用  docker-compose up 启动一个postgresql数据库docker&lt;/li&gt;&#xA;&lt;li&gt;运行 source dev_env ，通过环境变量设置相关&lt;/li&gt;&#xA;&lt;li&gt;go run main.go 启动环境&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h5 id=&#34;改错&#34;&gt;改错&lt;/h5&gt;&#xA;&lt;p&gt;构建的工程居然有错，得自己改改。关键都是新手上路，咋改呢。&lt;br&gt;&#xA;admin/config.go文件中&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pi连接蓝牙耳机</title>
      <link>/it/2023/091210-bluetooth/</link>
      <pubDate>Tue, 12 Sep 2023 02:23:45 +0000</pubDate>
      <guid>/it/2023/091210-bluetooth/</guid>
      <description>&lt;p&gt;原文地址：https://zhuanlan.zhihu.com/p/512252663?utm_id=0&lt;/p&gt;&#xA;&lt;h4 id=&#34;1-修改软件源为国内源&#34;&gt;1. 修改软件源为国内源&lt;/h4&gt;&#xA;&lt;p&gt;根据情况和自身的版本，我没使用&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mojo🔥 摸脚语言，似乎已经可以安装</title>
      <link>/it/2023/090821-mojo/</link>
      <pubDate>Fri, 08 Sep 2023 13:57:08 +0000</pubDate>
      <guid>/it/2023/090821-mojo/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.modular.com/mojo&#34;&gt;Mojo&lt;/a&gt; 吹得很凶，吹得很凶，面向AI编程，甩Python几十条街，融资上亿&amp;hellip;.&lt;br&gt;&#xA;但无缘一试，在Win和Ubuntu上试都不能通过。&lt;/p&gt;&#xA;&lt;p&gt;由 LLVM 和 Swift 编程语言的联合创始人 Chris Lattner 创立的新公司 Modular AI 发布&lt;/p&gt;</description>
    </item>
    <item>
      <title>观察、现象、分析与解决思考</title>
      <link>/other/2023/090723-think/</link>
      <pubDate>Thu, 07 Sep 2023 15:06:05 +0000</pubDate>
      <guid>/other/2023/090723-think/</guid>
      <description>&lt;p&gt;观察现问题，发现大家的难题，分析原因并提供可能的解决方法。这是一门“好生意”的由来。&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-凉兄&#34;&gt;1 凉兄&lt;/h2&gt;&#xA;&lt;h4 id=&#34;问题&#34;&gt;问题：&lt;/h4&gt;&#xA;&lt;h4 id=&#34;原因&#34;&gt;原因：&lt;/h4&gt;&#xA;&lt;h4 id=&#34;解决&#34;&gt;解决:&lt;/h4&gt;&#xA;&lt;h4 id=&#34;难点&#34;&gt;难点：&lt;/h4&gt;&#xA;&lt;h4 id=&#34;优势&#34;&gt;优势：&lt;/h4&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;2-我是馆长&#34;&gt;2 我是馆长&lt;/h2&gt;&#xA;&lt;h4 id=&#34;现象&#34;&gt;现象：&lt;/h4&gt;&#xA;&lt;h4 id=&#34;原因-1&#34;&gt;原因：&lt;/h4&gt;&#xA;&lt;h4 id=&#34;解决-1&#34;&gt;解决:&lt;/h4&gt;&#xA;&lt;h4 id=&#34;难点-1&#34;&gt;难点：&lt;/h4&gt;&#xA;&lt;h4 id=&#34;优势-1&#34;&gt;优势：&lt;/h4&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;3-好就业&#34;&gt;3 好就业&lt;/h2&gt;&#xA;&lt;h4 id=&#34;现象-1&#34;&gt;现象：&lt;/h4&gt;&#xA;&lt;h4 id=&#34;原因-2&#34;&gt;原因：&lt;/h4&gt;&#xA;&lt;h4 id=&#34;解决-2&#34;&gt;解决:&lt;/h4&gt;&#xA;&lt;h4 id=&#34;难点-2&#34;&gt;难点：&lt;/h4&gt;&#xA;&lt;h4 id=&#34;优势-2&#34;&gt;优势：&lt;/h4&gt;</description>
    </item>
    <item>
      <title>Linux直接控制显示：内存缓冲驱动显示 framebuffer(帧缓冲) 0.6a</title>
      <link>/code/2023/090418-eyedisplay/</link>
      <pubDate>Mon, 04 Sep 2023 10:13:51 +0000</pubDate>
      <guid>/code/2023/090418-eyedisplay/</guid>
      <description>&lt;p&gt;framebuffer 内存缓冲驱动显示，这源自于使用fbterm后，可以直接通过/dev/fbx来控制屏幕显示。&lt;/p&gt;&#xA;&lt;p&gt;单纯的把framebuffer看作一块内存，这部分内存包含了将要scan out显示的数据。&lt;br&gt;&#xA;等价于framebuffer driver。通常作为LCD控制器或者其他显示设备的驱动，FrameBuffer驱动是一个字符设备，设备节点是/dev/fbX，主设备号为29，次设备号递增，用户可以将Framebuffer看成是显示内存的一个映像，将其映射到进程地址空间之后，就可以直接进行读写操作，而写操作可以立即反应在屏幕上。这种操作是抽象的，统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。Framebuffer设备为上层应用程序提供系统调用，也为下一层的特定硬件驱动提供接口；&lt;/p&gt;</description>
    </item>
    <item>
      <title>修改Croc代码，添加静默模式</title>
      <link>/it/2023/090323-croc/</link>
      <pubDate>Sun, 03 Sep 2023 15:27:38 +0000</pubDate>
      <guid>/it/2023/090323-croc/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://i.scwy.net/tags/croc/&#34;&gt;croc&lt;/a&gt;是不错的跨平台、跨网络的传输工具，当前版本来到了9.6.5。&lt;/p&gt;&#xA;&lt;p&gt;在这里，我需要通过croc来不断获取文本，并显示出来。但croc会显示一些错误反馈、超时反馈等，影响了观看。将代码clone下来，稍作修改。&lt;br&gt;&#xA;主要涉及到cli.go\croc.go文件，&lt;br&gt;&#xA;在croc.go中，Options 参数结构中添加 Quiet bool （56行）&lt;br&gt;&#xA;在cli.go中，app.Flags = []cli.Flag{ 添加参数 quiet (95行）&lt;br&gt;&#xA;在cli.go中，crocOptions := croc.Options{ 中添加参数的获取 Quiet: c.Bool(&amp;ldquo;quiet&amp;rdquo;) (186行）&lt;br&gt;&#xA;其它地方就是参数的判断if !c.Options.Quiet，将所有要输出或者error返回的地方(避免log日志在error出错时输出)进行判断&lt;br&gt;&#xA;另外就是cli.go的模块引用，改为引用自己即可&lt;/p&gt;</description>
    </item>
    <item>
      <title>串口触摸屏使用</title>
      <link>/it/2023/090115-display/</link>
      <pubDate>Fri, 01 Sep 2023 07:47:42 +0000</pubDate>
      <guid>/it/2023/090115-display/</guid>
      <description>&lt;p&gt;在“杂货铺”中翻到以前的串口触摸屏，使用很简单，利用它来显示一些杂七杂八的信息。拿来配合Pi0使用是极好的。&lt;br&gt;&#xA;当然，你要用esp8266或esp32也可以，只是编程上麻烦一点点。&lt;br&gt;&#xA;用孩子的乐高给它搞个外壳&lt;br&gt;&#xA;如果Pi0和电池也“集成”到一起的话，可能更“好玩”。&lt;br&gt;&#xA;代码1-2千行，跨平台可用&lt;br&gt;&#xA;1页：显示物理电脑与虚拟主机的在线状态、CPU使用率、线程数、内存、磁盘、在线时长，博客总浏览及当前浏览量&lt;br&gt;&#xA;2页：股票信息&lt;br&gt;&#xA;3页：本机信息：内外网IP、负载、磁盘空间、在线时长、内存占用&lt;br&gt;&#xA;4页：功能: 硬件唤醒、关机，其它待加&lt;/p&gt;</description>
    </item>
    <item>
      <title>要怎样的一款键盘</title>
      <link>/it/2023/090109-keyboard/</link>
      <pubDate>Fri, 01 Sep 2023 01:03:33 +0000</pubDate>
      <guid>/it/2023/090109-keyboard/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../102015-keyboard-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;现在手上使用的是一款61键带RGB灯的迷你键盘。适应了一段时间，已经比较顺手了。还是离想像中的键盘还差一些。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;每个RGB灯都可以通过键盘或编程控制。&lt;br&gt;&#xA;用来做什么呢？比如说服务器的状态响应，比如某个服务的访问响应（例：博客有人访问了，闪烁一下），比如有新的邮件了，某灯亮起。&lt;br&gt;&#xA;平时其实用灯的情况不多，用来装X其实也没啥意义；键盘熟了以后，盲打基本不需要看，除了个别“边远山区”可能定位不准确以外。&lt;/p&gt;</description>
    </item>
    <item>
      <title>PyWebIO python浏览器交互</title>
      <link>/it/2023/082621-pywebio/</link>
      <pubDate>Sat, 26 Aug 2023 13:49:35 +0000</pubDate>
      <guid>/it/2023/082621-pywebio/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://pywebio.readthedocs.io/zh_CN/latest/index.html&#34;&gt;PyWebIO&lt;/a&gt;使用浏览器作为中介，进行用户交互。即将控件呈现在浏览器中，与用户交互。&lt;/p&gt;&#xA;&lt;p&gt;安装： pip3 install -U pywebio&lt;/p&gt;&#xA;&lt;h3 id=&#34;hello-world&#34;&gt;Hello World&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;from pywebio.input import input, FLOAT&#xA;from pywebio.output import put_text&#xA;&#xA;def bmi():&#xA;    height = input(&amp;#34;请输入你的身高(cm)：&amp;#34;, type=FLOAT)&#xA;    weight = input(&amp;#34;请输入你的体重(kg)：&amp;#34;, type=FLOAT)&#xA;&#xA;    BMI = weight / (height / 100) ** 2&#xA;&#xA;    top_status = [(14.9, &amp;#39;极瘦&amp;#39;), (18.4, &amp;#39;偏瘦&amp;#39;),&#xA;                  (22.9, &amp;#39;正常&amp;#39;), (27.5, &amp;#39;过重&amp;#39;),&#xA;                  (40.0, &amp;#39;肥胖&amp;#39;), (float(&amp;#39;inf&amp;#39;), &amp;#39;非常肥胖&amp;#39;)]&#xA;&#xA;    for top, status in top_status:&#xA;        if BMI &amp;lt;= top:&#xA;            put_text(&amp;#39;你的 BMI 值: %.1f，身体状态：%s&amp;#39; % (BMI, status))&#xA;            break&#xA;&#xA;if __name__ == &amp;#39;__main__&amp;#39;:&#xA;    bmi()&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;https://pywebio.readthedocs.io/zh_CN/latest/_images/demo.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>视频语音转换技术</title>
      <link>/it/2023/082112-voice/</link>
      <pubDate>Mon, 21 Aug 2023 04:44:15 +0000</pubDate>
      <guid>/it/2023/082112-voice/</guid>
      <description>&lt;p&gt;经常看B站，经常看到油管转过来的国外视频。B站实现了将国外视频（通常是英文）自动添加英文字幕。&lt;br&gt;&#xA;这里它需要实现的技术有：1.英中翻译 2.视频时间线 3.外挂字幕叠加&lt;br&gt;&#xA;这对于我们这种英语不过关的人来说，确实方便不少。但，还不够。特别是我这种喜欢一边看视频，一边还要搞点其它的用户。即使不这样，这看字幕也累呀。&lt;br&gt;&#xA;是不是应该进一步：将翻译后的中文，再通过TTS技术实现中文语音。&lt;br&gt;&#xA;更进一步，通过AI分析视频中的语气等，实现不同的角色，不同的语气等。&lt;br&gt;&#xA;这是不是太棒了？我觉得这个很快能出现。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang库：Bubble 命令行界面</title>
      <link>/code/2023/081423-bubble/</link>
      <pubDate>Mon, 14 Aug 2023 15:41:42 +0000</pubDate>
      <guid>/code/2023/081423-bubble/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://camo.githubusercontent.com/43927db9533c5fde08c71679f256f0d37bc6bb4e1f2d13aa11ad9fe8203d602b/68747470733a2f2f73747566662e636861726d2e73682f627562626c657465612f627562626c657465612d6769746875622d6865616465722d73696d706c652e706e67&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;bubbletea是一个简单、小巧、可以非常方便地用来编写 TUI（terminal User Interface，控制台界面程序）程序的框架。内置简单的事件处理机制，可以对外部事件做出响应，如键盘按键。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang库：Gopsutil 获取系统和硬件信息</title>
      <link>/code/2023/081423-gopsutil/</link>
      <pubDate>Mon, 14 Aug 2023 15:22:02 +0000</pubDate>
      <guid>/code/2023/081423-gopsutil/</guid>
      <description>&lt;p&gt;gopsutil是 Python 工具库psutil 的 Golang 移植版，可以帮助我们方便地获取各种系统和硬件信息。gopsutil为我们屏蔽了各个系统之间的差异，具有非常强悍的可移植性。有了gopsutil，我们不再需要针对不同的系统使用syscall调用对应的系统方法。更棒的是gopsutil的实现中没有任何cgo的代码，使得交叉编译成为可能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>pip安装报错error: externally-managed-environment</title>
      <link>/it/2023/081322-pip/</link>
      <pubDate>Sun, 13 Aug 2023 14:19:07 +0000</pubDate>
      <guid>/it/2023/081322-pip/</guid>
      <description>&lt;p&gt;在pve中安装python的psutil库，pip3 install psutil 报错：externally-managed-environment，于是搜到此[网友文章](&lt;a href=&#34;https://blog.csdn.net/hhcgn/article/details/129304562&#34;&gt;https://blog.csdn.net/hhcgn/article/details/129304562&lt;/a&gt;_的解释：&lt;/p&gt;</description>
    </item>
    <item>
      <title>食品安全：元素周期表收集 (保持更新)</title>
      <link>/other/2023/080317-food/</link>
      <pubDate>Thu, 03 Aug 2023 09:41:16 +0000</pubDate>
      <guid>/other/2023/080317-food/</guid>
      <description>&lt;p&gt;太多“科学”名词记不住，收集一下。对于资料的正确性，尽可能多渠道求证。&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;名称&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;类型&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;致癌&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;说明&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;山梨酸钾&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;防腐剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;苯甲酸纳&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;防腐剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;焦亚硫酸纳&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;防腐剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;亚硫酸盐&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;防腐剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;苯甲酸&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;防腐剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;丙二醇&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;防腐剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;乙酰化脲&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;防腐剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;对羟基苯甲酸惭酯纳&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;防腐剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;安塞蜜&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;甜味剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://baike.baidu.com/item/%E9%98%BF%E6%96%AF%E5%B7%B4%E7%94%9C/3510923&#34;&gt;阿斯巴甜&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;甜味剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;(苯丙氨酸) 长期过量摄入可能会增加患脑部疾病的风险，引起偏头痛等神经系统问题&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;三氧蔗糖&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;甜味剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;山梨醇&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;防腐剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Z基麦牙酚&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;抗氧化剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;特丁基对苯二酚&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;抗氧化剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;二氧化硅&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;抗结剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;硫酸钾&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;抗结剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;硫酸铝&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;抗结剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;糖苷酸二纳&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;保鲜剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;谷氨酸纳&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;增味剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;味精&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;二氧化钛&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;着色剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;着色剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;海藻酸钠&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;赋形剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;碳酸氢钠&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;膨松剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;硫酸铵&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;膨松剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;蛋磷脂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;乳化剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;明胶&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;乳化剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;羟丙基甲基纤维素&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;增稠剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;过氧化苯甲酰&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;发色剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;氢氧化钙&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;硬化剂&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;</description>
    </item>
    <item>
      <title>Caddy真可用的高可用均衡负载</title>
      <link>/it/2023/080310-caddy/</link>
      <pubDate>Thu, 03 Aug 2023 02:58:30 +0000</pubDate>
      <guid>/it/2023/080310-caddy/</guid>
      <description>&lt;p&gt;使用pve，也分别在家中和租屋中搭建了两个服务器。之前只是在Caddy中配置了负载策略：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;to 192.168.8.22:8088 192.168.8.40:8088&#xA;lb_policy first&#xA;lb_try_interval 5s&#xA;lb_try_duration 2s&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这是说有两个服务可用，优先第一个，重试间隔等。但它没有效果。&lt;br&gt;&#xA;网上好多也是一知半解或者没有亲自试用，甚至只是抄了，就说可用了。原作者分为几个章节来写，而一些人只抄了前一章，没抄后一章，根本是废物用不起来。&lt;br&gt;&#xA;借着其中一个pve服务器网络异常，再向网友学习一下，终于真正用起来了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rcedit Win可执行文件资源编辑工具</title>
      <link>/it/2023/080118-rcedit/</link>
      <pubDate>Tue, 01 Aug 2023 10:44:04 +0000</pubDate>
      <guid>/it/2023/080118-rcedit/</guid>
      <description>&lt;p&gt;rcedit是一个用于在Win上编辑exe文件资源的命令行工具，项目地址：&lt;img src=&#34;https://github.com/electron/rcedit&#34; alt=&#34;https://github.com/electron/rcedit&#34;&gt;&lt;br&gt;&#xA;例如： .\rcedit-x64.exe MyTools.exe &amp;ndash;set-version-string &amp;ldquo;LegalCopyright&amp;rdquo; &amp;ldquo;Copyright (c) 1998-2023 TengTu Studio.Ease&amp;rdquo; 修改版权信息&lt;/p&gt;&#xA;&lt;p&gt;文件中可编辑的资源关键词：https://learn.microsoft.com/zh-cn/windows/win32/menurc/versioninfo-resource&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot快速恢复</title>
      <link>/code/2023/080117-godot/</link>
      <pubDate>Tue, 01 Aug 2023 09:33:00 +0000</pubDate>
      <guid>/code/2023/080117-godot/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://godotengine.org/assets/home/foundation/godot-foundation-logo-dark.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;之所以标题叫快速恢复，是因为有一段时间没使用了，再加上版本的升级。所以需要快速过一遍。也就意味着以下信息不是完整的学习内容和顺序。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;enum { COLD, WARM, HOT } 枚举&#xA;var score: init = 0&#xA;var my_int := 8&#xA;float、bool、String  &#xA;! &amp;amp;&amp;amp; ||&#xA;~ &amp;lt;&amp;lt; &amp;gt;&amp;gt; ^ | &amp;amp;=&#xA;next_state = &amp;#34;idle&amp;#34; if is_on_floor() else &amp;#34;fall&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;函数指定返回类型：&lt;/p&gt;</description>
    </item>
    <item>
      <title>图片元数据处理工具Exiftool</title>
      <link>/it/2023/073008-exiftool/</link>
      <pubDate>Sun, 30 Jul 2023 00:23:10 +0000</pubDate>
      <guid>/it/2023/073008-exiftool/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://i.scwy.net/it/2023/072910-request/&#34;&gt;之前提到&lt;/a&gt;了关于照片管理越来越难的问题，于是看到了图片元数据处理工具&lt;a href=&#34;https://exiftool.org/&#34;&gt;Exiftool&lt;/a&gt;。看起来它也是跨平台的，至少Linux\Win\MacOS。&lt;br&gt;&#xA;Exif是可交换图像文件格式（Exchangeable image file format），是一种标准，定义了与数码相机捕获的图像（或其他媒体）有关的信息，用于存储重要的数据，比如相机的曝光、拍摄日期和时间，甚至GPS定位等。&lt;br&gt;&#xA;&lt;a href=&#34;https://exiftool.org/#supported&#34;&gt;ExifTool支持的文件类型（File Type）&lt;/a&gt;, &lt;a href=&#34;https://exiftool.org/TagNames/index.html&#34;&gt;ExifTool支持的标签（Tag）&lt;/a&gt;。Win的资源(文件)管理器也是支持图片元数据的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>今日单词：Weapon 武器、手段、工具</title>
      <link>/other/2023/072923-weapon/</link>
      <pubDate>Sat, 29 Jul 2023 15:55:49 +0000</pubDate>
      <guid>/other/2023/072923-weapon/</guid>
      <description>&lt;p&gt;其实weapon这个单词的英文释意比较符合我的想法：所谓的武器，也就是一种工具或手段。&lt;br&gt;&#xA;今天在路上，谈到了企业家的胸怀与格局。我觉得它就是一种武器，例如把它比喻为核武器，相当先进，有作用。但不是每种情况下都适合使用。&lt;br&gt;&#xA;有些老板在小企业中，想尽办法或手段管理员工（主要还是指一些不算太善良的方法）。它也是一种武器，比如像手枪。&lt;br&gt;&#xA;当然还有更多的武器，在不同的情况下供你使用。它们有各自的优缺点和得失。&lt;/p&gt;</description>
    </item>
    <item>
      <title>需求及自我实现：一个图片管理软件</title>
      <link>/it/2023/072910-request/</link>
      <pubDate>Sat, 29 Jul 2023 02:12:28 +0000</pubDate>
      <guid>/it/2023/072910-request/</guid>
      <description>&lt;p&gt;随着图片越来越多，管理也越来越成问题。但没见到哪款图片管理软件有类似这些功能。整理一下需求，列在这里，或许可能自己做一个。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;跨平台：虽然由于各种原因不能抛弃Win，但我更喜欢Linux。所以我经常在双系统中切换。&lt;/li&gt;&#xA;&lt;li&gt;绿色：不要安装，不要一大堆的杂七杂八，最好是一个程序搞定，一个sqlite3存储。两个文件知根知底。&lt;/li&gt;&#xA;&lt;li&gt;图片标签功能：个人比较习惯使用目录结构进行文件管理，但图片的属性往往不只一个，这个时候就不能只靠目录进行管理了。这也是图片越来越多，越来越不好管理的原因之一。允许按标签分类显示，按标签搜索。&lt;br&gt;&#xA;可以考虑使用&lt;a href=&#34;https://i.scwy.net/it/2023/062316-lsb/&#34;&gt;LSB技术&lt;/a&gt;，将标签功能添加到图片中。&lt;/li&gt;&#xA;&lt;li&gt;分类：考虑的功能，毕竟已有标签功能。&lt;/li&gt;&#xA;&lt;li&gt;喜爱: 给图片爱程度打分。XnView也有此功能。&lt;/li&gt;&#xA;&lt;li&gt;图片自身信息：尺寸、类型、大小、EXIF&lt;/li&gt;&#xA;&lt;li&gt;功能：尺寸控制、格式转化、水印、单图/多图预览、图片比较、图片滤重、加密&lt;/li&gt;&#xA;&lt;li&gt;如果：能利用AI技术，自动进行部份识别，减少人工标记&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;看起来XnView是较为符合的，先用。&lt;br&gt;&#xA;XnView的XnView.db是sqlite3，这对于便携是比较好的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flutter各环境的建立</title>
      <link>/it/2023/072015-flutter/</link>
      <pubDate>Thu, 20 Jul 2023 07:44:28 +0000</pubDate>
      <guid>/it/2023/072015-flutter/</guid>
      <description>&lt;p&gt;利用Win11的自带的虚拟机Hyper-V，建立了Ubuntu和Win11的环境。因为Win11官方的虚拟机自带了VS2022，顺便就把Flutter一并建立。两个环境下的Flutter都还算不太复杂。&lt;br&gt;&#xA;现在Ubuntu、Win11、Android下都可以建立flutter程序了。通杀环境还是比较爽的，现在就剩下不能建立小程序了。如果网友一并将小程序解决了，那就无敌般的存在了。虽然它的编程层层嵌套还是比较郁闷。&lt;br&gt;&#xA;从运行效果来看，感受一致，已能流畅使用。&lt;br&gt;&#xA;不知道在Flutter中，如何获取（Android）优盘的内容。&lt;/p&gt;</description>
    </item>
    <item>
      <title>语音日记</title>
      <link>/teach/2023/071509-voice/</link>
      <pubDate>Sat, 15 Jul 2023 01:03:50 +0000</pubDate>
      <guid>/teach/2023/071509-voice/</guid>
      <description>&lt;p&gt;今天开始让孩子们做语音日记。&lt;br&gt;&#xA;之前有一段时间，他们做&lt;a href=&#34;https://i.scwy.net/teach/2020/090721-riji/&#34;&gt;每日打卡总结&lt;/a&gt;还是挺好的，让他们有更强的自醒能力和总结能力。&lt;br&gt;&#xA;现在读三年级了，语文更显得重要。面对“懒癌”，换个方式，让他们做语音日记。计划为他们单独做个博客，把每次的语音日记上传到博客，希望这是他们以后的一笔“财富”。&lt;br&gt;&#xA;也不要求每天，计划购买一只录音笔，即使在学校时，也可以随时做。暂时也没做太多时长方面的规定。每日新鲜事、所思所想、所见所闻，甚至和同学们一起做语音记录，都没问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>JavaScript检测是否开启了控制台（F12调试工具）</title>
      <link>/code/2023/071223-f12/</link>
      <pubDate>Wed, 12 Jul 2023 15:19:39 +0000</pubDate>
      <guid>/code/2023/071223-f12/</guid>
      <description>&lt;p&gt;原地址： &lt;a href=&#34;https://www.jb51.net/article/196925.htm&#34;&gt;https://www.jb51.net/article/196925.htm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;打开控制台，即会弹出对话框&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;(function () {&#xA;var re = /x/;&#xA;var i = 0;&#xA;console.log(re);&#xA;  &#xA;re.toString = function () {&#xA;alert(&amp;#34;请关闭控制台&amp;#34;);&#xA;return &amp;#39;第 &amp;#39; + (++i) + &amp;#39; 次打开控制台&amp;#39;;&#xA;};&#xA;})();&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;setInterval(function() {&#xA;  check()&#xA;}, 4000);&#xA;var check = function() {&#xA;  function doCheck(a) {&#xA;    if ((&amp;#34;&amp;#34; + a/a)[&amp;#34;length&amp;#34;] !== 1 || a % 20 === 0) {&#xA;      (function() {}&#xA;      [&amp;#34;constructor&amp;#34;](&amp;#34;debugger&amp;#34;)())&#xA;    } else {&#xA;      (function() {}&#xA;      [&amp;#34;constructor&amp;#34;](&amp;#34;debugger&amp;#34;)())&#xA;    }&#xA;    doCheck(++a)&#xA;  } &#xA;  try {&#xA;    doCheck(0)&#xA;  } catch (err) {}&#xA;};&#xA;check();&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Caddy加Etcd,实现动态IP域名访问的三种方法</title>
      <link>/code/2023/071221-caddy-etcd/</link>
      <pubDate>Wed, 12 Jul 2023 13:07:01 +0000</pubDate>
      <guid>/code/2023/071221-caddy-etcd/</guid>
      <description>&lt;p&gt;正好两者都是用Golang实现的。&lt;/p&gt;&#xA;&lt;p&gt;网上一般介绍自己如何搭建一个DNS服务器，比如使用CoreDNS+Etcd来实现动态IP域名。比如我的&lt;a href=&#34;https://i.scwy.net/it/2023/070709-coredns/&#34;&gt;这篇文章&lt;/a&gt;，下载好程序，1分钟就把DNS建好了。&lt;/p&gt;&#xA;&lt;p&gt;但我现在的环境是：有一个云服务器A，有一个动态IP的电信宽带，并建有私人服务器B。现在通过云服务器与B服务器代理，把B的服务放到一个二级域名上。例如&lt;a href=&#34;https://i.scwy.net&#34;&gt;本博客&lt;/a&gt;，它其实是搭建在B服务器上。&lt;/p&gt;</description>
    </item>
    <item>
      <title>解决电信封禁80端口</title>
      <link>/it/2023/071122-port80/</link>
      <pubDate>Tue, 11 Jul 2023 14:43:26 +0000</pubDate>
      <guid>/it/2023/071122-port80/</guid>
      <description>&lt;p&gt;电信公网IP容易申请到，虽然是动态的，但是网上的解决方案也比较多，比如阿里申请好域名，做个动态域名解析即可。我这里的方案其实无需公网IP。&lt;br&gt;&#xA;而根本的问题在于电信封禁80、443、8080等端口，搜遍网络也没有直接解决的办法。&lt;br&gt;&#xA;我现在使用的方法类似&lt;a href=&#34;https://wp.gxnas.com/1286.html&#34;&gt;这位网友&lt;/a&gt;，即购买了小型云服务器A，通过Caddy进行中转，这样看起来二级域名（例如https://i.scwy.net）等，不需要端口附加。实际上它是通过中转到了电信公网宽带上的N100电脑B。&lt;br&gt;&#xA;而云服务器A与N100电脑B是通过TierZero进行的虚拟内网。实际想办法直接通过公网IP也是一样。虚拟内网更可以解决没有公网IP的问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang操作Etcd数据库</title>
      <link>/code/2023/070911-etcd/</link>
      <pubDate>Sun, 09 Jul 2023 03:31:00 +0000</pubDate>
      <guid>/code/2023/070911-etcd/</guid>
      <description>&lt;p&gt;原文：https://blog.csdn.net/qq_43716830/article/details/124180951&lt;/p&gt;&#xA;&lt;p&gt;put与get&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;context&amp;#34;&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;time&amp;#34;&#xA;&#xA;&#x9;&amp;#34;go.etcd.io/etcd/clientv3&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;cli, err := clientv3.New(clientv3.Config{&#xA;&#x9;&#x9;Endpoints:   []string{&amp;#34;127.0.0.1:2379&amp;#34;}, //节点&#xA;&#x9;&#x9;DialTimeout: 5 * time.Second,            //超过5秒钟连不上超时&#xA;&#x9;})&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;connect to etcd failed:&amp;#34;, err)&#xA;&#x9;&#x9;return&#xA;&#x9;}&#xA;&#x9;fmt.Println(&amp;#34;connect to etcd success&amp;#34;)&#xA;&#x9;defer cli.Close()&#xA;&#x9;ctx, cancel := context.WithTimeout(context.Background(), time.Second)&#xA;&#x9;_, err = cli.Put(ctx, &amp;#34;zyj&amp;#34;, &amp;#34;dsb&amp;#34;)&#xA;&#x9;cancel()&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;put to etcd failed,err:&amp;#34;, err)&#xA;&#x9;&#x9;return&#xA;&#x9;}&#xA;&#x9;ctx, cancel = context.WithTimeout(context.Background(), time.Second)&#xA;&#x9;resp, err := cli.Get(ctx, &amp;#34;zyj&amp;#34;) //resp是相应对象&#xA;&#x9;cancel()&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;get from etcd failed:&amp;#34;, err)&#xA;&#x9;&#x9;return&#xA;&#x9;}&#xA;&#x9;for _, ev := range resp.Kvs { //Kvs是响应对象的多个键值对&#xA;&#x9;&#x9;fmt.Printf(&amp;#34;%s:%s\n&amp;#34;, ev.Key, ev.Value)&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;watch&lt;/p&gt;</description>
    </item>
    <item>
      <title>Powershell学习及技巧(持续更新)</title>
      <link>/it/2023/070910-powershell/</link>
      <pubDate>Sun, 09 Jul 2023 02:45:33 +0000</pubDate>
      <guid>/it/2023/070910-powershell/</guid>
      <description>&lt;h3 id=&#34;相关网址&#34;&gt;相关网址&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.pstips.net/&#34;&gt;https://www.pstips.net/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;热键&#34;&gt;热键&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Ctrl + Alt + 1  打开新会话窗&#xA;Shift + Alt + + 横向分屏&#xA;Shift + Alt + - 竖向分屏&#xA;Alt + 方向键    切换分屏&#xA;Alt + Shift+ 方向键 调整分屏大小&#xA;Ctrl + Shift + w    关闭当前分屏&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;技巧&#34;&gt;技巧&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;IP及DNS设置&lt;br&gt;&#xA;Get-NetIPConfiguration | Get-DnsClientServerAddress  查询DNS地址&lt;br&gt;&#xA;Get-NetIPConfiguration | Set-DnsClientServerAddress -ServerAddresses 192.168.1.40 设置DNS&lt;br&gt;&#xA;Get-NetIPConfiguration | Set-DnsClientServerAddress -ResetServerAddresses 恢复默认DNS地址&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu修改设置 DNS 并生效的方法</title>
      <link>/it/2023/070813-resolv/</link>
      <pubDate>Sat, 08 Jul 2023 05:53:10 +0000</pubDate>
      <guid>/it/2023/070813-resolv/</guid>
      <description>&lt;p&gt;原文：&lt;a href=&#34;https://zhuanlan.zhihu.com/p/531974441&#34;&gt;https://zhuanlan.zhihu.com/p/531974441&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;之前升级系统的时候发现突然就 DNS 失效了，于是网上找了一些修改 DNS 的方法，发现很多方法修改之后都不生效，而且不管怎么改最后都会被改成 127.0.0.53 这个 DNS 地址。于是几经搜索之后终于找到一个可行的方法，本文做个记录。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Coredns&#43;etcd 1分钟实现动态(IP)域名，即DDNS</title>
      <link>/it/2023/070709-coredns/</link>
      <pubDate>Fri, 07 Jul 2023 01:30:29 +0000</pubDate>
      <guid>/it/2023/070709-coredns/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://coredns.io/images/CoreDNS_Colour_Horizontal.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/coredns/coredns/releases&#34;&gt;CoreDNS Github&lt;/a&gt;   &lt;a href=&#34;https://github.com/etcd-io/etcd/releases&#34;&gt;etcd Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;CoreDNS是一个灵活可扩展的 DNS 服务器，Etcd是 CoreOS 团队于 2013 年 6 月发起的开源项目，是一个分布式的键值存储,具有高可用性、强一致性和可监视的变化。两个都是使用Golang开发，天生绿色与兼容性、跨平台。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI的思考：ChatGPT、ChatGLM、FastGPT、PS AI、LangChain、miniGPT...</title>
      <link>/ai/2023/070610-ai/</link>
      <pubDate>Thu, 06 Jul 2023 02:01:54 +0000</pubDate>
      <guid>/ai/2023/070610-ai/</guid>
      <description>&lt;h3 id=&#34;文章整理中&#34;&gt;文章整理中&lt;/h3&gt;&#xA;&lt;p&gt;你可能随时会看到更新，以及一些词不达意的语句。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../070610-ai-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;自从GPT3出现以来，各类AI应用似乎爆发一般，语音的、图片的、视频的、资料的&amp;hellip;网上也不断有应用冒出，教学生成。也有了一些向民用（低配电脑）应用。通过云计算的方式，向民用提供一些以前需要专业、费时的功能。最近微软Win11已集成了GPT4的功能:Copilot。&lt;/p&gt;</description>
    </item>
    <item>
      <title>WebPush网页消息推送</title>
      <link>/code/2023/070223-webpush/</link>
      <pubDate>Sun, 02 Jul 2023 15:23:54 +0000</pubDate>
      <guid>/code/2023/070223-webpush/</guid>
      <description>&lt;p&gt;测试地址： &lt;a href=&#34;https://push.scwy.net&#34;&gt;https://push.scwy.net&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;WebPush网页消息推送，在Firefox的测试中，打开浏览器（不是我的网站）就收到消息。而Edge则不需要打开也会直接收到消息。想来Win后台驻留Edge浏览器程序。&lt;br&gt;&#xA;也就是说，你不用运行Web服务器，授权后，只需要发送信息即可。Edge会较即时收到消息，而Firefox会在打开时收到。&lt;br&gt;&#xA;这样，只有用户授权后，就可以直接实现消息的送达。&#xA;消息将显示在桌面右下角。Ubuntu默认为Firefox，打开浏览器时，将在上方中间显示消息内容。&lt;br&gt;&#xA;暂时还没有测试后机端是否有相同的效果。(看起来手机端还不支持，使用场景就打了折扣)&lt;/p&gt;</description>
    </item>
    <item>
      <title>通过代理管理远程的路由器</title>
      <link>/it/2023/063009-proxy/</link>
      <pubDate>Fri, 30 Jun 2023 01:23:38 +0000</pubDate>
      <guid>/it/2023/063009-proxy/</guid>
      <description>&lt;p&gt;在家里放了N100作为服务器，安装PVE，All In One。&lt;br&gt;&#xA;家中是电信宽带，有动态公网IP。之前总是无法设置家中的路由器，添加个映射就比较麻烦。&lt;br&gt;&#xA;今天通过Clash在服务器上安装代理服务，然后浏览器中就可以访问到家中的路由器了，方便多了。&lt;br&gt;&#xA;这样，远端的电脑就相当于在家中的环境中，所有N100中的Web服务都可以直接访问。&lt;/p&gt;</description>
    </item>
    <item>
      <title>HttpRouter Go高性能HTTP路由器</title>
      <link>/code/2023/062811-httprouter/</link>
      <pubDate>Wed, 28 Jun 2023 03:46:47 +0000</pubDate>
      <guid>/code/2023/062811-httprouter/</guid>
      <description>&lt;p&gt;HttpRouter 是一个 Go 语言开发的轻量级高性能 HTTP 请求路由。在使用简单的HTTP服务可以拿来用。&lt;br&gt;&#xA;go get -u github.com/julienschmidt/httprouter&lt;br&gt;&#xA;其实它也就三个文件，还是比较小巧的。据说GIN使用的是它。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu设置静态IP</title>
      <link>/it/2023/062811-ubuntuip/</link>
      <pubDate>Wed, 28 Jun 2023 03:04:29 +0000</pubDate>
      <guid>/it/2023/062811-ubuntuip/</guid>
      <description>&lt;p&gt;记录免忘&lt;/p&gt;&#xA;&lt;p&gt;ls /etc/netplan/ 这里找个文件进行编辑，虽然网上说的是01-network-manager-all.yaml,但我用的是00-installer-config.yaml&lt;br&gt;&#xA;把内容改为类似：&lt;/p&gt;</description>
    </item>
    <item>
      <title>思考</title>
      <link>/other/2023/062518-think/</link>
      <pubDate>Sun, 25 Jun 2023 10:37:00 +0000</pubDate>
      <guid>/other/2023/062518-think/</guid>
      <description>&lt;p&gt;光速是限制人类前进的东西。把1秒即达的距离放大给人类几百万倍，这就够你发展个几代人类世纪。&lt;/p&gt;&#xA;&lt;p&gt;49427­°C的“火墙”是第二屏障。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Webhook</title>
      <link>/it/2023/062511-webhook/</link>
      <pubDate>Sun, 25 Jun 2023 03:44:02 +0000</pubDate>
      <guid>/it/2023/062511-webhook/</guid>
      <description>&lt;p&gt;Webhook 是一个 API 概念，是微服务 API 的使用范式之一，也被成为反向 API，即前端不主动发送请求，完全由后端推送；简单来说，就是访问指定网址时，执行一个指定脚本。&lt;br&gt;&#xA;举个常用例子，比如你的好友发了一条朋友圈，后端将这条消息推送给所有其他好友的客户端，就是 Webhook 的典型场景。&lt;br&gt;&#xA;对于我来说，想到的一个应用场景是：当访问i.scwy.net博客时，请求手机更新一次博客（手机脚本会判断是否需要更新）。由客户需求来主动发起更新，而不是由我每次写完后更新博客。完成了一次被动服务。&lt;/p&gt;</description>
    </item>
    <item>
      <title>又讲Linux上绿色PostgreSQL</title>
      <link>/it/2023/062411-postgresql/</link>
      <pubDate>Sat, 24 Jun 2023 03:13:59 +0000</pubDate>
      <guid>/it/2023/062411-postgresql/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://i.scwy.net/it/2019/080218-postgresql-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://i.scwy.net/it/2019/080218-postgresql/&#34;&gt;之前有讲过&lt;/a&gt;，与之稍有些差别。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;先安装一个正常的postgresql数据库： apt install postgresql   安装的是15版本.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;卸载,保留所需：mkdir psql &amp;amp;&amp;amp; cp -rf /usr/lib/postgresql/15 . &amp;amp;&amp;amp; cp -rf /usr/share/postgresql/15 share&lt;br&gt;&#xA;就主要是这两个目录中的文件,暂不知道/usr/share/postgresql/能不能通过配置修改&lt;/p&gt;</description>
    </item>
    <item>
      <title>图片加密技术LSB</title>
      <link>/it/2023/062316-lsb/</link>
      <pubDate>Fri, 23 Jun 2023 08:12:48 +0000</pubDate>
      <guid>/it/2023/062316-lsb/</guid>
      <description>&lt;p&gt;图片的加密LSB（最低有效位）隐写术，能够完全透明的隐藏图像、文件或文本。&lt;/p&gt;&#xA;&lt;p&gt;比如方案文件，有时候不得不给，但又担心泄密问题，就需要类似这些加密技术用于保留最后的一线证据。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cpolar公布内网到公网（穿透）</title>
      <link>/it/2023/061821-cpolar/</link>
      <pubDate>Sun, 18 Jun 2023 13:18:33 +0000</pubDate>
      <guid>/it/2023/061821-cpolar/</guid>
      <description>&lt;p&gt;这是一个用于将内网服务公布到公网的工具。使用简单，文档详细，支持多个平台，价格亲民。内网穿外网又多一个选择。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://i.cpolar.com/m/4rtV&#34;&gt;官网&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://www.cpolar.com/docs&#34;&gt;文档&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://www.cpolar.com/download&#34;&gt;下载&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://pic1.zhimg.com/80/v2-4d757681acf3245a95870433f407d764_720w.webp?source=1940ef5c&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;除了常规的Win、Linux、Mac，还支持Termux、NAS、Docker、OpenWRT、Pi。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows资源管理器添加标记</title>
      <link>/it/2023/061716-tag/</link>
      <pubDate>Sat, 17 Jun 2023 08:58:34 +0000</pubDate>
      <guid>/it/2023/061716-tag/</guid>
      <description>&lt;p&gt;时间久了，文件夹多了，有些一时半会儿就想不起来是干嘛用的，为文件夹和文件添加一个备注是比较有用的。&lt;br&gt;&#xA;以下的方法是为文件夹添加一个标记，作用与备注相同。之所以不用备注，是因为调整资源管理器中的显示标签“标记”比“备注”更容易找到。&lt;br&gt;&#xA;原理很简单，就是修改desktop.ini里的相关项，不管是“标记”还是“备注”，其实都类似。这里只是用了鼠标右键菜单，然后用一个脚本解决，你要写一个程序来做也是一样。杀鸡牛刀，大道至简，够用就行。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Livego 推流/拉流 直播 网页收看</title>
      <link>/it/2023/061523-livego/</link>
      <pubDate>Thu, 15 Jun 2023 15:42:08 +0000</pubDate>
      <guid>/it/2023/061523-livego/</guid>
      <description>&lt;p&gt;使用LiveGo作为服务器直播，实现网页收看。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/gwuhaolin/livego&#34;&gt;LiveGo&lt;/a&gt;运行,建立服务器&lt;/li&gt;&#xA;&lt;li&gt;http://localhost:8090/control/get?room=movie 获取一个服务器上的房间&lt;/li&gt;&#xA;&lt;li&gt;ffmpeg -re -i 深海历险记.mp4 -c copy -f flv rtmp://192.168.8.22/live/rfBd56ti2SMtYvSgD5xAV0YU99zampta7Z7S575KLkIZ9PYk 把视频推给服务器&lt;/li&gt;&#xA;&lt;li&gt;ffplay http://192.168.8.22:7002/live/movie.m3u8  ffplay可以直接收看&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这里我的服务器为192.168.8.2&lt;/p&gt;</description>
    </item>
    <item>
      <title>邮件系统常规检测</title>
      <link>/code/2023/061314-mail_check/</link>
      <pubDate>Tue, 13 Jun 2023 06:21:53 +0000</pubDate>
      <guid>/code/2023/061314-mail_check/</guid>
      <description>&lt;p&gt;因为建了一个&lt;a href=&#34;https://mail.scwy.net&#34;&gt;邮件系统 https://mail.scwy.net&lt;/a&gt;，于是要保证它的安全。写个代码来自动检测，原理是：让此系统的A邮箱自动发一个邮件到B邮箱，再在B邮箱里接收。再从B邮箱从发送，从A邮箱中收取。&lt;/p&gt;</description>
    </item>
    <item>
      <title>搭建ZeroTier私有根服务器,手机也加入私有</title>
      <link>/it/2023/061319-zerotier/</link>
      <pubDate>Tue, 13 Jun 2023 11:01:59 +0800</pubDate>
      <guid>/it/2023/061319-zerotier/</guid>
      <description>&lt;h2 id=&#34;2024624&#34;&gt;2024.6.24&lt;/h2&gt;&#xA;&lt;p&gt;久了，忘了密码。&lt;br&gt;&#xA;cp /opt/key-networks/ztncui/etc/default.passwd passwd&lt;br&gt;&#xA;重启：systemctl restart ztncui&lt;br&gt;&#xA;覆盖了密码文件，密码恢复为admin/password，登陆后会要求你修改密码。&lt;/p&gt;&#xA;&lt;p&gt;刚搬到家里的服务器上，内外网通过ZeroTier转接，今天服务器出现问题，ping不通ZeroTier建立的内网。于是考虑自己用外网服务器建一个根服务器。通常情况建一个卫星服务器MOON就可以了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>服务器搬迁中</title>
      <link>/it/2023/061016-home/</link>
      <pubDate>Sat, 10 Jun 2023 08:26:25 +0000</pubDate>
      <guid>/it/2023/061016-home/</guid>
      <description>&lt;p&gt;将网上云服务器上的内容90%搬迁到N100主机上，使用的宽带是电信10MB上行，对于小应用足够。配合上动态域名，妥妥的私服。为了避免停电的问题，UPS也修好了，停电后支撑这些简单的硬件及网络三五个小时应该不成问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rust尝尝</title>
      <link>/code/2023/060216-rust/</link>
      <pubDate>Fri, 02 Jun 2023 08:32:26 +0000</pubDate>
      <guid>/code/2023/060216-rust/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.rust-lang.org/static/images/rust-logo-blk.svg&#34; alt=&#34;&#34;&gt;&lt;br&gt;&#xA;之前一时兴起，在Win下尝试安装，要求编译环境是vs Studio那一套，直接把我吓退。据说Linux下非常简单，今天一试确实SoEasy。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.rust-lang.org/zh-CN/&#34;&gt;Rust官网&lt;/a&gt;&#xA;&lt;a href=&#34;https://kaisery.github.io/trpl-zh-cn/&#34;&gt;Rust程序设计语言简体中文版&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Maddy Go编写的邮件服务器</title>
      <link>/it/2023/053016-maddy/</link>
      <pubDate>Tue, 30 May 2023 08:54:52 +0000</pubDate>
      <guid>/it/2023/053016-maddy/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.rainloop.net/static/img/logo-256x256-tiny.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;邮件系统：&lt;a href=&#34;https://mail.scwy.net/&#34;&gt;https://mail.scwy.net&lt;/a&gt;  我的邮箱 &lt;a href=&#34;mailto:ease@scwy.net&#34;&gt;ease@scwy.net&lt;/a&gt;  。&lt;br&gt;&#xA;它建立在pve的虚拟服务器上，使用&lt;a href=&#34;https://maddy.email/&#34;&gt;Maddy&lt;/a&gt;。暂时还没有开启注册，还缺少在线修改密码功能。&lt;/p&gt;&#xA;&lt;p&gt;暂时使用&lt;a href=&#34;https://i.scwy.net/other/message.html&#34;&gt;留言的方式申请邮箱&lt;/a&gt;，但不对可靠性作保证。&lt;/p&gt;&#xA;&lt;p&gt;Maddy是Golang编写的邮件系统。&lt;br&gt;&#xA;WebMail使用&lt;a href=&#34;https://www.rainloop.net/&#34;&gt;RainLoop&lt;/a&gt;，整个界面还是比较清爽的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://maddy.email/&#34;&gt;Maddy网站&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://maddy.email/builds/&#34;&gt;Maddy下载&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/foxcpp/maddy&#34;&gt;Maddy Github&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://www.rainloop.net/repository/webmail/rainloop-latest.zip&#34;&gt;RainLoop下载&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;(Maddy下载的文件有点怪，不常用，解压方式：tar -I zstd -xvf archive.tar.zst)&lt;br&gt;&#xA;Maddy安装还是比较简单，我是Ubuntu环境，下载即用，并没有让它使用服务方式。配置文件稍微改一改，把服务器上的mail.scwy.net的证书取回来。maddy run即可。sqlite3小巧绿色，万个左右的用户也应不在话下。&lt;/p&gt;</description>
    </item>
    <item>
      <title>手机及智能眼镜的发展预测</title>
      <link>/it/2023/053011-mob/</link>
      <pubDate>Tue, 30 May 2023 03:18:12 +0000</pubDate>
      <guid>/it/2023/053011-mob/</guid>
      <description>&lt;p&gt;这是一个会保存到子孙后代的博客，即使它不一定会一直在互联网上。所以，让我来预测一下手机及智能眼镜的发展，待后验证。&lt;/p&gt;&#xA;&lt;p&gt;刚在头条上看到一个“变形”的笔记本：只有键盘，显示器为眼镜形态。这是之前已料及的东西。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用天猫智障精灵唤醒电脑</title>
      <link>/it/2023/052808-ali/</link>
      <pubDate>Sun, 28 May 2023 00:25:08 +0000</pubDate>
      <guid>/it/2023/052808-ali/</guid>
      <description>&lt;p&gt;天猫(智障)精灵该升级了，最近ChatGPT类的产品层出不穷，而它却只能做一些极其简单的工作，问个日期、问个天气、计个时，每天用来开关热水器(利用智能开关)。&lt;br&gt;&#xA;等官方升级智能，不知道猴年狗月了，今天这个是利用它来唤醒内网的PC。&lt;br&gt;&#xA;条件是：我有一台外网服务器，一台内网服务器，另外就是你需要唤醒的内网电脑。&lt;br&gt;&#xA;同样的原理，内网服务器其实可以用EPS32来代替。&lt;br&gt;&#xA;原理是：对天猫精灵喊话(关键词、技能)，阿里收到指令，转发到外网服务器，外网服务器通过代理转到内网服务器完成逻辑操作（确认用户、安全、完成WOL等）&lt;br&gt;&#xA;外网服务器只是完成一个数据中转，如果有一个动态外网IP转静态的域名，也可以省略它。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Screego屏幕共享</title>
      <link>/it/2023/052209-screego/</link>
      <pubDate>Mon, 22 May 2023 01:37:50 +0000</pubDate>
      <guid>/it/2023/052209-screego/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/screengo/server&#34;&gt;Github&lt;/a&gt; &lt;a href=&#34;https://screengo.net&#34;&gt;文档&lt;/a&gt; &lt;a href=&#34;https://app.screego.net/&#34;&gt;网页共享屏幕&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://xiazai-fd.zol-img.com.cn/g6/M00/09/02/ChMkKWE7JbiIdOVpAABx58oURDcAATlYAP9usYAAHH_222.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;开源的多用户屏幕共享工具，安装方便，使用简单&lt;br&gt;&#xA;通过 WebRTC 安全传输&lt;br&gt;&#xA;低延迟/高分辨率&lt;br&gt;&#xA;通过Docker /单个二进制文件进行简单安装&lt;/p&gt;&#xA;&lt;p&gt;今天我的应用场景是：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Caddy插件</title>
      <link>/it/2023/051818-caddy-plugin/</link>
      <pubDate>Thu, 18 May 2023 10:09:02 +0000</pubDate>
      <guid>/it/2023/051818-caddy-plugin/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://i.scwy.net/it/2023/051614-caddy/&#34;&gt;接上回，考虑如何实现动态IP的域名访问&lt;/a&gt;，合适的方法还是使用插件的形式来完成。于是学习一下它的插件实现。&lt;br&gt;&#xA;“抄”是学习的第一步。看网上虽然有些零碎的文章，甚至有连载，但都看得云里雾里。&lt;/p&gt;&#xA;&lt;p&gt;以下代码是实现网络唤醒的，它可以用在内网唤醒，比如有多个(pve)集群，而家里的服务器，没用的时候就关机或休眠。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Caddy实现动态IP访问</title>
      <link>/it/2023/051614-caddy/</link>
      <pubDate>Tue, 16 May 2023 06:57:06 +0000</pubDate>
      <guid>/it/2023/051614-caddy/</guid>
      <description>&lt;p&gt;还有其它正规方法，待研究学习。&lt;/p&gt;&#xA;&lt;h3 id=&#34;用环境变量实现&#34;&gt;用环境变量实现&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;运行：sudo ./caddy run &amp;ndash;config Caddyfile &amp;ndash;envfile ./1.env&lt;br&gt;&#xA;1.env保持为空即可&lt;br&gt;&#xA;Caddyfile其中：&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;aaa.scwy.net {&#xA;        reverse_proxy {$HOMEIP}:8181&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这里调用了一个环境变量，但它是在读取配置文件时自动替换进去的（虽然说一个env.HOMEIP这样的，但没成功），所以在设置了环境变量后，还需要reload.&lt;br&gt;&#xA;2. export HOMEIP=82.148.17.1&lt;br&gt;&#xA;3. caddy reload&lt;br&gt;&#xA;4. 接下来看如何实现服务器和客户端的对接，以修改环境变量&lt;br&gt;&#xA;懒一点，用个golang实现，不再学习Caddy的插件编码方法。这里有一个问题注意：golang的环境变量只针对当前运行环境，那我设置来干嘛。所以通过shell来设置。&lt;br&gt;&#xA;然后就是命令行访问或者定时任务   curl -H &amp;ldquo;token:123123&amp;rdquo; scwy.net:8181/homeip  这就设置了HOMEip这个环境变量为客户端IP，代码自动reload。&#xA;适用于Linux环境，看shell就知道。&lt;br&gt;&#xA;整体实现虽不优雅，但看起来就实现了动态IP。&lt;/p&gt;</description>
    </item>
    <item>
      <title>C-l-a-s-h不错的工具 (已私藏)</title>
      <link>/it/2023/051222-clash-1/</link>
      <pubDate>Fri, 12 May 2023 14:31:17 +0000</pubDate>
      <guid>/it/2023/051222-clash-1/</guid>
      <description>&lt;p&gt;有时候网上也不便多说。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/Dreamacro/clash/wiki&#34;&gt;它的wiki&lt;/a&gt;有些资料可看。&#xA;学习一下别人的配置&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;port: 7890&#xA;socks-port: 7891&#xA;allow-lan: true&#xA;bind-address: &amp;#39;*&amp;#39;&#xA;mode: rule&#xA;log-level: info&#xA;# 外部控制入口，设置为0.0.0.0:9090，这样从外网和内网都能进入&#xA;external-controller: &amp;#39;0.0.0.0:9090&amp;#39;&#xA;# 外部控制入口密码，自行设置。不想设密码就把下面一行注释掉即可。&#xA;secret: &amp;#34;123456&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;默认情况下，Clash读取位于$HOME/.config/clashconfig.yaml的配置文件。如果不存在，Clash 将生成一个最小的配置文件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>给家里的服务器加个温控风扇</title>
      <link>/it/2023/050914-fan/</link>
      <pubDate>Tue, 09 May 2023 06:20:29 +0000</pubDate>
      <guid>/it/2023/050914-fan/</guid>
      <description>&lt;p&gt;最近将家里弃用的平板电脑做成&lt;a href=&#34;https://i.scwy.net/it/2023/050513-pve/&#34;&gt;pve虚拟机&lt;/a&gt;发挥点余热。原来这台平板电脑就是个被动散热，做服务器热不得，一热就降频，还死机。&lt;br&gt;&#xA;购买一个USB继电器，它模拟一个串口，通过发送指令让继电器开合。至于继电器之后，你可以随意发挥，这里就用来接小巧的USB风扇。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wifi连接监控程序</title>
      <link>/code/2023/050821-wifi/</link>
      <pubDate>Mon, 08 May 2023 13:34:57 +0000</pubDate>
      <guid>/code/2023/050821-wifi/</guid>
      <description>&lt;p&gt;买了一根wifi天线，需要查看一下它的效果。做一个动态图看看。&lt;br&gt;&#xA;使用了giu库作了GUI。左键拖动，右键关闭。附加显示了内外网IP，以及断网报警。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ntfy PUT/POST消息到您的手机上</title>
      <link>/it/2023/050514-ntfy/</link>
      <pubDate>Fri, 05 May 2023 06:10:54 +0000</pubDate>
      <guid>/it/2023/050514-ntfy/</guid>
      <description>&lt;p&gt;在手机上安装好客户端，订阅服务器消息，任何人将可以发送消息到您的手机上。服务器可以自建，也可以用官网，使用简单。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;主页：https://ntfy.sh&lt;/li&gt;&#xA;&lt;li&gt;GitHub（服务端）：https://github.com/binwiederhier/ntfy&lt;/li&gt;&#xA;&lt;li&gt;GitHub（安卓端）：https://github.com/binwiederhier/ntfy-android&lt;/li&gt;&#xA;&lt;li&gt;文档：https://docs.ntfy.sh/publish/&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;当然，它也有苹果客户端。可能苹果消息机制的原因，我没有收到信息。&lt;br&gt;&#xA;服务端居然是用Golang写的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Proxmox Virtual Environment 虚拟机技巧及资料收集</title>
      <link>/it/2023/050513-pve/</link>
      <pubDate>Fri, 05 May 2023 05:21:20 +0000</pubDate>
      <guid>/it/2023/050513-pve/</guid>
      <description>&lt;p&gt;2025.8.7&lt;/p&gt;&#xA;&lt;p&gt;当前最新版本9.0,准备升级中.记录一下PVE主机运行近50天.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../050513-pve-04.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;2024.8.26&lt;br&gt;&#xA;通过普通的Debian修改主机名，导致pve出错。还需要修改类似 /etc/pve/nodes/ 目录下的东西。不知道是否有简单的方法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>手机OCR,兼谈个人微信自动收费和博客微信收费</title>
      <link>/code/2023/042817-ocr/</link>
      <pubDate>Fri, 28 Apr 2023 09:02:09 +0000</pubDate>
      <guid>/code/2023/042817-ocr/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://i.scwy.net/it/2023/042810-paddleocr/&#34;&gt;上一篇文章提到了Paddleocr&lt;/a&gt;,其实这篇也是它.&lt;br&gt;&#xA;静态博客利用个人微信进行收费原理:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;文章内容加密,显示随机编号&lt;/li&gt;&#xA;&lt;li&gt;服务器上注册此编号,并与文章地址关联.&lt;/li&gt;&#xA;&lt;li&gt;循环监听手机个人微信收款信息.通过收款时用户的备注,获取到文章编号&lt;/li&gt;&#xA;&lt;li&gt;收款确认,将收款标识返回给服务器&lt;/li&gt;&#xA;&lt;li&gt;文章循环获取收款标识,如已收款,则显示加密内容&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;思路不是重点,以下代码是第3点的解决: 循环监听手机收款信息 部份代码&lt;/p&gt;</description>
    </item>
    <item>
      <title>Paddleocr 飞桨 Python的OCR库</title>
      <link>/it/2023/042810-paddleocr/</link>
      <pubDate>Fri, 28 Apr 2023 02:53:17 +0000</pubDate>
      <guid>/it/2023/042810-paddleocr/</guid>
      <description>&lt;p&gt;之前有文章: &lt;a href=&#34;https://i.scwy.net/code/2022/100614-paddleocr/&#34;&gt;https://i.scwy.net/code/2022/100614-paddleocr/&lt;/a&gt; 但似乎原文件遗失,这里再补一下.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/PaddlePaddle/PaddleOCR&#34;&gt;Github&lt;/a&gt;&lt;br&gt;&#xA;我在Win10下搭建没有什么问题,识别率还是不错.可惜在Pi Zero上没有搭建成功.也试了tesseract-ocr,识别率很低.&lt;br&gt;&#xA;如果不怕麻烦,可以自己搭建一个OCR服务器,加上手机截图,就可以继续之前暂停的&amp;quot;个人微信自动收钱并识别&amp;quot;的功能.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python使用微软TTS</title>
      <link>/code/2023/042412-tts/</link>
      <pubDate>Mon, 24 Apr 2023 04:08:15 +0000</pubDate>
      <guid>/code/2023/042412-tts/</guid>
      <description>&lt;h3 id=&#34;1&#34;&gt;1&lt;/h3&gt;&#xA;&lt;p&gt;pip install pyttsx3&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import pyttsx3&#xA;&#xA;tts = pyttsx3.init()&#xA;&#xA;tts.say(&amp;#34;hello world&amp;#34;) # 可以直接播放&#xA;# tts.save_to_file(&amp;#34;hello world&amp;#34;,&amp;#34;test.mp3&amp;#34;) # 可以输出到文件&#xA;tts.runAndWait()&#xA;tts.stop() &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;2&#34;&gt;2&lt;/h3&gt;&#xA;&lt;p&gt;pip3 install edge-tts&lt;/p&gt;&#xA;&lt;p&gt;edge-tts &amp;ndash;list-voices  # 有哪些模型可用&lt;/p&gt;&#xA;&lt;p&gt;示例:&lt;br&gt;&#xA;edge-tts &amp;ndash;text &amp;ldquo;Hello, world!&amp;rdquo; &amp;ndash;write-media hello.mp3&lt;br&gt;&#xA;edge-tts &amp;ndash;voice zh-CN-XiaoyiNeural &amp;ndash;text &amp;ldquo;你好啊，我是智能语音助手&amp;rdquo; &amp;ndash;write-media hello_in_cn.mp3&lt;br&gt;&#xA;edge-tts &amp;ndash;rate=-50% &amp;ndash;voice zh-CN-XiaoyiNeural &amp;ndash;text &amp;ldquo;你好啊，我是智能语音助手&amp;rdquo; &amp;ndash;write-media hello_in_cn.mp3&lt;br&gt;&#xA;edge-tts &amp;ndash;volume=-50%  &amp;ndash;voice zh-CN-XiaoyiNeural &amp;ndash;text &amp;ldquo;你好啊，我是智能语音助手&amp;rdquo; &amp;ndash;write-media hello_in_cn.mp3&lt;br&gt;&#xA;edge-playback &amp;ndash;text &amp;ldquo;兄弟你好&amp;rdquo;  &amp;ndash;voice zh-CN-XiaoyiNeural  #直接播放,需要安装mpv&lt;/p&gt;</description>
    </item>
    <item>
      <title>Whisper 开源免费离线语音识别</title>
      <link>/it/2023/042111-whisper/</link>
      <pubDate>Fri, 21 Apr 2023 03:46:38 +0000</pubDate>
      <guid>/it/2023/042111-whisper/</guid>
      <description>&lt;p&gt;项目中需要使用到语音识别,之前是使用的百度在线方式,网上的代码也较多.今天发现百度收费了,穷人就得自己想办法.&lt;br&gt;&#xA;发现whisper,号称可以支持99种语言.&lt;br&gt;&#xA;本机安装,项目中可以自己建一个语音识别服务器来使用.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Multipass 轻量VM管理器</title>
      <link>/it/2023/040112-multipass/</link>
      <pubDate>Sat, 01 Apr 2023 04:29:35 +0000</pubDate>
      <guid>/it/2023/040112-multipass/</guid>
      <description>&lt;p&gt;Multipass 是一个轻量级 VM 管理器，支持 Linux、Windows 与 macOS，这是为希望使用单个命令提供全新 Ubuntu 环境的开发人员而设计的。&lt;/p&gt;&#xA;&lt;p&gt;使用 Linux 上的 KVM、Windows 上的 Hyper-V 和 macOS 上的 HyperKit 来以最小的开销运行 VM，同时它还可以在 Windows 和 macOS 上使用 VirtualBox。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pi FM: 用树莓派做FM主机</title>
      <link>/it/2023/032813-pifm/</link>
      <pubDate>Tue, 28 Mar 2023 05:04:38 +0000</pubDate>
      <guid>/it/2023/032813-pifm/</guid>
      <description>&lt;p&gt;用树莓派做FM主机,是一个很老的项目.网上资料也比较多.由于在做一个项目中,Pi附加的迷你音箱音量有限,所以考虑一种附加形式.把这个老项目翻出来.&lt;/p&gt;</description>
    </item>
    <item>
      <title>用树莓派爆破wifi,破解后自动通知</title>
      <link>/it/2023/032623-wifi/</link>
      <pubDate>Sun, 26 Mar 2023 15:23:16 +0000</pubDate>
      <guid>/it/2023/032623-wifi/</guid>
      <description>&lt;p&gt;爆破是没有办法的好办法,挂个Pi0之类的,让它没日没夜的工作.或许可以多挂两张无线网卡,同时进行.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;扫描AP: sudo iwlist wlan0 scan | grep ESSID&lt;/li&gt;&#xA;&lt;li&gt;生成配置文件: wpa_passphrase SSID(wifi名称) PWD(wifi密码) &amp;gt; xxx.conf&lt;/li&gt;&#xA;&lt;li&gt;连接网络: wpa_supplicant -c wpa_supplicant.conf -i wlan0&lt;/li&gt;&#xA;&lt;li&gt;延时判断连接是否成功: iwconfig wlan0 | grep &amp;ldquo;Access Point&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;断开配置: sudo killall wpa_supplicant&lt;/li&gt;&#xA;&lt;li&gt;重复2&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;根据以上原理实现&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESP32音频播放器</title>
      <link>/it/2023/031421-esp32/</link>
      <pubDate>Tue, 14 Mar 2023 13:24:56 +0000</pubDate>
      <guid>/it/2023/031421-esp32/</guid>
      <description>&lt;p&gt;原文地址: &lt;a href=&#34;https://www.yiboard.com/thread-1566-1-1.html&#34;&gt;https://www.yiboard.com/thread-1566-1-1.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.yiboard.com/data/attachment/forum/202012/29/100033uiwo3swczk112ip0.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.yiboard.com/data/attachment/forum/202012/29/100049ui78n7t03rku87e7.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这是一个播放wav的例子,在该代码中，我们将使用XTronical提供的XT DAC音频库。可以&lt;a href=&#34;https://www.xtronical.com/the-dacaudio-library-download-and-installation/&#34;&gt;从此处下载XT DAC音频库&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;代码本身比较简单, 这里&lt;a href=&#34;https://circuitdigest.com/sites/default/files/ESP32-Audio-player-SoundData.zip&#34;&gt;可以下载完整示例&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux下捕获键盘输入</title>
      <link>/code/2023/031323-keyinput/</link>
      <pubDate>Mon, 13 Mar 2023 15:29:27 +0000</pubDate>
      <guid>/code/2023/031323-keyinput/</guid>
      <description>&lt;p&gt;源于linux的root下,不能正常的获取到终端按键.使用直接读取硬件的方式应该能解决.&lt;br&gt;&#xA;原文讲解: &lt;a href=&#34;https://janczer.github.io/work-with-dev-input/&#34;&gt;https://janczer.github.io/work-with-dev-input/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;bytes&amp;#34;&#xA;&#x9;&amp;#34;encoding/binary&amp;#34;&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;os&amp;#34;&#xA;&#x9;&amp;#34;time&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;f, err := os.Open(&amp;#34;/dev/input/event10&amp;#34;)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(err)&#xA;&#x9;}&#xA;&#x9;defer f.Close()&#xA;&#x9;b := make([]byte, 24)&#xA;&#x9;for {&#xA;&#x9;&#x9;f.Read(b)&#xA;&#x9;&#x9;sec := binary.LittleEndian.Uint64(b[0:8])&#xA;&#x9;&#x9;usec := binary.LittleEndian.Uint64(b[8:16])&#xA;&#x9;&#x9;t := time.Unix(int64(sec), int64(usec))&#xA;&#x9;&#x9;fmt.Println(t)&#xA;&#x9;&#x9;var value int32&#xA;&#x9;&#x9;typ := binary.LittleEndian.Uint16(b[16:18])&#xA;&#x9;&#x9;code := binary.LittleEndian.Uint16(b[18:20])&#xA;&#x9;&#x9;binary.Read(bytes.NewReader(b[20:]), binary.LittleEndian, &amp;amp;value)&#xA;&#x9;&#x9;fmt.Printf(&amp;#34;type: %x\ncode: %d\nvalue: %d\n&amp;#34;, typ, code, value)&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;p&gt;以上代码有误,理论没错,参数其它库作了一些修改.&lt;br&gt;&#xA;在以下代码中,我只定义了6个键,因为我使用的是6个键位的键盘.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang非阻塞获取命令行按键</title>
      <link>/code/2023/030909-key/</link>
      <pubDate>Thu, 09 Mar 2023 01:52:23 +0000</pubDate>
      <guid>/code/2023/030909-key/</guid>
      <description>&lt;p&gt;一般获取命令行按键是阻塞工的，之前使用github.com/eiannone/keyboard库，远程获取键盘没问题，但本地居然不行。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;fmt&amp;#34;&#xA;    &amp;#34;os&amp;#34;&#xA;    &amp;#34;time&amp;#34;&#xA;    &amp;#34;os/exec&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;    ch := make(chan string)&#xA;    go func(ch chan string) {&#xA;        // disable input buffering&#xA;        exec.Command(&amp;#34;stty&amp;#34;, &amp;#34;-F&amp;#34;, &amp;#34;/dev/tty&amp;#34;, &amp;#34;cbreak&amp;#34;, &amp;#34;min&amp;#34;, &amp;#34;1&amp;#34;).Run()&#xA;        // do not display entered characters on the screen&#xA;        exec.Command(&amp;#34;stty&amp;#34;, &amp;#34;-F&amp;#34;, &amp;#34;/dev/tty&amp;#34;, &amp;#34;-echo&amp;#34;).Run()&#xA;        var b []byte = make([]byte, 1)&#xA;        for {&#xA;            os.Stdin.Read(b)&#xA;            ch &amp;lt;- string(b)&#xA;        }&#xA;    }(ch)&#xA;&#xA;    for {&#xA;        select {&#xA;            case stdin, _ := &amp;lt;-ch:&#xA;                fmt.Println(&amp;#34;Keys pressed:&amp;#34;, stdin)&#xA;            default:&#xA;                fmt.Println(&amp;#34;Working..&amp;#34;)&#xA;        }&#xA;        time.Sleep(time.Millisecond * 100)&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Golang播放wav</title>
      <link>/code/2023/030416-playwav/</link>
      <pubDate>Sat, 04 Mar 2023 08:23:28 +0000</pubDate>
      <guid>/code/2023/030416-playwav/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;        &amp;#34;os&amp;#34;&#xA;&#xA;        &amp;#34;github.com/aerth/playwav&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;        if len(os.Args) &amp;lt; 2 {&#xA;                print(&amp;#34;What .WAV file to play?\n&amp;#34;)&#xA;                return&#xA;        }&#xA;&#xA;        for _, filename := range os.Args[1:] {&#xA;                print(filename + &amp;#34;\n&amp;#34;)&#xA;                wavinfo, err := playwav.FromFile(filename)&#xA;                if err != nil {&#xA;                        print(err.Error() + &amp;#34;\n&amp;#34;)&#xA;                }&#xA;&#xA;                print(wavinfo + &amp;#34;\n&amp;#34;)&#xA;        }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Golang Shell命令中止信号</title>
      <link>/code/2023/021722-shell/</link>
      <pubDate>Fri, 17 Feb 2023 14:40:29 +0000</pubDate>
      <guid>/code/2023/021722-shell/</guid>
      <description>&lt;p&gt;运行一个指令，并在几秒后中止它。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;fmt&amp;#34;&#xA;    &amp;#34;os/exec&amp;#34;&#xA;    &amp;#34;time&amp;#34;&#xA;    &amp;#34;syscall&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;    cmd := exec.Command(&amp;#34;arecord&amp;#34;, &amp;#34;1.wav&amp;#34;)&#xA;    start := time.Now()&#xA;    time.AfterFunc(10*time.Second, func() {&#xA;      //cmd.Process.Kill()&#xA;      cmd.Process.Signal(syscall.SIGINT)&#xA;    })&#xA;    err := cmd.Run()&#xA;    fmt.Printf(&amp;#34;pid=%d duration=%s err=%s\n&amp;#34;, cmd.Process.Pid, time.Since(start), err)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>AutoHotkey接收网络指令</title>
      <link>/code/2023/021616-autohotkey/</link>
      <pubDate>Thu, 16 Feb 2023 08:50:23 +0000</pubDate>
      <guid>/code/2023/021616-autohotkey/</guid>
      <description>&lt;p&gt;想通过网络来控制主机，通常我的办法应该是使用Golang。不过即使学了AutoHotkey，就应该多实践一下。&lt;br&gt;&#xA;服务端还是需要通过外网挂接一个服务程序的。比如我使用了ZeroTier，把服务挂到内网的Pi3上也没问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>cnchar 功能全面,多端支持的汉字拼音笔画js库</title>
      <link>/it/2023/021110-cnchar/</link>
      <pubDate>Sat, 11 Feb 2023 02:14:30 +0000</pubDate>
      <guid>/it/2023/021110-cnchar/</guid>
      <description>&lt;p&gt;可以用来方便小学生，比如生成个拼音，笔顺笔画，读音什么的。&lt;br&gt;&#xA;我用它做了一个显示笔画、拼音的小工具：&lt;a href=&#34;https://i.scwy.net/it/2023/%E6%8B%BC%E9%9F%B3%E7%AC%94%E7%94%BB.html&#34;&gt;https://i.scwy.net/it/2023/拼音笔画.html&lt;/a&gt;&lt;br&gt;&#xA;因为是调用的网上库文件，显示汉字笔画时，速度似乎不快。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python用视频作桌面</title>
      <link>/code/2023/020713-videowall/</link>
      <pubDate>Tue, 07 Feb 2023 05:46:39 +0000</pubDate>
      <guid>/code/2023/020713-videowall/</guid>
      <description>&lt;p&gt;发现一个问题：经由其它视频桌面使用后，再运行以下代码，可以实现正常的视频桌面功能（即桌面图标可以看到并点击）。而它自己独立运行时，桌面图标不见了。&lt;br&gt;&#xA;尴尬&amp;hellip;也不知道问题出在哪里&lt;/p&gt;</description>
    </item>
    <item>
      <title>BeeLink 零刻迷你电脑 GRT6使用及建议</title>
      <link>/it/2023/020322-beelink/</link>
      <pubDate>Fri, 03 Feb 2023 14:51:54 +0000</pubDate>
      <guid>/it/2023/020322-beelink/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://img.bee-link.com/media/catalog/product/g/1e/g1eu9ek7fjuq2px1665709770.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;过年败了一个零刻迷你电脑，陆续研究一下，分享一下使用心得，以及一些改进建议。&lt;/p&gt;&#xA;&lt;h2 id=&#34;配置&#34;&gt;配置：&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;AMD Ryzen 9 6900HX 8核16线 基本时钟 3.3GHz，最大加速时钟 4.9GHz&lt;/li&gt;&#xA;&lt;li&gt;双DDR5-4800 SO-DIMM 最大64GB&lt;/li&gt;&#xA;&lt;li&gt;168mm * 120mm * 43mm&lt;/li&gt;&#xA;&lt;li&gt;M.2 2280 SATA3 SSD + PCIe4.0*4 M.2 2280 SSD&lt;/li&gt;&#xA;&lt;li&gt;120W 19V-6.32A&lt;/li&gt;&#xA;&lt;li&gt;4HDMI/3HDMI&lt;/li&gt;&#xA;&lt;li&gt;GPU Radeon 680M&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://img.bee-link.com/media/catalog/product/2/fn/2fn13pz0xpa8eae1665709765.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>洁癖：Pi0单文件语音播放</title>
      <link>/code/2023/010921-pi0_sound/</link>
      <pubDate>Mon, 09 Jan 2023 13:33:06 +0000</pubDate>
      <guid>/code/2023/010921-pi0_sound/</guid>
      <description>&lt;p&gt;之前是用mplayer来播放音频，比如Pi0启动时的提示，IP地址的提示，用户登陆的提示等。当没有连网时，需要语音提示一般就是制作多个音频文件来进行播放。&lt;br&gt;&#xA;之前的IP播报，因为涉及不同的数字组合，将多个音频合为一个音频文件，通过多次mplayer进行播放，但实际中发现每个数字之间的时间延迟较大。于是考虑自己做一个可以指定起始时间的音频播放程序。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang命令行通道</title>
      <link>/code/2023/010810-pipe/</link>
      <pubDate>Sun, 08 Jan 2023 02:01:07 +0000</pubDate>
      <guid>/code/2023/010810-pipe/</guid>
      <description>&lt;p&gt;从命令行获取信息，例如 ls | 我的程序.exe&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;io/ioutil&amp;#34;&#xA;&#x9;&amp;#34;os&amp;#34;&#xA;)&#xA;&#xA;func OnError(e error) {&#xA;&#x9;if e != nil {&#xA;&#x9;&#x9;fmt.Println(e)&#xA;&#x9;}&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;info, err := os.Stdin.Stat()&#xA;&#x9;OnError(err)&#xA;&#x9;if (info.Mode() &amp;amp; os.ModeNamedPipe) == os.ModeNamedPipe {&#xA;&#x9;&#x9;bytes, err := ioutil.ReadAll(os.Stdin)&#xA;&#x9;&#x9;OnError(err)&#xA;&#x9;&#x9;fmt.Println(string(bytes))&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>关于错误提示：mp3: mp3: only MPEG version 1 (want 3; got 2) is supported</title>
      <link>/code/2023/010723-mp3/</link>
      <pubDate>Sat, 07 Jan 2023 15:36:53 +0000</pubDate>
      <guid>/code/2023/010723-mp3/</guid>
      <description>&lt;p&gt;在使用github.com/faiface/beep库作用一款mp3播放器时，提示错误 &amp;ldquo;mp3: mp3: only MPEG version 1 (want 3; got 2) is supported&amp;rdquo;。&lt;br&gt;&#xA;网上找遍了没有发现对此的解决方法(后来想想，估计是别人没用过老库？)。通过对代码的跟踪，发现它是调用github.com/hajimehoshi/go-mp3库。这不是重点&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pi0 &#43; Python BLE</title>
      <link>/code/2023/010713-python-ble/</link>
      <pubDate>Sat, 07 Jan 2023 05:19:01 +0000</pubDate>
      <guid>/code/2023/010713-python-ble/</guid>
      <description>&lt;p&gt;在PiZeroW上运行的BLE服务，可以添加Wifi，重启，播报IP地址等。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import random,os&#xA;import binascii&#xA;from bluezero import async_tools, adapter, peripheral&#xA;&#xA;PI_SRVC = &amp;#39;12341000-1234-1234-1234-123456789ABC&amp;#39;&#xA;PI_CMD_CHARA = &amp;#39;1001&amp;#39;&#xA;PI_INFO_CHARA = &amp;#39;1002&amp;#39;&#xA;cmd = &amp;#39;&amp;#39;&#xA;&#xA;# 功能：获取CPU温度&#xA;def cmd_cpu_temp():&#xA;    p=os.popen(&amp;#39;cat /sys/class/thermal/thermal_zone0/temp&amp;#39;)&#xA;    temp=int(p.read())&#xA;    p.close()&#xA;    return list(temp.to_bytes(3, byteorder=&amp;#39;little&amp;#39;, signed=True))&#xA;&#xA;# 功能：播报IP地址&#xA;def cmd_voice_ip():&#xA;    p=os.popen(&amp;#34;/home/pi/tools/PlayIP&amp;#34;)&#xA;    p.close()&#xA;&#xA;# 功能：LED滚动&#xA;def cmd_led_scroll():&#xA;    p=os.popen(&amp;#34;/home/pi/tools/led_scroll.sh&amp;#34;)&#xA;    p.close()&#xA;&#xA;# 功能: 重启动&#xA;def cmd_reboot():&#xA;    p=os.popen(&amp;#34;mplayer -quiet /home/pi/sound/reboot.mp3;sudo reboot&amp;#34;)&#xA;    p.close()&#xA;&#xA;# 功能: 关机&#xA;def cmd_poweroff():&#xA;    p=os.popen(&amp;#34;mplayer -quiet /home/pi/sound/power.mp3;sudo poweroff&amp;#34;)&#xA;    p.close()&#xA;&#xA;# 功能: 添加WIFI&#xA;def cmd_wifiset(value):&#xA;    wifi=value.split(&amp;#34;:&amp;#34;)&#xA;    if len(wifi)==3:&#xA;       wifi_name=wifi[1]&#xA;       wifi_pass=wifi[2]&#xA;    print(wifi_name, &amp;#34; &amp;#34;, wifi_pass)&#xA;    p=os.popen(&amp;#34;/home/pi/tools/add_wifi.sh &amp;#34;+ wifi_name + &amp;#34; &amp;#34; + wifi_pass)&#xA;    p.close()&#xA;&#xA;&#xA;#  命令写入&#xA;def cmd_write(value, options):&#xA;    global cmd&#xA;    cmd = bytes(value).decode(&amp;#39;utf-8&amp;#39;)&#xA;    print(&amp;#39;原始字节:&amp;#39;, value)&#xA;    print(&amp;#39;参数:&amp;#39;, options)&#xA;    print(&amp;#39;文本:&amp;#39;, cmd)&#xA;    if cmd==&amp;#34;ip&amp;#34;:&#xA;       cmd_voice_ip()&#xA;    elif cmd==&amp;#34;temp&amp;#34;:&#xA;       cmd_cpu_temp()&#xA;    elif cmd==&amp;#34;led&amp;#34;:&#xA;       cmd_led_scroll()&#xA;    elif cmd==&amp;#34;rst&amp;#34;:&#xA;       cmd_reboot()&#xA;    elif cmd==&amp;#34;off&amp;#34;:&#xA;       cmd_poweroff()&#xA;    elif cmd.find(&amp;#34;wifi&amp;#34;)==0:&#xA;       cmd_wifiset(cmd)&#xA;    else:&#xA;       pass&#xA;&#xA;# 供信息回调：等待完成&#xA;def info_update(chara):&#xA;    global cmd&#xA;    if cmd==&amp;#34;&amp;#34;:&#xA;       value=cmd_cpu_temp()&#xA;       chara.set_value(value)&#xA;    else:&#xA;       value = cmd&#xA;       chara.set_value(value.encode(&amp;#39;utf-8&amp;#39;))&#xA;    cmd = &amp;#34;&amp;#34;&#xA;    return chara.is_notifying and value!=&amp;#34;&amp;#34;&#xA;&#xA;# 信息回调&#xA;def info_notify_callback(notifying, chara):&#xA;    if notifying:&#xA;        async_tools.add_timer_seconds(3, info_update, chara)&#xA;&#xA;def main(adapter_address):&#xA;    server = peripheral.Peripheral( adapter_address, local_name=&amp;#39;智能助手&amp;#39;, appearance=1344) # 创建外设&#xA;    server.add_service( srv_id=1, uuid=PI_SRVC, primary=True)  # 添加服务&#xA;    # 添加特征:命令功能&#xA;    server.add_characteristic(srv_id=1, chr_id=3, uuid=PI_CMD_CHARA, value=[], notifying=False, flags=[&amp;#39;write&amp;#39;,&amp;#39;write-without-response&amp;#39;],&#xA;                                write_callback=cmd_write, read_callback=None, notify_callback=None)&#xA;    # 添加特征:信息功能&#xA;    server.add_characteristic(srv_id=1, chr_id=2, uuid=PI_INFO_CHARA, value=[], notifying=False, flags=[&amp;#39;notify&amp;#39;],&#xA;                                read_callback=None, write_callback=None, notify_callback=info_notify_callback )&#xA;    server.publish()  # 发布设备并启动事件循环&#xA;&#xA;if __name__ == &amp;#39;__main__&amp;#39;:&#xA;    main(list(adapter.Adapter.available())[0].address)  # 获取默认适配器地址并将其传递给main&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Golang控制GPIO：用Golang获取ReSpeaker的按键</title>
      <link>/code/2022/123013-button/</link>
      <pubDate>Fri, 30 Dec 2022 05:25:30 +0000</pubDate>
      <guid>/code/2022/123013-button/</guid>
      <description>&lt;p&gt;继续对ReSpeaker主板的控制或获取。此主板上板载一个按键，它是连接到GPIO17上的。其它GPIO端口的获取或输出是类似的。&lt;/p&gt;&#xA;&lt;p&gt;两个未研究的库：https://github.com/stianeikeland/go-rpio，https://github.com/brian-armstrong/gpio。总的来说，Linux下都是操作文件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang控制SPI设备：用Goalng控制ReSpeaker的LED灯</title>
      <link>/code/2022/122911-led/</link>
      <pubDate>Thu, 29 Dec 2022 03:29:17 +0000</pubDate>
      <guid>/code/2022/122911-led/</guid>
      <description>&lt;p&gt;之前的&lt;a href=&#34;https://i.scwy.net/it/2022/122909-respeaker/&#34;&gt;文章提到以前购买的ReSpeaker扩展板&lt;/a&gt;，用Python控制总觉得有点不爽，于是搜索Golang的实现方法。&lt;/p&gt;&#xA;&lt;p&gt;另外还有一个库，没有仔细看：&lt;a href=&#34;https://github.com/kidoman/embd&#34;&gt;https://github.com/kidoman/embd&lt;/a&gt;&lt;br&gt;&#xA;再就是GPIO控制 &lt;a href=&#34;https://github.com/stianeikeland/go-rpio&#34;&gt;https://github.com/stianeikeland/go-rpio&lt;/a&gt;&lt;br&gt;&#xA;这是本程序使用的库&lt;a href=&#34;https://github.com/goiot/devices&#34;&gt;https://github.com/goiot/devices&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;以下代码实现了对SPI设备的控制。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import (&#xA;        &amp;#34;bytes&amp;#34;&#xA;        &amp;#34;encoding/binary&amp;#34;&#xA;        &amp;#34;github.com/goiot/devices/dotstar&amp;#34;&#xA;        &amp;#34;golang.org/x/exp/io/spi&amp;#34;&#xA;)&#xA;&#xA;const n = 3 // LED数量，看起来它是可以控制一个灯带的&#xA;&#xA;// 要将整形变为Byte型。这里只用了一位，所以作了修改。&#xA;func IntToBytes(n int) byte {&#xA;  x := int32(n)&#xA;  bytesBuffer := bytes.NewBuffer([]byte{})&#xA;  binary.Write(bytesBuffer, binary.BigEndian, x)&#xA;  return bytesBuffer.Bytes()[3]&#xA;}&#xA;&#xA;func main() {&#xA;        d, err := dotstar.Open(&amp;amp;spi.Devfs{Dev: &amp;#34;/dev/spidev0.1&amp;#34;, Mode: spi.Mode3}, n) // 这个/dev可以用ls查看&#xA;        if err != nil {&#xA;                panic(err)&#xA;        }&#xA;&#xA;        for i := 0; i &amp;lt; n; i++ {&#xA;                d.SetRGBA(i, dotstar.RGBA{0, IntToBytes(i*30+100), 0, 100}) // 颜色控制&#xA;        }&#xA;&#xA;        if err := d.Draw(); err != nil {&#xA;                panic(err)&#xA;        }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;p&gt;改个版，命令行控制三个LED&lt;/p&gt;</description>
    </item>
    <item>
      <title>ReSpeaker Pi的扩展主板</title>
      <link>/it/2022/122909-respeaker/</link>
      <pubDate>Thu, 29 Dec 2022 01:32:17 +0000</pubDate>
      <guid>/it/2022/122909-respeaker/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://files.seeedstudio.com/wiki/MIC_HATv1.0_for_raspberrypi/img/2mics-zero-high-res.jpg?raw=true&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;ReSpeaker 2-Mics Pi HAT是专为AI和语音应用设计的Raspberry Pi双麦克风扩展板。&lt;br&gt;&#xA;这是购买了比较久的主板，把它安装到了PiZeroW上。我在等着Pi0 2W，毕竟第一代的性能还是太差，做移动应用还是差了些。不过2代贵得不值，等着估计明年中旬就有供货正常，价格正常了。&lt;br&gt;&#xA;这里作一个资料备份而已。&lt;a href=&#34;https://wiki.seeedstudio.com/cn/ReSpeaker_2_Mics_Pi_HAT/&#34;&gt;官方资料地址&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用Go-ECharts制作股市趋势图</title>
      <link>/code/2022/122821-gochart/</link>
      <pubDate>Wed, 28 Dec 2022 13:57:39 +0000</pubDate>
      <guid>/code/2022/122821-gochart/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../122821-gochart-01.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;../122821-gochart-02.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;../122821-gochart-03.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;../122821-gochart-04.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;代码尚未整理&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;bufio&amp;#34;&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;io&amp;#34;&#xA;&#x9;&amp;#34;io/ioutil&amp;#34;&#xA;&#x9;&amp;#34;log&amp;#34;&#xA;&#x9;&amp;#34;net/http&amp;#34;&#xA;&#x9;&amp;#34;os&amp;#34;&#xA;&#x9;&amp;#34;path/filepath&amp;#34;&#xA;&#x9;&amp;#34;strconv&amp;#34;&#xA;&#x9;&amp;#34;strings&amp;#34;&#xA;&#x9;&amp;#34;time&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/PuerkitoBio/goquery&amp;#34;&#xA;&#x9;&amp;#34;github.com/go-echarts/go-echarts/v2/charts&amp;#34;&#xA;&#x9;&amp;#34;github.com/go-echarts/go-echarts/v2/components&amp;#34;&#xA;&#x9;&amp;#34;github.com/go-echarts/go-echarts/v2/opts&amp;#34;&#xA;)&#xA;&#xA;var (&#xA;&#x9;MyStockCode = &amp;#34;300144&amp;#34;&#xA;&#x9;fileNameS   = &amp;#34;data_s.txt&amp;#34;&#xA;&#x9;fileNameH   = &amp;#34;data_h.txt&amp;#34;&#xA;&#x9;fileNameM   = fmt.Sprintf(&amp;#34;data_%s.txt&amp;#34;, MyStockCode)&#xA;)&#xA;&#xA;type klineData struct {&#xA;&#x9;date string&#xA;&#x9;data [4]float32&#xA;}&#xA;&#xA;// 当前为第几季度&#xA;func Season() (y, m, s int) {&#xA;&#x9;y = time.Now().Year()&#xA;&#x9;m = int(time.Now().Month())&#xA;&#x9;s = m/4 + 1&#xA;&#x9;return&#xA;}&#xA;&#xA;// 获取历史数据&#xA;func WebSearch(url string) (ret []string) {&#xA;&#x9;var lineData string&#xA;&#x9;res, err := http.Get(url)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;fmt.Println(err)&#xA;&#x9;}&#xA;&#x9;defer res.Body.Close()&#xA;&#x9;if res.StatusCode != 200 {&#xA;&#x9;&#x9;fmt.Printf(&amp;#34;status code error: %d %s&amp;#34;, res.StatusCode, res.Status)&#xA;&#x9;}&#xA;&#xA;&#x9;doc, err := goquery.NewDocumentFromReader(res.Body)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;fmt.Println(err)&#xA;&#x9;}&#xA;&#xA;&#x9;doc.Find(&amp;#34;.table_bg001 tbody tr&amp;#34;).Each(func(i int, s *goquery.Selection) {&#xA;&#x9;&#x9;lineData = &amp;#34;&amp;#34;&#xA;&#x9;&#x9;s.Find(&amp;#34;td&amp;#34;).Each(func(n int, m *goquery.Selection) {&#xA;&#x9;&#x9;&#x9;lineData = fmt.Sprintf(&amp;#34;%s %s&amp;#34;, lineData, m.Text())&#xA;&#x9;&#x9;})&#xA;&#x9;&#x9;ret = append(ret, lineData)&#xA;&#x9;})&#xA;&#x9;return&#xA;}&#xA;&#xA;// 保存文件&#xA;func writeFile(buf []byte, fileName string) error {&#xA;&#x9;tmpPath := &amp;#34;./&amp;#34;&#xA;&#x9;err := os.MkdirAll(tmpPath, 0700)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;return err&#xA;&#x9;}&#xA;&#xA;&#x9;file := filepath.Join(tmpPath, fileName)&#xA;&#x9;err = ioutil.WriteFile(file, buf, 0600)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;return err&#xA;&#x9;}&#xA;&#x9;return nil&#xA;}&#xA;&#xA;// 数组倒序函数&#xA;func Reverse(arr *[]string) {&#xA;&#x9;var temp string&#xA;&#x9;length := len(*arr)&#xA;&#x9;for i := 0; i &amp;lt; length/2; i++ {&#xA;&#x9;&#x9;temp = (*arr)[i]&#xA;&#x9;&#x9;(*arr)[i] = (*arr)[length-1-i]&#xA;&#x9;&#x9;(*arr)[length-1-i] = temp&#xA;&#x9;}&#xA;}&#xA;&#xA;// 文件存在判断&#xA;func isExist(path string) bool {&#xA;&#x9;_, err := os.Stat(path)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;if os.IsExist(err) {&#xA;&#x9;&#x9;&#x9;return true&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;if os.IsNotExist(err) {&#xA;&#x9;&#x9;&#x9;return false&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;return false&#xA;&#x9;}&#xA;&#x9;return true&#xA;}&#xA;&#xA;// 读文件&#xA;func ReadFile(filename string) (ret []string) {&#xA;&#x9;fi, err := os.Open(filename)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(err)&#xA;&#x9;}&#xA;&#x9;r := bufio.NewReader(fi) // 创建 Reader&#xA;&#xA;&#x9;for {&#xA;&#x9;&#x9;lineBytes, err := r.ReadBytes(&amp;#39;\n&amp;#39;)&#xA;&#x9;&#x9;line := strings.TrimSpace(string(lineBytes))&#xA;&#x9;&#x9;if err != nil &amp;amp;&amp;amp; err != io.EOF {&#xA;&#x9;&#x9;&#x9;panic(err)&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;if err == io.EOF {&#xA;&#x9;&#x9;&#x9;break&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;ret = append(ret, line)&#xA;&#x9;}&#xA;&#x9;return&#xA;}&#xA;&#xA;func GetData_KLine(fileName string) (kd []klineData) {&#xA;&#x9;var k klineData&#xA;&#x9;Stock := ReadFile(fileName)&#xA;&#x9;for _, n := range Stock {&#xA;&#x9;&#x9;x := strings.Split(n, &amp;#34; &amp;#34;)&#xA;&#x9;&#x9;n1, _ := strconv.ParseFloat(strings.ReplaceAll(x[4], &amp;#34;,&amp;#34;, &amp;#34;&amp;#34;), 32) // 收盘价&#xA;&#x9;&#x9;n2, _ := strconv.ParseFloat(strings.ReplaceAll(x[1], &amp;#34;,&amp;#34;, &amp;#34;&amp;#34;), 32) // 开盘价&#xA;&#x9;&#x9;n3, _ := strconv.ParseFloat(strings.ReplaceAll(x[3], &amp;#34;,&amp;#34;, &amp;#34;&amp;#34;), 32) // 最低价&#xA;&#x9;&#x9;n4, _ := strconv.ParseFloat(strings.ReplaceAll(x[2], &amp;#34;,&amp;#34;, &amp;#34;&amp;#34;), 32) // 最高价&#xA;&#x9;&#x9;k = klineData{date: x[0], data: [4]float32{float32(n1), float32(n2), float32(n3), float32(n4)}}&#xA;&#x9;&#x9;kd = append(kd, k)&#xA;&#x9;}&#xA;&#x9;return&#xA;}&#xA;&#xA;func klineDataZoomBoth(fileName, title string) *charts.Kline {&#xA;&#x9;kline := charts.NewKLine()&#xA;&#x9;kd := GetData_KLine(fileName)&#xA;&#xA;&#x9;x := make([]string, 0)&#xA;&#x9;y := make([]opts.KlineData, 0)&#xA;&#x9;for i := 0; i &amp;lt; len(kd); i++ {&#xA;&#x9;&#x9;x = append(x, kd[i].date)&#xA;&#x9;&#x9;y = append(y, opts.KlineData{Value: kd[i].data})&#xA;&#x9;}&#xA;&#xA;&#x9;kline.SetGlobalOptions(&#xA;&#x9;&#x9;charts.WithTitleOpts(opts.Title{Title: title, Right: &amp;#34;40%&amp;#34;, Top: &amp;#34;5%&amp;#34;}),&#xA;&#x9;&#x9;charts.WithXAxisOpts(opts.XAxis{SplitNumber: 20}),&#xA;&#x9;&#x9;charts.WithYAxisOpts(opts.YAxis{Scale: true}),&#xA;&#x9;&#x9;charts.WithDataZoomOpts(opts.DataZoom{&#xA;&#x9;&#x9;&#x9;Type:       &amp;#34;inside&amp;#34;,&#xA;&#x9;&#x9;&#x9;Start:      50,&#xA;&#x9;&#x9;&#x9;End:        100,&#xA;&#x9;&#x9;&#x9;XAxisIndex: []int{0},&#xA;&#x9;&#x9;}),&#xA;&#x9;&#x9;charts.WithDataZoomOpts(opts.DataZoom{&#xA;&#x9;&#x9;&#x9;Type:       &amp;#34;slider&amp;#34;,&#xA;&#x9;&#x9;&#x9;Start:      50,&#xA;&#x9;&#x9;&#x9;End:        100,&#xA;&#x9;&#x9;&#x9;XAxisIndex: []int{0},&#xA;&#x9;&#x9;}),&#xA;&#x9;)&#xA;&#xA;&#x9;kline.SetXAxis(x).AddSeries(&amp;#34;kline&amp;#34;, y).&#xA;&#x9;&#x9;SetSeriesOptions(&#xA;&#x9;&#x9;&#x9;charts.WithMarkPointNameTypeItemOpts(opts.MarkPointNameTypeItem{&#xA;&#x9;&#x9;&#x9;&#x9;Name:     &amp;#34;highest value&amp;#34;,&#xA;&#x9;&#x9;&#x9;&#x9;Type:     &amp;#34;max&amp;#34;,&#xA;&#x9;&#x9;&#x9;&#x9;ValueDim: &amp;#34;highest&amp;#34;,&#xA;&#x9;&#x9;&#x9;}),&#xA;&#x9;&#x9;&#x9;charts.WithMarkPointNameTypeItemOpts(opts.MarkPointNameTypeItem{&#xA;&#x9;&#x9;&#x9;&#x9;Name:     &amp;#34;lowest value&amp;#34;,&#xA;&#x9;&#x9;&#x9;&#x9;Type:     &amp;#34;min&amp;#34;,&#xA;&#x9;&#x9;&#x9;&#x9;ValueDim: &amp;#34;lowest&amp;#34;,&#xA;&#x9;&#x9;&#x9;}),&#xA;&#x9;&#x9;&#x9;charts.WithMarkPointStyleOpts(opts.MarkPointStyle{&#xA;&#x9;&#x9;&#x9;&#x9;Label: &amp;amp;opts.Label{Show: true},&#xA;&#x9;&#x9;&#x9;}),&#xA;&#x9;&#x9;&#x9;charts.WithItemStyleOpts(opts.ItemStyle{&#xA;&#x9;&#x9;&#x9;&#x9;Color: &amp;#34;#00da3c&amp;#34;, Color0: &amp;#34;#ec0000&amp;#34;,&#xA;&#x9;&#x9;&#x9;&#x9;BorderColor: &amp;#34;#000099&amp;#34;, BorderColor0: &amp;#34;#222222&amp;#34;,&#xA;&#x9;&#x9;&#x9;}),&#xA;&#x9;&#x9;)&#xA;&#x9;return kline&#xA;}&#xA;&#xA;func GetData_Bar(fileName string) (title []string, bd1 []opts.BarData, bd2 []opts.BarData) {&#xA;&#x9;Stock := ReadFile(fileName)&#xA;&#x9;for _, n := range Stock {&#xA;&#x9;&#x9;x := strings.Split(n, &amp;#34; &amp;#34;)&#xA;&#x9;&#x9;n1, _ := strconv.ParseFloat(strings.ReplaceAll(x[8], &amp;#34;,&amp;#34;, &amp;#34;&amp;#34;), 32) // 成交金额(万元)&#xA;&#x9;&#x9;n2, _ := strconv.ParseFloat(strings.ReplaceAll(x[4], &amp;#34;,&amp;#34;, &amp;#34;&amp;#34;), 32) // 收盘价&#xA;&#x9;&#x9;title = append(title, strings.ReplaceAll(strings.ReplaceAll(x[0], &amp;#34;2022&amp;#34;, &amp;#34;&amp;#34;), &amp;#34;-&amp;#34;, &amp;#34;&amp;#34;))&#xA;&#x9;&#x9;bd1 = append(bd1, opts.BarData{Value: float32(n1)})&#xA;&#x9;&#x9;bd2 = append(bd2, opts.BarData{Value: float32(n2)})&#xA;&#x9;}&#xA;&#x9;return&#xA;}&#xA;&#xA;func barDataZoomSlider() *charts.Bar {&#xA;&#x9;t, d1, _ := GetData_Bar(fileNameM)&#xA;&#x9;bar := charts.NewBar()&#xA;&#x9;bar.SetGlobalOptions(&#xA;&#x9;&#x9;charts.WithTitleOpts(opts.Title{&#xA;&#x9;&#x9;&#x9;Title: MyStockCode + &amp;#34;成交量&amp;#34;,&#xA;&#x9;&#x9;&#x9;Right: &amp;#34;40%&amp;#34;,&#xA;&#x9;&#x9;&#x9;Top:   &amp;#34;5%&amp;#34;,&#xA;&#x9;&#x9;}),&#xA;&#x9;&#x9;charts.WithDataZoomOpts(opts.DataZoom{&#xA;&#x9;&#x9;&#x9;Type:  &amp;#34;slider&amp;#34;,&#xA;&#x9;&#x9;&#x9;Start: 10,&#xA;&#x9;&#x9;&#x9;End:   50,&#xA;&#x9;&#x9;}),&#xA;&#x9;&#x9;charts.WithTooltipOpts(opts.Tooltip{Show: true}),&#xA;&#x9;&#x9;//charts.WithColorsOpts(opts.Colors{&amp;#34;blue&amp;#34;, &amp;#34;pink&amp;#34;}),&#xA;&#x9;)&#xA;&#xA;&#x9;bar.SetXAxis(t).&#xA;&#x9;&#x9;AddSeries(&amp;#34;成交金额&amp;#34;, d1)&#xA;&#x9;&#x9;//AddSeries(&amp;#34;现价&amp;#34;, d2)&#xA;&#x9;&#x9;//SetSeriesOptions(charts.WithLabelOpts(opts.Label{Show: true, Position: &amp;#34;top&amp;#34;}))&#xA;&#x9;return bar&#xA;}&#xA;&#xA;func init() {&#xA;&#x9;y, _, s := Season() // 获取年份及季度&#xA;&#xA;&#x9;if isExist(fileNameS) == false || isExist(fileNameH) == false { // 数据文件存在&#xA;&#x9;&#x9;log.Print(&amp;#34;获取数据中...&amp;#34;)&#xA;&#x9;&#x9;fs, _ := os.OpenFile(fileNameS, os.O_APPEND|os.O_CREATE, 0666)&#xA;&#x9;&#x9;fh, _ := os.OpenFile(fileNameH, os.O_APPEND|os.O_CREATE, 0666)&#xA;&#x9;&#x9;defer fs.Close()&#xA;&#x9;&#x9;defer fh.Close()&#xA;&#x9;&#x9;for i := 1; i &amp;lt;= s; i++ {&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;%d年%d季度上证&amp;#34;, y, i)&#xA;&#x9;&#x9;&#x9;ShangZhen := WebSearch(fmt.Sprintf(&amp;#34;http://quotes.money.163.com/trade/lsjysj_zhishu_000001.html?year=%d&amp;amp;season=%d&amp;#34;, y, i))&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;%d年%d季度沪证&amp;#34;, y, i)&#xA;&#x9;&#x9;&#x9;HuZhen := WebSearch(fmt.Sprintf(&amp;#34;http://quotes.money.163.com/trade/lsjysj_zhishu_399001.html?year=%d&amp;amp;season=%d&amp;#34;, y, i))&#xA;&#x9;&#x9;&#x9;Reverse(&amp;amp;ShangZhen)&#xA;&#x9;&#x9;&#x9;Reverse(&amp;amp;HuZhen)&#xA;&#x9;&#x9;&#x9;for _, n := range ShangZhen {&#xA;&#x9;&#x9;&#x9;&#x9;io.WriteString(fs, strings.TrimSpace(n)+&amp;#34;\n&amp;#34;)&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;for _, n := range HuZhen {&#xA;&#x9;&#x9;&#x9;&#x9;io.WriteString(fh, strings.TrimSpace(n)+&amp;#34;\n&amp;#34;)&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#xA;&#x9;if isExist(fileNameM) == false {&#xA;&#x9;&#x9;f, _ := os.OpenFile(fileNameM, os.O_APPEND|os.O_CREATE, 0666)&#xA;&#x9;&#x9;defer f.Close()&#xA;&#x9;&#x9;for i := 1; i &amp;lt;= s; i++ {&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;%d年%d季度 %s&amp;#34;, y, i, MyStockCode)&#xA;&#x9;&#x9;&#x9;Stock := WebSearch(fmt.Sprintf(&amp;#34;http://quotes.money.163.com/trade/lsjysj_%s.html?year=%d&amp;amp;season=%d&amp;#34;, MyStockCode, y, i))&#xA;&#x9;&#x9;&#x9;Reverse(&amp;amp;Stock)&#xA;&#x9;&#x9;&#x9;for _, n := range Stock {&#xA;&#x9;&#x9;&#x9;&#x9;io.WriteString(f, strings.TrimSpace(n)+&amp;#34;\n&amp;#34;)&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;page := components.NewPage()&#xA;&#x9;page.AddCharts(&#xA;&#x9;&#x9;klineDataZoomBoth(fileNameH, &amp;#34;沪证趋势图&amp;#34;),&#xA;&#x9;&#x9;klineDataZoomBoth(fileNameS, &amp;#34;上证趋势图&amp;#34;),&#xA;&#x9;&#x9;barDataZoomSlider(),&#xA;&#x9;&#x9;klineDataZoomBoth(fileNameM, MyStockCode+&amp;#34;价格&amp;#34;),&#xA;&#x9;)&#xA;&#xA;&#x9;f, _ := os.Create(&amp;#34;line.html&amp;#34;)&#xA;&#x9;page.Render(io.MultiWriter(f))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>AutoIT应用：软件汉化的另类思路</title>
      <link>/it/2022/122319-localization/</link>
      <pubDate>Fri, 23 Dec 2022 11:12:20 +0000</pubDate>
      <guid>/it/2022/122319-localization/</guid>
      <description>&lt;p&gt;个人习惯，有中文就不用英文的；有绿色版就不用安装版。一个软件的语言配适程度，代表了友好程度，代表了客户的接受程度。虽然大多数时候，多看几遍也就认识了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang统计图表：沪深成交量及指数</title>
      <link>/code/2022/122311-chart/</link>
      <pubDate>Fri, 23 Dec 2022 03:29:30 +0000</pubDate>
      <guid>/code/2022/122311-chart/</guid>
      <description>&lt;p&gt;以下代码利用go的统计图表生成库，通过调用163的沪深历史数据，生成一个统计图表。没有太多科技。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;io/ioutil&amp;#34;&#xA;&#x9;&amp;#34;net/http&amp;#34;&#xA;&#x9;&amp;#34;os&amp;#34;&#xA;&#x9;&amp;#34;path/filepath&amp;#34;&#xA;&#x9;&amp;#34;strconv&amp;#34;&#xA;&#x9;&amp;#34;strings&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/PuerkitoBio/goquery&amp;#34;&#xA;&#x9;charts &amp;#34;github.com/vicanso/go-charts&amp;#34;&#xA;)&#xA;&#xA;// 获取历史数据&#xA;func WebSearch(url string) (ret []string) {&#xA;&#x9;var lineData string&#xA;&#x9;res, err := http.Get(url)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;fmt.Println(err)&#xA;&#x9;}&#xA;&#x9;defer res.Body.Close()&#xA;&#x9;if res.StatusCode != 200 {&#xA;&#x9;&#x9;fmt.Printf(&amp;#34;status code error: %d %s&amp;#34;, res.StatusCode, res.Status)&#xA;&#x9;}&#xA;&#xA;&#x9;doc, err := goquery.NewDocumentFromReader(res.Body)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;fmt.Println(err)&#xA;&#x9;}&#xA;&#xA;&#x9;doc.Find(&amp;#34;.table_bg001 tbody tr&amp;#34;).Each(func(i int, s *goquery.Selection) {&#xA;&#x9;&#x9;lineData = &amp;#34;&amp;#34;&#xA;&#x9;&#x9;s.Find(&amp;#34;td&amp;#34;).Each(func(n int, m *goquery.Selection) {&#xA;&#x9;&#x9;&#x9;lineData = fmt.Sprintf(&amp;#34;%s %s&amp;#34;, lineData, m.Text())&#xA;&#x9;&#x9;})&#xA;&#x9;&#x9;ret = append(ret, lineData)&#xA;&#x9;})&#xA;&#x9;return&#xA;}&#xA;&#xA;// 保存文件&#xA;func writeFile(buf []byte, fileName string) error {&#xA;&#x9;tmpPath := &amp;#34;./&amp;#34;&#xA;&#x9;err := os.MkdirAll(tmpPath, 0700)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;return err&#xA;&#x9;}&#xA;&#xA;&#x9;file := filepath.Join(tmpPath, fileName)&#xA;&#x9;err = ioutil.WriteFile(file, buf, 0600)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;return err&#xA;&#x9;}&#xA;&#x9;return nil&#xA;}&#xA;&#xA;// 错误处理&#xA;func OnErr(err error) {&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(err)&#xA;&#x9;}&#xA;}&#xA;&#xA;// 数组倒序函数&#xA;func Reverse(arr *[]string) {&#xA;&#x9;var temp string&#xA;&#x9;length := len(*arr)&#xA;&#x9;for i := 0; i &amp;lt; length/2; i++ {&#xA;&#x9;&#x9;temp = (*arr)[i]&#xA;&#x9;&#x9;(*arr)[i] = (*arr)[length-1-i]&#xA;&#x9;&#x9;(*arr)[length-1-i] = temp&#xA;&#x9;}&#xA;}&#xA;&#xA;func MakeChartPic(values [][]float64, x []string, legend []string, title, file string) {&#xA;&#x9;buf, err := ioutil.ReadFile(&amp;#34;./msyh.ttf&amp;#34;)&#xA;&#x9;OnErr(err)&#xA;&#x9;err = charts.InstallFont(&amp;#34;noto&amp;#34;, buf)&#xA;&#x9;OnErr(err)&#xA;&#x9;font, _ := charts.GetFont(&amp;#34;noto&amp;#34;)&#xA;&#x9;charts.SetDefaultFont(font)&#xA;&#xA;&#x9;p, err := charts.LineRender(&#xA;&#x9;&#x9;values,&#xA;&#x9;&#x9;charts.TitleTextOptionFunc(title),&#xA;&#x9;&#x9;charts.HeightOptionFunc(900),&#xA;&#x9;&#x9;charts.WidthOptionFunc(1440),&#xA;&#x9;&#x9;charts.XAxisDataOptionFunc(x),&#xA;&#x9;&#x9;charts.TitleOptionFunc(charts.TitleOption{Left: &amp;#34;20%&amp;#34;}),&#xA;&#x9;&#x9;charts.LegendLabelsOptionFunc(legend, charts.PositionCenter),&#xA;&#x9;)&#xA;&#xA;&#x9;OnErr(err)&#xA;&#x9;buf, err = p.Bytes()&#xA;&#x9;OnErr(err)&#xA;&#x9;writeFile(buf, file)&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;fmt.Println(&amp;#34;获取数据中...&amp;#34;)&#xA;&#x9;var Array_SJ []string&#xA;&#x9;var values1, values2 [][]float64&#xA;&#x9;var SZ, SE []float64 // 上指  上证成交额&#xA;&#x9;var HZ, HE []float64 // 沪指  沪证成交额&#xA;&#x9;ShangZhen := WebSearch(&amp;#34;http://quotes.money.163.com/trade/lsjysj_zhishu_000001.html&amp;#34;)&#xA;&#x9;HuZhen := WebSearch(&amp;#34;http://quotes.money.163.com/trade/lsjysj_zhishu_399001.html&amp;#34;)&#xA;&#x9;Reverse(&amp;amp;ShangZhen)&#xA;&#x9;Reverse(&amp;amp;HuZhen)&#xA;&#xA;&#x9;fmt.Println(&amp;#34;生成图形中...&amp;#34;)&#xA;&#xA;&#x9;for _, n := range ShangZhen {&#xA;&#x9;&#x9;data := strings.Split(strings.ReplaceAll(n, &amp;#34;,&amp;#34;, &amp;#34;&amp;#34;), &amp;#34; &amp;#34;)&#xA;&#x9;&#x9;Array_SJ = append(Array_SJ, strings.ReplaceAll(data[1], &amp;#34;2022&amp;#34;, &amp;#34;&amp;#34;))&#xA;&#x9;&#x9;d, _ := strconv.ParseFloat(data[5], 64)&#xA;&#x9;&#x9;SZ = append(SZ, d)&#xA;&#x9;&#x9;d, _ = strconv.ParseFloat(data[9], 64)&#xA;&#x9;&#x9;SE = append(SE, d/10000/10000)&#xA;&#x9;}&#xA;&#xA;&#x9;for _, n := range HuZhen {&#xA;&#x9;&#x9;data := strings.Split(strings.ReplaceAll(n, &amp;#34;,&amp;#34;, &amp;#34;&amp;#34;), &amp;#34; &amp;#34;)&#xA;&#x9;&#x9;//Array_SJ = append(Array_SJ, strings.ReplaceAll(data[1], &amp;#34;2022&amp;#34;, &amp;#34;&amp;#34;))&#xA;&#x9;&#x9;d, _ := strconv.ParseFloat(data[5], 64)&#xA;&#x9;&#x9;HZ = append(HZ, d)&#xA;&#x9;&#x9;d, _ = strconv.ParseFloat(data[9], 64)&#xA;&#x9;&#x9;HE = append(HE, d/10000/10000)&#xA;&#x9;}&#xA;&#xA;&#x9;fmt.Println(&amp;#34;生成成交统计图&amp;#34;) // -----------------------------------------------------------------------&#xA;&#x9;values1 = append(values1, SE, HE)&#xA;&#x9;MakeChartPic(values1, Array_SJ, []string{&amp;#34;深成交&amp;#34;, &amp;#34;沪成交&amp;#34;}, &amp;#34;成交额&amp;#34;, &amp;#34;chart1.png&amp;#34;)&#xA;&#xA;&#x9;fmt.Println(&amp;#34;生成指数统计图&amp;#34;) // -------------------------------------------------------&#xA;&#xA;&#x9;values2 = append(values2, SZ, HZ)&#xA;&#x9;MakeChartPic(values2, Array_SJ, []string{&amp;#34;深指&amp;#34;, &amp;#34;沪指&amp;#34;}, &amp;#34;指数&amp;#34;, &amp;#34;chart2.png&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>AutoIT代码收集 2023-1-27</title>
      <link>/it/2022/122211-autoit/</link>
      <pubDate>Thu, 22 Dec 2022 03:02:37 +0000</pubDate>
      <guid>/it/2022/122211-autoit/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.autoitscript.com/site/&#34;&gt;AutoIT官网&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.autoitscript.com/autoit3/docs/&#34;&gt;AutoIT官网文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.autoitx.com/Doc/&#34;&gt;中文文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;循环读取界面中的内容&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;AdlibRegister(&amp;#34;Example&amp;#34;,1000) ; 每1秒运行一次&#xA;Sleep(60000)&#xA;&#xA;Func Example()&#xA;   ; 获取窗口文本&#xA;    Local $sText = ControlGetText(&amp;#34;[Class:SciTEWindow]&amp;#34;,&amp;#34;&amp;#34;,&amp;#34;[Class:Scintilla]&amp;#34;)&#xA;    ToolTip($sText)&#xA;EndFunc&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;读取网址，分析JSON&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;先下载一个&lt;a href=&#34;https://autoit.de/wcf/attachment/90018-json-au3/&#34;&gt;JSON解析库&lt;/a&gt;,&lt;a href=&#34;https://autoit.de/thread/85435-json-udf/&#34;&gt;文章介绍在这里&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#include &amp;lt;JSON.au3&amp;gt;&#xA;&#xA;Local $sData = InetRead(&amp;#34;https://tj.scwy.net/list/crocoat&amp;#34;)&#xA;Local $nBytesRead = @extended&#xA;;MsgBox(4096, &amp;#34;&amp;#34;, &amp;#34;Bytes read: &amp;#34; &amp;amp; $nBytesRead &amp;amp; @CRLF &amp;amp; @CRLF &amp;amp; BinaryToString($sData))&#xA;&#xA;Local $info = BinaryToString($sData)&#xA;Local $infoJson = _JSON_Parse($info)&#xA;ConsoleWrite($info &amp;amp; @CRLF )&#xA;&#xA;ConsoleWrite(_JSON_Get($infoJson,&amp;#34;[1].SVer&amp;#34;) &amp;amp; @CRLF)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;对数据库的访问，数据提取操作&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#include&amp;lt;array.au3&amp;gt;&#xA;$conn= ObjCreate(&amp;#34;ADODB.Connection&amp;#34;)&#xA;$RS= ObjCreate(&amp;#34;ADODB.Recordset&amp;#34;)&#xA;$conn.Open(&amp;#34;driver={SQLServer};server=a\demo;uid=sa;pwd=bcd;database=Test&amp;#34;)&#xA;$RS.ActiveConnection= $conn&#xA;$RS.open(&amp;#34;SELECT* FROM GIS_CROP&amp;#34;)&#xA;&#xA;;以下代码可以获取数据库表的标题名&#xA;;$count = $RS.Fields.Count&#xA;;dim $array1[$count]&#xA;;For $i = 0 To ($count - 1)&#xA;; $array1[$i] = $RS.Fields($i).Name ;取得一行记录&#xA;;Next&#xA;dim$i = 0 &#xA;ConsoleWrite($RS.fields.count)&#xA;dim$array[10][4]&#xA;While(Not$RS.eof And Not $RS.bof)&#xA;　　$array[$i][0]= $RS.Fields(0).value&#xA;　　$array[$i][1]=  $RS.Fields(1).value&#xA;　　$array[$i][2]=  $RS.Fields(3).value&#xA;　　$i+= 1&#xA;　　$RS.movenext&#xA;WEnd&#xA;$RS.close&#xA;_ArrayDisplay($array)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;打印输出&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;ShellExecuteWait(&amp;ldquo;d:\123.pdf&amp;rdquo;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;ldquo;Print&amp;rdquo;) ;,@SW_MINIMIZE)&lt;/p&gt;</description>
    </item>
    <item>
      <title>AutoHotKey遇到的问题</title>
      <link>/it/2022/122210-autohotkey/</link>
      <pubDate>Thu, 22 Dec 2022 02:57:14 +0000</pubDate>
      <guid>/it/2022/122210-autohotkey/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;缩略词时，如何设置几个按键之间的超时。即要求缩略词要在n秒内输入完毕。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;通过行长按键时间间隔，也可以让热字串失效，达到了输入成为普通字符的目的&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;SetTimer HotStringTimeOut, 100  ;循环检测&#xA;&#xA;; 检测热字串输入间隔,超过1500毫秒则热字串失效&#xA;HotStringTimeOut() {&#xA;   if A_TimeIdleKeyboard&amp;gt;1500&#xA;      Hotstring(&amp;#34;Reset&amp;#34;) ;重置热字串&#xA;   return&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Go与AutoIT的结合</title>
      <link>/code/2022/121916-goautoit/</link>
      <pubDate>Mon, 19 Dec 2022 08:38:55 +0000</pubDate>
      <guid>/code/2022/121916-goautoit/</guid>
      <description>&lt;p&gt;最近看了AutoHotKey和AutoIT，各有专长不同吧：前者更多的是热键一类，而后者更趋向于自动化。得来浅薄，不知对否。&lt;/p&gt;&#xA;&lt;p&gt;如何让它们与Golang结合一下，充分利用它们的优势呢。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang的GUI探讨：不要在一棵树上吊死，要在多棵树上</title>
      <link>/it/2022/121812-gogui/</link>
      <pubDate>Sun, 18 Dec 2022 04:13:45 +0000</pubDate>
      <guid>/it/2022/121812-gogui/</guid>
      <description>&lt;p&gt;关于Golang开发GUI界面始终是一个问题，似乎没有大家公认比较好的简单方法。&lt;br&gt;&#xA;我也一样在寻找。比如之前试着&lt;a href=&#34;https://i.scwy.net/it/2022/022817-godot/&#34;&gt;用Godot来制作界面&lt;/a&gt;。得益于Godot的跨平台和精美的制作能力(游戏引擎还不够你想像?)，与Golang算是上天作。&lt;/p&gt;&#xA;&lt;p&gt;最近看AutoHotkey，它也有比较完善的GUI制作。近而又看了AutoIt，制作常见的GUI依然是轻轻松松。虽然它们都有一个共同的问题：仅在Win下。不同的需求，不同的选择吧。&lt;br&gt;&#xA;由此想到了标题的：不要在一棵树上吊死。Golang的前端需求，不应该拘泥于Golang来实现。领导都说了：能抓住啥就是好猫。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用Autohotkey建立自己的输入法</title>
      <link>/it/2022/121323-autohotkey/</link>
      <pubDate>Tue, 13 Dec 2022 15:37:44 +0000</pubDate>
      <guid>/it/2022/121323-autohotkey/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.autoahk.com/archives/15558&#34;&gt;原文地址&lt;/a&gt;，可以看出AutoHotkey开发一个输入法是多么的迅速，且代码量不大（不足200行）&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#Include wubi86.ahk&#xA;&#xA;;{{{ 透明窗口srf_icon&#xA;SplashImage, Splash.png,b X220 Y400 ,,,srf_icon,  ;创建一个图片窗口&#xA;WinSet, Transparent, 0 , srf_icon,    ;窗口完全透明&#xA;WinSet, TransColor, #0, srf_icon      ; 透明色&#xA;WinSet, ExStyle, +0x20, srf_icon,     ;允许鼠标穿透&#xA;WinSet, AlwaysOnTop, On , srf_icon,   ;窗口置顶&#xA;;}}}&#xA;&#xA;lshift &amp;amp; Lbutton::send +{Lbutton}                                         &#xA;;{{{ Lshift键切换模式&#xA;Lshift::&#xA;    srf_mode := !srf_mode&#xA;    if  srf_mode {&#xA;        WinSet, Transparent, 250 , srf_icon,&#xA;        WinSet, TransColor, #0, srf_icon      ; 透明色&#xA;    }&#xA;    else&#xA;        WinSet, Transparent, 0 , srf_icon,&#xA;return&#xA;;}}}&#xA;&#xA;;{{{ StrLen(srf_all_input)=4 模式&#xA;#if StrLen(srf_all_input)=4&#xA;    a::&#xA;    b::&#xA;    c::&#xA;    d::&#xA;    e::&#xA;    f::&#xA;    g::&#xA;    h::&#xA;    i::&#xA;    j::&#xA;    k::&#xA;    l::&#xA;    m::&#xA;    n::&#xA;    o::&#xA;    p::&#xA;    q::&#xA;    r::&#xA;    s::&#xA;    t::&#xA;    u::&#xA;    v:: &#xA;    w::&#xA;    x::&#xA;    y::&#xA;    z::&#xA;    send %srf_for_select_array1%&#xA;    gosub srf_value_off&#xA;    srf_all_input := srf_all_input . A_ThisHotkey&#xA;    gosub srf_tooltip&#xA;    return&#xA;#if&#xA;;}}}&#xA;&#xA;;{{{ srf_for_select_array0模式 空格、逗号、句号 定义&#xA;#if srf_for_select_array0&#xA;    space::srf_select(1)&#xA;    ,::srf_select(2)&#xA;    .::srf_select(3)&#xA;#if&#xA;;}}}&#xA;&#xA;;{{{ srf_all_input模式 backspace键、esc键、enter键、Lshift键 定义&#xA;;在未完成一个字的输入前，可以删除输入的按键，取消输入，确定输入&#xA;#if srf_all_input&#xA;    ;{{{ backspace定义&#xA;    backspace::  ; 删除前一个输入的字符，如果没有字符了，就关闭提示&#xA;      srf_all_input := SubStr(srf_all_input, 1, -1)&#xA;      if srf_all_input =&#xA;        gosub srf_value_off&#xA;      else&#xA;        gosub srf_tooltip&#xA;    return&#xA;    ;}}}&#xA;&#xA;    esc::gosub srf_value_off&#xA;&#xA;    enter::  ; 回车键，把输入的字符发送出来，继续输入法&#xA;      send %srf_all_input%&#xA;      gosub srf_value_off&#xA;    return&#xA;&#xA;    Lshift::  ; 左shift，把输入的字符发送出来，关闭输入&#xA;      send %srf_all_input%&#xA;      gosub srf_value_off&#xA;      WinSet, TransColor, FF0000  0 , srf_icon,&#xA;      srf_mode =&#xA;    return&#xA;&#xA;#if&#xA;;}}}&#xA;&#xA;;{{{ srf_mode模式 a-z键、esc键、中文符号 定义&#xA;#if srf_mode&#xA;    ;{{{ a-z定义&#xA;    a::&#xA;    b::&#xA;    c::&#xA;    d::&#xA;    e::&#xA;    f::&#xA;    g::&#xA;    h::&#xA;    i::&#xA;    j::&#xA;    k::&#xA;    l::&#xA;    m::&#xA;    n::&#xA;    o::&#xA;    p::&#xA;    q::&#xA;    r::&#xA;    s::&#xA;    t::&#xA;    u::&#xA;    v::                                                      &#xA;    w::&#xA;    x::&#xA;    y::&#xA;    z::&#xA;    srf_all_input := srf_all_input . A_ThisHotkey&#xA;    gosub srf_tooltip&#xA;    return&#xA;    ;}}}&#xA;&#xA;    esc::&#xA;        WinSet, TransColor, FF0000  0 , srf_icon,&#xA;        srf_mode = &#xA;    return&#xA;&#xA;    ,::send {，}&#xA;    .::send {。}&#xA;&#xA;    +;::send {：}&#xA;    +&amp;#39;::send {“}{”}{left}&#xA;#if                                                                  &#xA;;}}}&#xA;&#xA;;{{{ 函数 srf_select&#xA;srf_select(list_num)&#xA;{&#xA;    global &#xA;    sendinput % srf_for_select_array%list_num%                                &#xA;    gosub srf_value_off&#xA;}&#xA;;}}}&#xA;&#xA;;{{{ 标签srf_tooltip&#xA;srf_tooltip:&#xA;    tooltip, % srf_all_input . &amp;#34;`n[&amp;#34; . %srf_all_input% . &amp;#34;]&amp;#34;, A_CaretX + 10 , A_CaretY + 20, 16         &#xA;    StringSplit, srf_for_select_array, %srf_all_input%, %A_Space%, %A_Space%&#xA;&#xA;    if (StrLen(srf_all_input)=4 and %srf_all_input%=&amp;#34;&amp;#34;)    ;四码时，如果无候选，则自动清空编码&#xA;        gosub srf_value_off&#xA;    else if (StrLen(srf_all_input)=4 and srf_for_select_array0=1)   ;四码时，如果候选唯一，则自动上屏&#xA;      {&#xA;        send %srf_for_select_array1%&#xA;        gosub srf_value_off&#xA;      } &#xA;return&#xA;;}}}&#xA;&#xA;;{{{ 标签 srf_value_off&#xA;srf_value_off:&#xA;    srf_for_select_array0=&#xA;    tooltip, , , ,16&#xA;    srf_all_input=&#xA;return&#xA;;}}}&#xA;&#xA;;{{{ 自动reload&#xA;#IfWinActive,AutoHotkeyU32.ahk&#xA;    ~^s::&#xA;        sleep 200&#xA;        reload&#xA;        return&#xA;#IfWinActive&#xA;;}}}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>AutoHotkey代码收集</title>
      <link>/it/2022/121216-autohotkey/</link>
      <pubDate>Mon, 12 Dec 2022 08:20:20 +0000</pubDate>
      <guid>/it/2022/121216-autohotkey/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;按键短按为原功能，长按为另一功能&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$x::&#xA;    startTime := A_TickCount ;记录按钮开发始时间&#xA;    KeyWait, x, U ;等待按键抬起&#xA;    keypressDuration := A_TickCount-startTime ;计算按下和抬起的时差&#xA;    if (keypressDuration &amp;gt; 200) ;长按&#xA;    {&#xA;        Send &amp;gt; &#xA;    }&#xA;    else ;短按&#xA;    {&#xA;         Send x &#xA;    }&#xA;&#xA;return&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;另一种方式&lt;/p&gt;</description>
    </item>
    <item>
      <title>AutoHotkey</title>
      <link>/it/2022/121009-autohotkey/</link>
      <pubDate>Sat, 10 Dec 2022 01:10:56 +0000</pubDate>
      <guid>/it/2022/121009-autohotkey/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.autohotkey.com/static/ahk_logo_no_text.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.autohotkey.com/&#34;&gt;AutoHotkey&lt;/a&gt;其实早已大名鼎鼎且历史悠久，至少追溯到2005年，甚至1999年。简单来说它是一个丰富且强大的热键系统。&lt;/p&gt;&#xA;&lt;p&gt;最近两天花了些时间来入门。之前文章中的&lt;a href=&#34;https://i.scwy.net/code/2022/120114-hotkey/&#34;&gt;MyKeymap&lt;/a&gt;了是基于它开发的。最近了把输入法的为了&amp;quot;&lt;a href=&#34;https://www.autoahk.com/document/26056.html&#34;&gt;影子&lt;/a&gt;&amp;quot;，这个也是基于AutoHotkey开发的。&lt;/p&gt;&#xA;&lt;p&gt;可惜的一点是，它不支持Linux。&lt;/p&gt;&#xA;&lt;p&gt;想到的一个应用场景就是客服：把常用的语句用缩略语的方式，可以加快服务速度。虽然最近ChatGPT很火，大有代替人工的趋势。&lt;/p&gt;</description>
    </item>
    <item>
      <title>跨平台热键系统</title>
      <link>/code/2022/120114-hotkey/</link>
      <pubDate>Thu, 01 Dec 2022 06:08:04 +0000</pubDate>
      <guid>/code/2022/120114-hotkey/</guid>
      <description>&lt;p&gt;刚看了&lt;a href=&#34;https://xianyukang.com/MyKeymap.html&#34;&gt;MyKeymap&lt;/a&gt;一个热键系统，做还是不错。最近也买了一个61键键盘。受其灵感，记录一下。&lt;/p&gt;&#xA;&lt;p&gt;功能需求:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;代替鼠标：移动、点击、双击、滚动&lt;/li&gt;&#xA;&lt;li&gt;快捷语句(缩写)&lt;/li&gt;&#xA;&lt;li&gt;启动程序、网页&lt;/li&gt;&#xA;&lt;li&gt;数字及符号&lt;/li&gt;&#xA;&lt;li&gt;常用功能：关闭、调亮、调音、最大、最小、关机、休眠、置顶、截图、复制/粘贴、记事、搜索选中&lt;/li&gt;&#xA;&lt;li&gt;一键合集&lt;/li&gt;&#xA;&lt;li&gt;文字编辑器：行首、行尾、删行、&lt;/li&gt;&#xA;&lt;li&gt;常用文件夹：下载、自定义&lt;/li&gt;&#xA;&lt;li&gt;多系统共享设置&lt;/li&gt;&#xA;&lt;li&gt;宏录制(图像识别功能，引入自动脚本功能)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;要跨平台就首选了golang：&lt;/p&gt;</description>
    </item>
    <item>
      <title>多端会员App</title>
      <link>/code/2022/111712-member/</link>
      <pubDate>Thu, 17 Nov 2022 04:37:36 +0000</pubDate>
      <guid>/code/2022/111712-member/</guid>
      <description>&lt;h2 id=&#34;由来&#34;&gt;由来&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;解决浏览器需要反复登陆的问题&lt;/li&gt;&#xA;&lt;li&gt;解决简单系统不想写用户权限管理的问题&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;功能&#34;&gt;功能&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;通过APP唯一标识用户&lt;/li&gt;&#xA;&lt;li&gt;用户唯一二维码用于被动扫码&lt;/li&gt;&#xA;&lt;li&gt;网址收藏，避免只能通过扫码进入&lt;/li&gt;&#xA;&lt;li&gt;通过默认浏览器打开网址&lt;/li&gt;&#xA;&lt;li&gt;设置首页自动打开&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;截图&#34;&gt;截图&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../111712-member-06.jpg&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;../111712-member-07.jpg&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;../111712-member-08.jpg&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;../111712-member-09.jpg&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;../111712-member-10.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>我理解的Web3.0</title>
      <link>/it/2022/111420-center/</link>
      <pubDate>Mon, 14 Nov 2022 12:16:06 +0000</pubDate>
      <guid>/it/2022/111420-center/</guid>
      <description>&lt;p&gt;最近各方炒Web3.0，意即一个去中心化的互联网络。至于区块链，只是为了完成去中心化与信任的手段。&lt;/p&gt;&#xA;&lt;p&gt;现在的网络都是中心化的，当然它有不少的好处。现在的社会也是中心化的，去中心化其实有违现有的组织结构。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sonic golang开发的动态博客</title>
      <link>/it/2022/111320-sonic/</link>
      <pubDate>Sun, 13 Nov 2022 12:20:47 +0000</pubDate>
      <guid>/it/2022/111320-sonic/</guid>
      <description>&lt;p&gt;官网：https://github.com/go-sonic&lt;br&gt;&#xA;主题仓库：https://github.com/go-sonic/default-theme-anatole&lt;br&gt;&#xA;开源地址：https://github.com/go-sonic/sonic&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot做游戏外应用的可行性</title>
      <link>/it/2022/110811-godot_set/</link>
      <pubDate>Tue, 08 Nov 2022 03:49:52 +0000</pubDate>
      <guid>/it/2022/110811-godot_set/</guid>
      <description>&lt;p&gt;通过官方文档其实可以看到：&lt;/p&gt;&#xA;&lt;p&gt;bool application/run/low_processor_mode&lt;br&gt;&#xA;如果true，则启用低处理器使用模式。此设置仅适用于桌面平台。如果视觉上没有任何变化，屏幕不会被重绘。&lt;/p&gt;&#xA;&lt;p&gt;int application/run/low_processor_mode_sleep_usec&lt;br&gt;&#xA;启用低处理器使用模式时帧间的睡眠量(以微秒计)。值越高，CPU占用率越低。&lt;/p&gt;</description>
    </item>
    <item>
      <title>vhs 终端录像工具，顺便介绍ttyd</title>
      <link>/code/2022/103020-vhs/</link>
      <pubDate>Sun, 30 Oct 2022 12:21:04 +0000</pubDate>
      <guid>/code/2022/103020-vhs/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../103020-vhs-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/charmbracelet/vhs&#34;&gt;vhs&lt;/a&gt; 是一个终端录像工具，将终端的命令及显示导出为gif/mp4/webm格式的文件。方便于你演示一些命令行的使用。&lt;/p&gt;&#xA;&lt;p&gt;自带示例还是比较丰富。它依赖于 &lt;a href=&#34;https://github.com/tsl0922/ttyd&#34;&gt;ttyd&lt;/a&gt; 和 &lt;a href=&#34;https://ffmpeg.org/&#34;&gt;ffmpeg&lt;/a&gt;，一个是命令行Web共享工具，一个是大名顶顶的音视频处理工具。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Upx4.0来了，更新一下喔</title>
      <link>/it/2022/103020-upx/</link>
      <pubDate>Sun, 30 Oct 2022 12:02:45 +0000</pubDate>
      <guid>/it/2022/103020-upx/</guid>
      <description>&lt;p&gt;upx是一个不错的跨平台压缩工具，最近来到4.0版。&lt;a href=&#34;https://github.com/upx/upx/releases&#34;&gt;下载地址&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;顺便来比较一下golang的压缩，这里随便使用了一个修改的程序:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;一般编译 go build: 9.67MB&lt;/li&gt;&#xA;&lt;li&gt;去调试编译 go build -ldflags &amp;ldquo;-s -w&amp;rdquo;: 6.78MB&lt;/li&gt;&#xA;&lt;li&gt;upx3.96压缩一般编译: 5.27MB&lt;/li&gt;&#xA;&lt;li&gt;upx3.96压缩去调试编译：2.51MB&lt;/li&gt;&#xA;&lt;li&gt;upx4压缩一般编译和去调试编译：与3.96版本一毛一样的大小，速度也没有区别。&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Golang库：Rod 网页自动化及爬虫库</title>
      <link>/code/2022/102910-rod/</link>
      <pubDate>Sat, 29 Oct 2022 02:31:29 +0000</pubDate>
      <guid>/code/2022/102910-rod/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/go-rod/rod&#34;&gt;Rod&lt;/a&gt; 是一个直接基于 DevTools Protocol 高级驱动程序。 它是为网页自动化和爬虫而设计的，既可用于高级应用开发也可用于低级应用开发，高级开发人员可以使用低级包和函数来轻松地定制或建立他们自己的Rod版本，高级函数只是建立Rod默认版本的例子。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot关于中文编码的研究</title>
      <link>/it/2022/102812-godot-code/</link>
      <pubDate>Fri, 28 Oct 2022 04:13:34 +0000</pubDate>
      <guid>/it/2022/102812-godot-code/</guid>
      <description>&lt;p&gt;在Crocoat中，希望给它做个对话功能，毕竟croc原本就带文本发送功能。这就涉及到Godot的编码问题，嗯，是问题。&lt;/p&gt;&#xA;&lt;p&gt;crod send &amp;ndash;code 123123 &amp;ndash;text &amp;ldquo;好&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang库：Systray 系统托盘图标和菜单</title>
      <link>/code/2022/102616-systray/</link>
      <pubDate>Wed, 26 Oct 2022 08:21:55 +0000</pubDate>
      <guid>/code/2022/102616-systray/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/kermieisinthehouse/systray&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;systray 是一个跨平台 Go 库，用于在通知区域中放置图标和菜单。&lt;/p&gt;&#xA;&lt;p&gt;支持Windows,macOS和Linux。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA;&#x9;systray.Run(onReady, onExit)&#xA;}&#xA;&#xA;func onReady() {&#xA;&#x9;systray.SetIcon(icon.Data)&#xA;&#x9;systray.SetTitle(&amp;#34;Awesome App&amp;#34;)&#xA;&#x9;systray.SetTooltip(&amp;#34;Pretty awesome超级棒&amp;#34;)&#xA;&#x9;mQuit := systray.AddMenuItem(&amp;#34;Quit&amp;#34;, &amp;#34;Quit the whole app&amp;#34;)&#xA;&#xA;&#x9;// Sets the icon of a menu item. Only available on Mac and Windows.&#xA;&#x9;mQuit.SetIcon(icon.Data)&#xA;}&#xA;&#xA;func onExit() {&#xA;&#x9;// clean up here&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>计划开发：一个软件使用记录系统</title>
      <link>/it/2022/102510-rec/</link>
      <pubDate>Tue, 25 Oct 2022 02:32:50 +0000</pubDate>
      <guid>/it/2022/102510-rec/</guid>
      <description>&lt;p&gt;计划开发一个软件使用记录系统，仅用于记录软件的使用情况。比如什么时间使用了，哪个IP使用了，操作系统基础情况，使用的频率等。&lt;br&gt;&#xA;这便于开发者做一些记录或调整，至少也知道软件受不受欢迎。&lt;br&gt;&#xA;这并不基于用于隐私。&lt;br&gt;&#xA;实际上不少软件已经这样做，有些前台做，有些后台做。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crocoat: 跨网跨平台的传输工具 v0.1.6</title>
      <link>/it/2022/102416-crocoat/</link>
      <pubDate>Mon, 24 Oct 2022 08:57:43 +0000</pubDate>
      <guid>/it/2022/102416-crocoat/</guid>
      <description>&lt;h3 id=&#34;简介&#34;&gt;简介&lt;/h3&gt;&#xA;&lt;p&gt;croc 是一种工具，可以让任何两台计算机简单安全地传输文件和文件夹。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;允许任意两台计算机传输数据（使用中继）&#xA;提供端到端加密（使用 PAKE）&#xA;实现轻松的跨平台传输（Windows、Linux、Mac）&#xA;允许多个文件传输&#xA;允许恢复被中断的传输&#xA;不需要本地服务器或端口转发&#xA;ipv6 优先和 ipv4 备用&#xA;可以使用代理，比如tor&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Crocoat 即 croc+coat，给croc套了个“外衣”,让使用更简单。&lt;/p&gt;</description>
    </item>
    <item>
      <title>包饺子</title>
      <link>/teach/2022/102317-bjz/</link>
      <pubDate>Sun, 23 Oct 2022 09:00:32 +0000</pubDate>
      <guid>/teach/2022/102317-bjz/</guid>
      <description>&lt;h3 id=&#34;煮饺子作文400字-篇1&#34;&gt;煮饺子作文400字 篇1&lt;/h3&gt;&#xA;&lt;p&gt;　　今天是星期天，妈妈突然有些头晕，爸爸要去加班，到了晚上7点多钟还没回来。我非常饿，妈妈于是让我自己煮速冻饺子吃。我先从冰箱了拿出速冻饺子，把它们一个一个地掰开，放到盘子里，然后把锅拿出来涮一下，倒上半锅水，盖上盖儿，放在炉子上。我小心地拧开天然气的阀点着火，然后走去问妈妈：“妈妈，水怎样才叫开呀？”妈妈说：“等锅里的水翻花，就开了。”我继续问：“饺子怎么才算煮熟呢？”妈妈说：“要点两次凉水，每次点小半碗，开锅后，打开盖儿煮一会儿皮。”&lt;br&gt;&#xA;　　我回到厨房，正巧水开了，我立刻打开锅盖，把饺子一个一个地放进大勺子上，轻轻地放进水里。然后勺子口冲下面水里轻轻地沿着锅边转一圈，可是有些饺子却一动不动，这可把我急坏了。我想了一个办法，用漏勺把饺子捞起来，再扔下锅，等着开锅。&lt;br&gt;&#xA;　　锅又开了，我打开盖，所有的饺子肚子都是大大的，浮在水上面上。我大声地去问妈妈：“妈妈，饺子全部的鼓起来了，是不是已经熟了呢？”妈妈告诉我：“捞出一个饺子，尝一下。”我连忙走回厨房里，捞出一个，用筷子夹开，用嘴吹吹，小心地咬了一口，大声地说：“妈妈，饺子已经熟了，真是非常的香！”我用漏勺把饺子统统捞了出来，分放在两个盘子里，在小碗里倒上油和调味剂给妈妈吃，她说：“你真棒！”&lt;br&gt;&#xA;　　煮饺子真是有趣。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Croc在内网中传送文件</title>
      <link>/it/2022/101917-croc/</link>
      <pubDate>Wed, 19 Oct 2022 09:24:06 +0000</pubDate>
      <guid>/it/2022/101917-croc/</guid>
      <description>&lt;p&gt;话说，网上一大抄，还是得自己英文好，学东西才快。&lt;/p&gt;&#xA;&lt;h4 id=&#34;使用环境&#34;&gt;使用环境：&lt;/h4&gt;&#xA;&lt;p&gt;在某医院，因为安全要求，内部医护使用的电脑是完全隔离开互联网的，即只能内部使用。一般的文件传输是使用FTP或者文件夹共享，优盘也是被禁止的。我们始终需要记住IP地址，帐号密码什么的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>方便上传的工具: 从设想到实现, 二百三十行代码完成</title>
      <link>/it/2022/101911-atools/</link>
      <pubDate>Wed, 19 Oct 2022 03:22:24 +0000</pubDate>
      <guid>/it/2022/101911-atools/</guid>
      <description>&lt;p&gt;经常在电脑端与手机端传图片。虽然电脑端可以通过Web服务上传，但又要开浏览器，又要输入密码，还要选择目录，选完之后手机端还要移动。懒人想：是不是能有一种方便的工具呢？&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot拾遗</title>
      <link>/it/2022/101911-godot/</link>
      <pubDate>Wed, 19 Oct 2022 03:15:36 +0000</pubDate>
      <guid>/it/2022/101911-godot/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Godot中图片的合并&lt;br&gt;&#xA;在godot中选中多张资源，资源管理器Import，Import As 选择 TextureAtlas，选中Atals File并命名。&#xA;&lt;img src=&#34;../101911-godot-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>描写银杏的作文</title>
      <link>/other/2022/101819-yinxin/</link>
      <pubDate>Tue, 18 Oct 2022 11:27:37 +0000</pubDate>
      <guid>/other/2022/101819-yinxin/</guid>
      <description>&lt;h2 id=&#34;描写银杏的作文&#34;&gt;描写银杏的作文&lt;/h2&gt;&#xA;&lt;p&gt;　　银杏为落叶大乔木，胸径可达4米，幼树树皮近平滑，浅灰色，大树之皮灰褐色，不规则纵裂，粗糙；有长枝与生长缓慢的距状短枝。&lt;/p&gt;&#xA;&lt;h3 id=&#34;描写银杏的作文-篇1&#34;&gt;描写银杏的作文 篇1&lt;/h3&gt;&#xA;&lt;p&gt;　　在色彩斑斓的大自然中，生长着许许多多美丽的植物，在众多的植物里面，我最喜欢的是那高大挺拔、有“活化石”美誉的银杏树。&lt;/p&gt;</description>
    </item>
    <item>
      <title>思考：如何动态的读取静态打包文件</title>
      <link>/it/2022/101813-think/</link>
      <pubDate>Tue, 18 Oct 2022 05:47:08 +0000</pubDate>
      <guid>/it/2022/101813-think/</guid>
      <description>&lt;p&gt;词说得有点绕，需求应该不复杂 。只是思路有点没想好。&lt;br&gt;&#xA;就是在做这个[Hugo工具]（/it/2022/101720-hugo/)的时候想到的：&lt;/p&gt;&#xA;&lt;h3 id=&#34;如何把站点打包成为一个文件呢&#34;&gt;如何把站点打包成为一个文件呢？&lt;/h3&gt;&#xA;&lt;p&gt;毕竟我这种喜欢绿色的人，看着目录下这么多文件有点“不便携”。&lt;br&gt;&#xA;我只需要：1.配置文件  2.工具程序  3.网站数据 这三个文件，就把所有功能都带走，岂不快哉。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于孩子的学习</title>
      <link>/teach/2022/101811-teach/</link>
      <pubDate>Tue, 18 Oct 2022 03:04:57 +0000</pubDate>
      <guid>/teach/2022/101811-teach/</guid>
      <description>&lt;p&gt;计划今天把购买的几本关于语文写作的书看看，解决一下他们的写作问题。&lt;br&gt;&#xA;主要还是“资源 ”不足，导致写的内容比较干。&lt;br&gt;&#xA;有没有办法跟踪孩子一天的上课，安排出可能的时间来让他们读点有必要的东西。&lt;/p&gt;</description>
    </item>
    <item>
      <title>做了一个Hugo工具</title>
      <link>/it/2022/101720-hugo/</link>
      <pubDate>Mon, 17 Oct 2022 12:12:32 +0000</pubDate>
      <guid>/it/2022/101720-hugo/</guid>
      <description>&lt;p&gt;因为家里领导需要一个记录的东西，自然就推荐了Hugo。不过对于非IT人士，电脑小白来说，Hugo依然显示得复杂了一点。花了一天时间搞了一个周边工具。&lt;br&gt;&#xA;当然它还很粗糙，先用着吧。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo Tools</title>
      <link>/it/2022/101609-hugotools/</link>
      <pubDate>Sun, 16 Oct 2022 01:42:13 +0000</pubDate>
      <guid>/it/2022/101609-hugotools/</guid>
      <description>&lt;p&gt;hugo虽然已经足够简单，但依然还是适合爱动手的人，对于电脑小白来说，依然还是比较难于使用。&#xA;功能&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;自动下载最新版hugo&lt;/li&gt;&#xA;&lt;li&gt;选择几种themes&lt;/li&gt;&#xA;&lt;li&gt;配置&lt;/li&gt;&#xA;&lt;li&gt;添加新文章，生成md&lt;/li&gt;&#xA;&lt;li&gt;打包/备份功能&lt;/li&gt;&#xA;&lt;li&gt;web服务&lt;/li&gt;&#xA;&lt;li&gt;发布功能&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>学霸与学渣</title>
      <link>/teach/2022/101516-xubaxuzha/</link>
      <pubDate>Sat, 15 Oct 2022 08:00:30 +0000</pubDate>
      <guid>/teach/2022/101516-xubaxuzha/</guid>
      <description>&lt;p&gt;1.写作业&lt;br&gt;&#xA;学霸：不会以完成作业为任务 他是以把知识点 全部搞懂为目标的。 学渣：单纯的只是为了完成 老师给的任务。&lt;/p&gt;&#xA;&lt;p&gt;2.规划时间&lt;br&gt;&#xA;学霸：知道自己规划时间， 知道哪些是要点， 应该先学什么， 不会盲目的跟随别人。 学渣：只会被动听老师安排， 或者盲目的跟随， 旁边同学做什么 他也就做什么。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Birthday</title>
      <link>/teach/2022/101510-birthday/</link>
      <pubDate>Sat, 15 Oct 2022 02:37:56 +0000</pubDate>
      <guid>/teach/2022/101510-birthday/</guid>
      <description>&lt;p&gt;感谢两个儿子给我的礼物，从小就有仪式感。&lt;/p&gt;&#xA;&lt;p&gt;我想把这个博客留下来给孩子们，虽然更多的是技术类。可惜以前写的都因为这样那样的关系丢失了。&lt;/p&gt;&#xA;&lt;p&gt;我也希望他们像写日记一样，可以尽早的写点东西。对自己的总结感悟，知识的积累，或是任何可以记录的东西。它证明了时间。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Github加速：查找可用IP</title>
      <link>/code/2022/101122-github/</link>
      <pubDate>Tue, 11 Oct 2022 14:49:43 +0000</pubDate>
      <guid>/code/2022/101122-github/</guid>
      <description>&lt;p&gt;Github是每个程序员的xx（有没有程序员不用这个东东的？）,但长城火墙就是抽风，也没说不让去，反正就是各种风。&lt;br&gt;&#xA;网上有几类加速方法，其中查找可用IP，修改本地host是一种方法。今天就是围绕这个方法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>python爆破rar密码</title>
      <link>/code/2022/101018-crack/</link>
      <pubDate>Mon, 10 Oct 2022 10:52:21 +0000</pubDate>
      <guid>/code/2022/101018-crack/</guid>
      <description>&lt;p&gt;穷举也叫爆破，反正以身试毒，一个一个试，即使有好字典，那也是凭运气。&lt;br&gt;&#xA;需要把解压程序unrar.exe放到当前目录。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/usr/bin/python&#xA;# -*- coding:utf-8 -*-&#xA;&#xA;import time&#xA;import rarfile&#xA;import itertools&#xA;from threading import Thread&#xA;# 用排列组合生成包含大写字母和数字的8位密码列表&#xA;pass_wd_list = (&amp;#34;&amp;#34;.join(x) for x in itertools.product(&amp;#39;abcdefghijklmnopqrstuvwxyz.ZYXWVUTSRQPONMLKJIHGFEDCBA1234567890&amp;#39;, repeat=8))&#xA;&#xA;success = 0    # 记录破解成功标志&#xA;num_flg = 0    # 记录破解次数&#xA;file_name = r&amp;#39;D:\python\my\1.rar&amp;#39;     # 要破解的文件&#xA;file_path = r&amp;#39;D:\python\my\crack_rar&amp;#39;             # 破解后解压位置&#xA;&#xA;def get_now_time():&#xA;    return time.strftime(&amp;#34;%Y-%m-%d %H:%M:%S&amp;#34;, time.localtime())&#xA;&#xA;def decryptRarZipFile():&#xA;    global success, num_flg&#xA;    while success == 0:&#xA;        num_flg += 1&#xA;        pass_wd = next(pass_wd_list)&#xA;&#xA;        fp = rarfile.RarFile(file_name)&#xA;        try:&#xA;            print(&amp;#34;{}{} 当前密码为：{} {}&amp;#34;.format(&amp;#34;\b&amp;#34;*70, get_now_time(), pass_wd, num_flg),end=&amp;#34;&amp;#34;)&#xA;            fp.extractall(path=file_path , pwd=pass_wd.encode())&#xA;            print(&amp;#34;success! password is : {}&amp;#34;.format(pass_wd))&#xA;            fp.close()&#xA;            success = 1    # 破解成功后改变标志值&#xA;        except:&#xA;            pass&#xA;&#xA;&#xA;if __name__ == &amp;#39;__main__&amp;#39;:&#xA;    start_time = time.time()&#xA;    decryptRarZipFile()&#xA;    end_time = time.time()&#xA;    change_time = end_time - start_time&#xA;    print(&amp;#34;破解耗时：{}s&amp;#34;.format(change_time))&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Flutter 自定义窗口 bitsdojo</title>
      <link>/code/2022/100914-flutter/</link>
      <pubDate>Sun, 09 Oct 2022 06:09:01 +0000</pubDate>
      <guid>/code/2022/100914-flutter/</guid>
      <description>&lt;p&gt;其实还不能完全算是自定义窗口。比如异形窗口就没有解决。&lt;br&gt;&#xA;bitsdojo_window 是一个用来定制桌面端窗口的插件&lt;/p&gt;&#xA;&lt;p&gt;pubspec.yaml: bitsdojo_window: ^last_version&lt;br&gt;&#xA;Windows下的应用：打开 windows\runner\main.cpp 文件，添加以下代码到前面：&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang库：Go-Flutter</title>
      <link>/code/2022/100723-goflutter/</link>
      <pubDate>Fri, 07 Oct 2022 15:43:12 +0000</pubDate>
      <guid>/code/2022/100723-goflutter/</guid>
      <description>&lt;p&gt;golang擅长后端，flutter擅长前端，两者“猪”联壁和，应是天下无双。 &lt;a href=&#34;https://github.com/go-flutter-desktop/go-flutter&#34;&gt;go-flutter&lt;/a&gt;是一个结合二者的库。&lt;/p&gt;&#xA;&lt;p&gt;提供了一些&lt;a href=&#34;github.com/go-flutter-desktop/examples&#34;&gt;示例&lt;/a&gt;，不过通过它的工具hover，建立个hello也是很简单。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;flutter create hello&#xA;hover init&#xA;hover run&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;hover是它提供的一个工具。&lt;br&gt;&#xA;go get -u -a github.com/go-flutter-desktop/hover&lt;br&gt;&#xA;go install&lt;br&gt;&#xA;或者：&lt;br&gt;&#xA;$env:GO111MODULE=&amp;ldquo;on&amp;rdquo;; go get -u -a github.com/go-flutter-desktop/hover@latest&lt;/p&gt;</description>
    </item>
    <item>
      <title>PaddleOCR飞桨 Python的OCR库</title>
      <link>/code/2022/100614-paddleocr/</link>
      <pubDate>Thu, 06 Oct 2022 06:55:34 +0000</pubDate>
      <guid>/code/2022/100614-paddleocr/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/PaddlePaddle/PaddleOCR&#34;&gt;github&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.6/README_ch.md&#34;&gt;中文说明&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;看结果识别率还是比较高的。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;from paddleocr import PaddleOCR, draw_ocr&#xA;# Paddleocr目前支持中英文、英文、法语、德语、韩语、日语，可以通过修改lang参数进行切换&#xA;# 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。&#xA;ocr = PaddleOCR(use_angle_cls=True, lang=&amp;#34;ch&amp;#34;) # need to run only once to download and load model into memory&#xA;img_path = &amp;#39;pay.png&amp;#39;&#xA;result = ocr.ocr(img_path, cls=True)&#xA;for line in result:&#xA;    print(line[1][0])&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Python文字到语音</title>
      <link>/code/2022/100511-audio/</link>
      <pubDate>Wed, 05 Oct 2022 03:47:59 +0000</pubDate>
      <guid>/code/2022/100511-audio/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# pip install pyttsx3&#xA;&#xA;import pyttsx3&#xA;&#xA;engine = pyttsx3.init()&#xA;engine.say(&amp;#34;学习Python！&amp;#34;)&#xA;engine.runAndWait()&#xA;rate = engine.getProperty(&amp;#34;rate&amp;#34;)  # 获取音频并输出&#xA;print(rate)&#xA;&#xA;engine.setProperty(&amp;#34;rate&amp;#34;, 150)   # 设置语速&#xA;engine.setProperty(&amp;#39;volume&amp;#39;,0.6)  #设置音量&#xA;engine.say(&amp;#34;学习Python！&amp;#34;)&#xA;engine.runAndWait()&#xA;&#xA;# 经测试，第2个合成器只能合成英文音频，不能合成中文音频&#xA;voices = engine.getProperty(&amp;#34;voices&amp;#34;)  # 获取所有合成器并输出&#xA;print(voices)&#xA;engine.setProperty(&amp;#34;voice&amp;#34;, voices[1].id)  # 设置合成器为第2个（索引为1，注意id属性）&#xA;engine.say(&amp;#34;学习Python！&amp;#34;)&#xA;engine.runAndWait()&#xA;&#xA;engine.stop()&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Python之微信自动化</title>
      <link>/code/2022/100417-wx/</link>
      <pubDate>Tue, 04 Oct 2022 09:32:52 +0000</pubDate>
      <guid>/code/2022/100417-wx/</guid>
      <description>&lt;p&gt;Python的插件(组件)是相当多的，自动化方面也是。&lt;br&gt;&#xA;虽然基于客户端微信去实现各种功能有点尴尬的感觉，但总还是比没有强。我总习惯一个问题寻找多种可能的解决方法，哪怕不是最优解。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pyautogui Pyton自动化</title>
      <link>/code/2022/093020-pyautogui/</link>
      <pubDate>Fri, 30 Sep 2022 12:57:15 +0000</pubDate>
      <guid>/code/2022/093020-pyautogui/</guid>
      <description>&lt;p&gt;说起自动化，首先想起的是一个设想：把嘴用起来，让声音来让电脑工作，而不是键盘和鼠标。在这一点上，手机比电脑都要智能些。&lt;br&gt;&#xA;pyautogui是一套实现自动化的库，可惜termux上判断为字符界面，并不能正确运行。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang可以直接保存map吗</title>
      <link>/code/2022/092709-memroy/</link>
      <pubDate>Tue, 27 Sep 2022 01:01:08 +0000</pubDate>
      <guid>/code/2022/092709-memroy/</guid>
      <description>&lt;p&gt;如题所问，Golang有直接保存map的方法吗？&lt;br&gt;&#xA;比如在这个godns中，它实现了将已查询到的结果保存在字典map中，而我想把它保存起来，下次继续使用。&lt;br&gt;&#xA;我想把这个map中的内容保存下来，它是一个有点复杂的struct。当然我可以一个一个解析出来，保存在文件或数据库中。但&amp;hellip;这有点累。想找一个简单的方法：直接保存map，不管它存个啥花花。&lt;br&gt;&#xA;当然，godns其实也实现了redis，我只是不喜欢。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Power Automate 微软的自动化利器</title>
      <link>/it/2022/092621-automate/</link>
      <pubDate>Mon, 26 Sep 2022 13:23:26 +0000</pubDate>
      <guid>/it/2022/092621-automate/</guid>
      <description>&lt;p&gt;Power Automate，微软的自动化工具。除了对资源占用以外，我想其它自动化工具不占太多优势。&lt;br&gt;&#xA;&lt;a href=&#34;https://learn.microsoft.com/zh-cn/power-automate/&#34;&gt;官方文档&lt;/a&gt;&lt;br&gt;&#xA;你看它左方的功能列表，能够感觉到它的强大，可以做的事情很多。&lt;br&gt;&#xA;如果它能定义热键就更实用了。&lt;br&gt;&#xA;&lt;img src=&#34;../092621-automate-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flet 基于Flutter的Python跨平台框架</title>
      <link>/code/2022/092519-flet/</link>
      <pubDate>Sun, 25 Sep 2022 11:32:40 +0000</pubDate>
      <guid>/code/2022/092519-flet/</guid>
      <description>&lt;p&gt;不用Python比较久了，库多，所以功能强。也算个跨平台。但文件太杂。&lt;br&gt;&#xA;今天这个Flet与Flutter占边，据说也跨平台，试试。如果Golang能搞这个样的GUI就好了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>疫情小工具：动态码变静态码</title>
      <link>/it/2022/092311-epidemic/</link>
      <pubDate>Fri, 23 Sep 2022 03:42:19 +0000</pubDate>
      <guid>/it/2022/092311-epidemic/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://y.scwy.net&#34;&gt;网址 https://y.scwy.net&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;因为学校要求每周打印一次健康通二维码，便于进出校门或作核酸。这里将动态(需要不定时更新)的二维码，变为一个固定的二维码地址，就不需要每次打印了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go漏洞检测工具：Govulncheck</title>
      <link>/code/2022/092308-govulncheck/</link>
      <pubDate>Fri, 23 Sep 2022 00:15:42 +0000</pubDate>
      <guid>/code/2022/092308-govulncheck/</guid>
      <description>&lt;p&gt;Go安全团队在2022.09.06发布了全新的漏洞检测工具govulncheck，可以帮助我们发现Go程序里的安全漏洞。&lt;br&gt;&#xA;Go安全团队维护了一个漏洞数据库，地址是https://vuln.go.dev&lt;/p&gt;</description>
    </item>
    <item>
      <title>需求：反向下载</title>
      <link>/it/2022/092017-reverse/</link>
      <pubDate>Tue, 20 Sep 2022 09:32:36 +0000</pubDate>
      <guid>/it/2022/092017-reverse/</guid>
      <description>&lt;p&gt;环境：某服务器主机，只对外网开放xx端口，提供Web服务。其它所有外网端口禁止。&lt;br&gt;&#xA;需求：下载外网文件&lt;/p&gt;&#xA;&lt;p&gt;思考：&#xA;一个方法当然可以让服务器提供上传功能来解决。但这里提的是反向下载。即服务器与客户机连接后，服务器可以主动下载客户机上的文件。&lt;br&gt;&#xA;看起来需要服务端和客户端共同来解决问题，不象Web已经有客户端(浏览器)了。&lt;br&gt;&#xA;如果类似croc这个软件能指定通信端口也应该能满足要求。&lt;/p&gt;</description>
    </item>
    <item>
      <title>穷人版眼镜显示器-增强现实</title>
      <link>/ai/2022/091915-glass/</link>
      <pubDate>Mon, 19 Sep 2022 07:01:16 +0000</pubDate>
      <guid>/ai/2022/091915-glass/</guid>
      <description>&lt;p&gt;智能眼镜现在主体有两个方向：眼镜显示器 和 带处理器的显示器，后者才能真的叫智能眼镜。&lt;br&gt;&#xA;个人更喜欢两者的结合：即可以单独作为显示器，接受设备的输出（这里又分为有线和无线）。又能作为独立的设备运行，完成一些简单的任务。毕竟作为智能设备，需要更多的电力，也会发热，小型化也是问题。大可以象瘦客户机一样，更大量的运算靠“云”处理。&lt;/p&gt;</description>
    </item>
    <item>
      <title>http/https代理研究</title>
      <link>/code/2022/091823-webproxy/</link>
      <pubDate>Sun, 18 Sep 2022 15:40:51 +0000</pubDate>
      <guid>/code/2022/091823-webproxy/</guid>
      <description>&lt;p&gt;之前看了DNS服务，实现想要的功能，还需要Web代理服务。&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/elazarl/goproxy&#34;&gt;goproxy&lt;/a&gt;先看看。&lt;/p&gt;</description>
    </item>
    <item>
      <title>DNS服务速度测试工具</title>
      <link>/code/2022/091819-dns/</link>
      <pubDate>Sun, 18 Sep 2022 11:21:41 +0000</pubDate>
      <guid>/code/2022/091819-dns/</guid>
      <description>&lt;p&gt;名字：DNSWho (这英语，嘎嘎的)&lt;/p&gt;&#xA;&lt;p&gt;功能：测试各个DNS服务器返回时间，按速度进行排序显示。你可以根据排序来设置自己的DNS服务器，肯定有大大的（人应该感受不到）的速度改善。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang库：GoMemcache</title>
      <link>/code/2022/091810-memcache/</link>
      <pubDate>Sun, 18 Sep 2022 02:05:30 +0000</pubDate>
      <guid>/code/2022/091810-memcache/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/bradfitz/gomemcache&#34;&gt;GoMemcache&lt;/a&gt;是memcache 客户端库，使用简单。&lt;/p&gt;&#xA;&lt;p&gt;go get github.com/bradfitz/gomemcache/memcache&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import (&#xA;        &amp;#34;github.com/bradfitz/gomemcache/memcache&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;     mc := memcache.New(&amp;#34;10.0.0.1:11211&amp;#34;, &amp;#34;10.0.0.2:11211&amp;#34;, &amp;#34;10.0.0.3:11212&amp;#34;)&#xA;     mc.Set(&amp;amp;memcache.Item{Key: &amp;#34;foo&amp;#34;, Value: []byte(&amp;#34;my value&amp;#34;)})&#xA;&#xA;     it, err := mc.Get(&amp;#34;foo&amp;#34;)&#xA;     ...&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import (&#xA;    &amp;#34;fmt&amp;#34;&#xA;    &amp;#34;github.com/bradfitz/gomemcache/memcache&amp;#34;&#xA;)&#xA;&#xA;var Client *memcache.Client&#xA;&#xA;const (&#xA;    MEMCACHE_HOST = &amp;#34;&amp;#34;&#xA;    MEMCACHE_PORT = &amp;#34;&amp;#34;&#xA;)&#xA;&#xA;var CacheErr error&#xA;&#xA;func Cache() {&#xA;    dsn := fmt.Sprintf(&amp;#34;%s:%s&amp;#34;, MEMCACHE_HOST, MEMCACHE_PORT)&#xA;    Client = memcache.New(dsn)&#xA;    // 添加一个key,过期时间为100s&#xA;    Client.Add(&amp;amp;memcache.Item{&#xA;        Key:        &amp;#34;golang&amp;#34;,&#xA;        Value:      []byte(&amp;#34;test golang memcache&amp;#34;),&#xA;        Flags:      0,&#xA;        Expiration: 100,&#xA;    })&#xA;    // 获取一个key&#xA;    item1, CacheErr := Client.Get(&amp;#34;golang&amp;#34;)&#xA;    if CacheErr != nil {&#xA;        fmt.Println(CacheErr.Error())&#xA;    } else {&#xA;        fmt.Println(string(item1.Value), item1.Key)&#xA;    }&#xA;    // 替换一个key，替换掉上面添加的key&#xA;    Client.Replace(&amp;amp;memcache.Item{&#xA;        Key:        &amp;#34;golang&amp;#34;,&#xA;        Value:      []byte(&amp;#34;replace golang memcache&amp;#34;),&#xA;        Flags:      0,&#xA;        Expiration: 100,&#xA;    })&#xA;    // 获取一个key&#xA;    item2, CacheErr := Client.Get(&amp;#34;golang&amp;#34;)&#xA;    if CacheErr != nil {&#xA;        fmt.Println(CacheErr.Error())&#xA;    } else {&#xA;        fmt.Println(string(item2.Value), item2.Key)&#xA;    }&#xA;    // 删除一个key&#xA;    CacheErr = Client.Delete(&amp;#34;golang&amp;#34;)&#xA;    if CacheErr != nil {&#xA;        fmt.Println(CacheErr.Error())&#xA;    } else {&#xA;        fmt.Println(&amp;#34;删除成功！&amp;#34;)&#xA;    }&#xA;    // 删除全部&#xA;    CacheErr = Client.DeleteAll()&#xA;    if CacheErr != nil {&#xA;        fmt.Println(CacheErr.Error())&#xA;    } else {&#xA;        fmt.Println(&amp;#34;全部删除成功！&amp;#34;)&#xA;    }&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;滑稽的是居然不好找到memcache的运行程序，需要自己编译。&lt;/p&gt;</description>
    </item>
    <item>
      <title>DNS服务测试工具</title>
      <link>/code/2022/091722-dns/</link>
      <pubDate>Sat, 17 Sep 2022 14:21:26 +0000</pubDate>
      <guid>/code/2022/091722-dns/</guid>
      <description>&lt;p&gt;这是网友的DNS服务器测试代码，也是miekg/dns库的实例。&lt;/p&gt;&#xA;&lt;p&gt;go run t.go -s 218.203.244.62:53 -q scwy.net:A&lt;br&gt;&#xA;返回在指定时间内运行的查询次数及平均耗时&lt;/p&gt;&#xA;&lt;p&gt;我测试了谷歌的8和4，都是0返回。&lt;/p&gt;</description>
    </item>
    <item>
      <title>游戏：汉字练金术</title>
      <link>/other/2022/091709-alchemy/</link>
      <pubDate>Sat, 17 Sep 2022 01:10:47 +0000</pubDate>
      <guid>/other/2022/091709-alchemy/</guid>
      <description>&lt;p&gt;alchemy：这是一个将汉字/部首拼成新字的游戏。对认识博大精深的汉字有好处。如果能把拼音加上，就更棒了。&lt;br&gt;&#xA;把字库删除了只有500KB，放到了博客目录，随时可以玩。&lt;/p&gt;</description>
    </item>
    <item>
      <title>简单个人DNS服务器</title>
      <link>/code/2022/091610-dns/</link>
      <pubDate>Fri, 16 Sep 2022 02:13:43 +0000</pubDate>
      <guid>/code/2022/091610-dns/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://i.scwy.net/it/2020/102108-tools/&#34;&gt;已提供下载&lt;/a&gt;,整合了上游DNS服务器测速，Github加速功能。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;之前也有写，一直在寻找一款DNS服务器。它需要有：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;上游查询结果缓存功能。或以实现查询的加速。&lt;/li&gt;&#xA;&lt;li&gt;请求过滤功能。主要还是http/https过滤广告，似乎有点超出DNS的范围。&lt;/li&gt;&#xA;&lt;li&gt;手动指定ip与域名。多用于内网使用。&lt;/li&gt;&#xA;&lt;li&gt;统计访问。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;今天看的第一个是&lt;a href=&#34;https://github.com/kenshinx/godns&#34;&gt;https://github.com/kenshinx/godns&lt;/a&gt;，测试能正常使用，缺少一些东西可能需要自己补。&lt;br&gt;&#xA;它只是一个简单的DNS缓存服务。当本地配置文件修改时，能自动载入。可以在配置文件中指定ip与域名。&lt;br&gt;&#xA;配有一个Web管理&lt;a href=&#34;https://github.com/kenshinx/joke&#34;&gt;https://github.com/kenshinx/joke&lt;/a&gt;，虽然配置了一下Redis,但还是没运行正确。&lt;/p&gt;</description>
    </item>
    <item>
      <title>IPv6试试</title>
      <link>/it/2022/091520-ipv6/</link>
      <pubDate>Thu, 15 Sep 2022 12:02:28 +0000</pubDate>
      <guid>/it/2022/091520-ipv6/</guid>
      <description>&lt;p&gt;与一位网页聊起，测试了一下IPV6，据说是没有关80和443。&lt;br&gt;&#xA;测试环境：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;手机电信网络,termux&lt;/li&gt;&#xA;&lt;li&gt;住所移动宽带&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;测试结果 ：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;手机通过移动wifi上网，外网可以访问手机上ipv6地址的端口。&lt;/li&gt;&#xA;&lt;li&gt;因为手机没有root，不能测试80。通过手机网络共享wifi，电脑连接手机wifi，外网可以访问到电脑上的ipv6的80端口。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;说明电信可移动确实现在还能用80(或许443也可以，未测试)。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang库：Adb手机工具Go库-gadb</title>
      <link>/code/2022/091500-adb/</link>
      <pubDate>Wed, 14 Sep 2022 16:18:09 +0000</pubDate>
      <guid>/code/2022/091500-adb/</guid>
      <description>&lt;p&gt;ADB，全名Android Debug Bridge，是Android提供的一个通用的调试工具，是一个C/S架构的命令行工具，通过这个工具，使得我们的PC能够和Android设备来进行通信。&lt;/p&gt;</description>
    </item>
    <item>
      <title>微软语音合成，媲美真人。</title>
      <link>/it/2022/091414-voice/</link>
      <pubDate>Wed, 14 Sep 2022 06:15:37 +0000</pubDate>
      <guid>/it/2022/091414-voice/</guid>
      <description>&lt;p&gt;「微软文本转语音」Azure Text to Speech 确实效果不错，拥有多种声音和情感风格，能像真人一样朗读出抑扬顿挫的感觉，合成的人声非常逼真。&lt;br&gt;&#xA;网友利用免费的在线演示制作出了TTS工具。不过这样是没有收费的稳定(随时可能不能使用)&lt;a href=&#34;https://www.iplaysoft.com/azure-tts.html&#34;&gt;详情看这里&lt;/a&gt;&lt;br&gt;&#xA;还是喜欢命令行来调用，一个&lt;a href=&#34;https://github.com/kxxt/aspeak&#34;&gt;python的工具aspeak&lt;/a&gt;正好符合我。&lt;br&gt;&#xA;安装 aspeak: pip install &amp;ndash;upgrade aspeak&lt;br&gt;&#xA;例子： aspeak -t &amp;ldquo;兄弟，加油啊&amp;rdquo; -l zh-CN&lt;br&gt;&#xA;导入txt并转换为wav： aspeak -f input.txt -l zh-CN -o output.wav&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot免费跨平台游戏引擎：代码收集</title>
      <link>/it/2022/091321-godot/</link>
      <pubDate>Tue, 13 Sep 2022 13:55:39 +0000</pubDate>
      <guid>/it/2022/091321-godot/</guid>
      <description>&lt;p&gt;持续更新看到的一些可用的代码或工具。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;编辑器工具&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;进入脚本栏，添加脚本，继承自EditorScript。添加第一句：tool，定义为编辑器工具。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../091321-godot-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../091321-godot-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>用mkcert生成SSL</title>
      <link>/it/2022/090918-ca/</link>
      <pubDate>Fri, 09 Sep 2022 10:22:22 +0000</pubDate>
      <guid>/it/2022/090918-ca/</guid>
      <description>&lt;p&gt;有时需要内网https，找一个生成证书的工具。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/FiloSottile/mkcert&#34;&gt;mkcert&lt;/a&gt;是一个使用go编写的生成本地自签证书的小程序，天生跨平台，使用简单，支持多域名，自动信任CA等。&lt;/p&gt;&#xA;&lt;p&gt;文章摘自:&lt;a href=&#34;https://www.jianshu.com/p/7cb5c2cffaaa&#34;&gt;https://www.jianshu.com/p/7cb5c2cffaaa&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;将ca证书加入本地可信ca&#34;&gt;将CA证书加入本地可信CA&lt;/h3&gt;&#xA;&lt;p&gt;mkcert -install&lt;/p&gt;&#xA;&lt;p&gt;仅仅这么一条简单的命令，就帮助我们将mkcert使用的根证书加入了本地可信CA中，以后由该CA签发的证书在本地都是可信的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>WebRTC 桌面共享 [2022.9.12]</title>
      <link>/it/2022/090818-webrtc/</link>
      <pubDate>Thu, 08 Sep 2022 10:32:24 +0000</pubDate>
      <guid>/it/2022/090818-webrtc/</guid>
      <description>&lt;p&gt;看到golang的屏幕共享库https://github.com/screego/server，稍用时间学习一下WebRTC。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.it610.com/article/1501409390186528768.htm&#34;&gt;这里有一篇&lt;/a&gt;稍详细的网文可以学习。&lt;/p&gt;&#xA;&lt;p&gt;WebRTC 网页即时通讯 (Web Real-Time Communications) 是一项实时通讯技术，它允许网络应用或者站点，在不借助中间媒介的情况下，建立浏览器之间点对点（Peer-to-Peer）的连接，实现视频流和音频流或者其他任意数据的传输。&lt;/p&gt;</description>
    </item>
    <item>
      <title>远程控制协议 RDP协议</title>
      <link>/it/2022/090718-remote/</link>
      <pubDate>Wed, 07 Sep 2022 10:33:46 +0000</pubDate>
      <guid>/it/2022/090718-remote/</guid>
      <description>&lt;p&gt;原来微软3389是基于RDP协议，但在github.com上没有找到一个比较能用的库。&lt;br&gt;&#xA;网上写的协议解析也不够能用。&lt;a href=&#34;https://lcx.cc/post/936/&#34;&gt;1&lt;/a&gt; &lt;a href=&#34;https://lcx.cc/post/937/&#34;&gt;2&lt;/a&gt;&lt;br&gt;&#xA;有些库不完整，也有年头了。&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/icodeface/grdp&#34;&gt;https://github.com/icodeface/grdp&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/tomatome/grdp&#34;&gt;https://github.com/tomatome/grdp&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/Madnikulin50/gordp&#34;&gt;https://github.com/Madnikulin50/gordp&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/Chorder/webRDP&#34;&gt;https://github.com/Chorder/webRDP&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>计划：基于个人的预约系统 (医生多点坐诊预约系统、多点执业预约系统)</title>
      <link>/it/2022/083021-order/</link>
      <pubDate>Tue, 30 Aug 2022 13:35:10 +0000</pubDate>
      <guid>/it/2022/083021-order/</guid>
      <description>&lt;p&gt;这是一个可能的开发计划。&lt;/p&gt;&#xA;&lt;p&gt;需求场景：&lt;br&gt;&#xA;某些个人医生，需要多点执业，如何独立于执业点之外，让患者能方便的知道自己的座诊时间，及时的预约。&lt;/p&gt;&#xA;&lt;p&gt;分析：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;医生介绍&lt;/li&gt;&#xA;&lt;li&gt;座诊时间计划，诊数计划&lt;/li&gt;&#xA;&lt;li&gt;多个座诊地址&lt;/li&gt;&#xA;&lt;li&gt;线上付费&lt;/li&gt;&#xA;&lt;li&gt;导出与接口&lt;/li&gt;&#xA;&lt;li&gt;预约数据通知到手机(短信/微信/飞书&amp;hellip;)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;大致如图:&#xA;&lt;img src=&#34;../083021-order-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>凉品派送系统</title>
      <link>/it/2022/082923-coolbrother/</link>
      <pubDate>Mon, 29 Aug 2022 15:17:48 +0000</pubDate>
      <guid>/it/2022/082923-coolbrother/</guid>
      <description>&lt;p&gt;根据&lt;a href=&#34;https://i.scwy.net/other/2022/051515-eat/&#34;&gt;之前的设想&lt;/a&gt;，在闲余做了一个凉品派送系统。主要方便派送人员及后台接单。&lt;br&gt;&#xA;这是一个H5页面，主要分为订单添加、订单列表、订单地图、客户列表&lt;br&gt;&#xA;虽然之前写了一个小程序应用，但实际上大部份客户都不喜欢使用，均是通过微信直接发信息。&lt;br&gt;&#xA;这个派送系统服务端(Golang+Sqlite)实际可以运行在手机的Linux下(例如Termux)，只供自己使用。也可以在家里装个服务器，穿透到外网使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>手机鼠标</title>
      <link>/it/2022/082920-mouse/</link>
      <pubDate>Mon, 29 Aug 2022 12:26:30 +0000</pubDate>
      <guid>/it/2022/082920-mouse/</guid>
      <description>&lt;p&gt;在网上看到一款手&lt;a href=&#34;https://www.ghxi.com/wifimouse.html&#34;&gt;机模拟作为鼠标&lt;/a&gt;使用的软件，思考一些自己实现的思路。&lt;br&gt;&#xA;分为客户端(手机)和服务端(PC)，手机端获取三轴传感器的移动作为鼠标移动数据，发送到PC端。PC端模拟鼠标移动及点击操作。&lt;br&gt;&#xA;Termux能获取到传感器数据吗?&lt;br&gt;&#xA;最新测试Termux获取传感器卡死。&lt;br&gt;&#xA;看来得通过Flutter。&lt;/p&gt;</description>
    </item>
    <item>
      <title>狼人杀角色自动安排?</title>
      <link>/code/2022/081021-killer/</link>
      <pubDate>Wed, 10 Aug 2022 13:12:25 +0000</pubDate>
      <guid>/code/2022/081021-killer/</guid>
      <description>&lt;p&gt;小朋友们要玩狼人杀，总是让我给他们安排角色。来个小程序，让他们自己玩。&lt;br&gt;&#xA;程序自动安排角色，小朋友们依次过来看系统随机给他们安排的角色。&lt;br&gt;&#xA;代码能用就行。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang rpc</title>
      <link>/code/2022/081016-rpc/</link>
      <pubDate>Wed, 10 Aug 2022 08:39:58 +0000</pubDate>
      <guid>/code/2022/081016-rpc/</guid>
      <description>&lt;p&gt;RPC Remote Procedure Call 远程过程调用。即客户端最简化，把实现过程放到服务端上供调用。最直接的作用就是微服务。虽然一般的公司根本不需要它。&lt;/p&gt;&#xA;&lt;h3 id=&#34;通信过程&#34;&gt;通信过程&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Client以本地调用的方式发起调用；&lt;/li&gt;&#xA;&lt;li&gt;Client stub收到调用后负责将被调用的方法名、参数等打包编码成特定格式成网络传输的消息体；&lt;/li&gt;&#xA;&lt;li&gt;Client stub将消息体通过网络发送给服务端；&lt;/li&gt;&#xA;&lt;li&gt;Server stub收到通过网络接收到消息后按照相应格式进行拆包解码，获取方法名和参数；&lt;/li&gt;&#xA;&lt;li&gt;Server stub根据方法名和参数进行本地调用；&lt;/li&gt;&#xA;&lt;li&gt;被调用者（Server）本地调用执行后将结果返回给Server stub；&lt;/li&gt;&#xA;&lt;li&gt;Server stub将返回值打包编码成消息；&lt;/li&gt;&#xA;&lt;li&gt;通过网络发送给Client；&lt;/li&gt;&#xA;&lt;li&gt;Client stub收到消息后，进行拆包解码，返回给Client；&lt;/li&gt;&#xA;&lt;li&gt;Client得到本次RPC调用的最终结果.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;代码&#34;&gt;代码&lt;/h3&gt;&#xA;&lt;p&gt;服务端&lt;/p&gt;</description>
    </item>
    <item>
      <title>基于社区、社区医疗机构的运动、营养、宣教系统</title>
      <link>/it/2022/081009-sp/</link>
      <pubDate>Wed, 10 Aug 2022 01:29:01 +0000</pubDate>
      <guid>/it/2022/081009-sp/</guid>
      <description>&lt;h3 id=&#34;功能&#34;&gt;功能：&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;社区/社区医疗机构的宣传、活动宣传&lt;/li&gt;&#xA;&lt;li&gt;内容高度可定制&lt;/li&gt;&#xA;&lt;li&gt;全自助，无需人为干预。后台可管理。&lt;/li&gt;&#xA;&lt;li&gt;健康、医疗宣传教育、知识，可以为图文、音频、视频。&lt;/li&gt;&#xA;&lt;li&gt;运动模块，定制化、个性化的运动方案。&lt;/li&gt;&#xA;&lt;li&gt;营养膳食，简单、可实施的个性化营养方案。&lt;/li&gt;&#xA;&lt;li&gt;量表自测。&lt;/li&gt;&#xA;&lt;li&gt;与后台医生互动。&lt;/li&gt;&#xA;&lt;li&gt;放置在内网，可提供外网服务，吸引更多的社区人群。&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>QOR使用总结</title>
      <link>/code/2022/080721-qor/</link>
      <pubDate>Sun, 07 Aug 2022 13:03:46 +0000</pubDate>
      <guid>/code/2022/080721-qor/</guid>
      <description>&lt;p&gt;QOR在搭建后台方面，确实还是比较快的。加上golang本身的特点，搭起整个系统框架就比较迅速了。&lt;br&gt;&#xA;可惜它没有继续的维护/更新，自己啃起来还是比较累的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang库：Yaegi</title>
      <link>/code/2022/080714-yaegi/</link>
      <pubDate>Sun, 07 Aug 2022 06:39:09 +0000</pubDate>
      <guid>/code/2022/080714-yaegi/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://gitee.com/mirrors/Yaegi/raw/master/doc/images/yaegi.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/traefik/yaegi&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Yaegi 是一个优雅的 Go 语言解释器，可以执行 Go 脚本和插件。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import &amp;#34;github.com/traefik/yaegi/interp&amp;#34;&#xA;&#xA;const src = `package foo&#xA;func Bar(s string) string { return s + &amp;#34;-Foo&amp;#34; }`&#xA;&#xA;func main() {&#xA;&#x9;i := interp.New(interp.Options{})&#xA;&#xA;&#x9;_, err := i.Eval(src)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(err)&#xA;&#x9;}&#xA;&#xA;&#x9;v, err := i.Eval(&amp;#34;foo.Bar&amp;#34;)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(err)&#xA;&#x9;}&#xA;&#xA;&#x9;bar := v.Interface().(func(string) string)&#xA;&#xA;&#x9;r := bar(&amp;#34;Kung&amp;#34;)&#xA;&#x9;println(r)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;应用：将go代码作为源文本保存，让已生成二进制的程序调用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot寻路</title>
      <link>/code/2022/080409-godot/</link>
      <pubDate>Thu, 04 Aug 2022 01:28:58 +0000</pubDate>
      <guid>/code/2022/080409-godot/</guid>
      <description>&lt;p&gt;原文地址：https://www.bilibili.com/read/cv16730370?from=note&lt;br&gt;&#xA;&lt;a href=&#34;https://www.bilibili.com/video/BV1Kb4y1Q7kz?spm_id_from=333.337.search-card.all.click&amp;amp;vd_source=b56d1c2a8432369e046076e4b0bad6fa&#34;&gt;这里&lt;/a&gt;也有视频，同时讲了如何移动角色。&lt;/p&gt;&#xA;&lt;p&gt;实际是godot帮我们把算法做好了，只需要做好地图边界，填入人物地始点，就会自动算出行动路径。&lt;br&gt;&#xA;这里主要使用了Navigation2D，路径规划使用NavigationPolygonInstance。&lt;/p&gt;</description>
    </item>
    <item>
      <title>寻找一款Golang的更新工具库</title>
      <link>/code/2022/080209-update/</link>
      <pubDate>Tue, 02 Aug 2022 01:00:02 +0000</pubDate>
      <guid>/code/2022/080209-update/</guid>
      <description>&lt;p&gt;不少的程序都需要自动更新，有时间找找。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang网页截屏</title>
      <link>/code/2022/080122-webscreen/</link>
      <pubDate>Mon, 01 Aug 2022 14:57:56 +0000</pubDate>
      <guid>/code/2022/080122-webscreen/</guid>
      <description>&lt;p&gt;原文：https://zhuanlan.zhihu.com/p/438257924&lt;br&gt;&#xA;这个可以形成一个web工具，专门用于帮助网友保存网址的截图。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang库 -- chromedp</title>
      <link>/code/2022/080121-chromedp/</link>
      <pubDate>Mon, 01 Aug 2022 13:52:31 +0000</pubDate>
      <guid>/code/2022/080121-chromedp/</guid>
      <description>&lt;p&gt;chromedp是谷歌官方推出的无头浏览器。chromedp 包是一种更快、更简单的方式来驱动在 Go 中支持 Chrome DevTools 协议的浏览器，而无需外部依赖。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/chromedp/chromedp&#34;&gt;chromedp github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/chromedp/examples&#34;&gt;示例https://github.com/chromedp/examples&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ffmpeg</title>
      <link>/it/2022/073020-ffmpeg/</link>
      <pubDate>Sat, 30 Jul 2022 12:42:32 +0000</pubDate>
      <guid>/it/2022/073020-ffmpeg/</guid>
      <description>&lt;p&gt;FFmpeg是一个强大的存在。FFmpeg是一套可以用来记录、转换数字音频、视频，并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec，为了保证高可移植性和编解码质量，libavcodec里很多code都是从头开发的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang库：gotalk 专注于进程间的通信，致力于简化通信协议和流程</title>
      <link>/code/2022/073018-gotalk/</link>
      <pubDate>Sat, 30 Jul 2022 10:01:42 +0000</pubDate>
      <guid>/code/2022/073018-gotalk/</guid>
      <description>&lt;p&gt;原文地址：https://zhuanlan.zhihu.com/p/374016707&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;提供简洁、清晰的 API；&#xA;支持 TCP，WebSocket 等协议；&#xA;采用非常简单而又高效的传输协议格式，便于抓包调试；&#xA;内置了 JavaScript 文件gotalk.js，方便开发基于 Web 网页的客户端程序；&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;go get -u github.com/rsms/gotalk&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang截屏功能库</title>
      <link>/code/2022/073008-screenshot/</link>
      <pubDate>Sat, 30 Jul 2022 00:32:06 +0000</pubDate>
      <guid>/code/2022/073008-screenshot/</guid>
      <description>&lt;p&gt;支持 Windows、Mac、Linux、FreeBSD、OpenBSD、NetBSD 和 Solaris 环境。支持多显示器。&lt;br&gt;&#xA;直接看代码。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; package main&#xA;&#xA; import (&#xA; &#x9;&amp;#34;github.com/kbinani/screenshot&amp;#34;&#xA; &#x9;&amp;#34;image/png&amp;#34;&#xA; &#x9;&amp;#34;os&amp;#34;&#xA; &#x9;&amp;#34;fmt&amp;#34;&#xA; )&#xA;&#xA; func main() {&#xA; &#x9;n := screenshot.NumActiveDisplays()&#xA;&#xA; &#x9;for i := 0; i &amp;lt; n; i++ {&#xA; &#x9;&#x9;bounds := screenshot.GetDisplayBounds(i)&#xA;&#xA; &#x9;&#x9;img, err := screenshot.CaptureRect(bounds)&#xA; &#x9;&#x9;if err != nil {&#xA; &#x9;&#x9;&#x9;panic(err)&#xA; &#x9;&#x9;}&#xA; &#x9;&#x9;fileName := fmt.Sprintf(&amp;#34;%d_%dx%d.png&amp;#34;, i, bounds.Dx(), bounds.Dy())&#xA; &#x9;&#x9;file, _ := os.Create(fileName)&#xA; &#x9;&#x9;defer file.Close()&#xA; &#x9;&#x9;png.Encode(file, img)&#xA;&#xA; &#x9;&#x9;fmt.Printf(&amp;#34;#%d : %v \&amp;#34;%s\&amp;#34;\n&amp;#34;, i, bounds, fileName)&#xA; &#x9;}&#xA; }&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;image&amp;#34;&#xA;&#x9;&amp;#34;image/png&amp;#34;&#xA;&#x9;&amp;#34;os&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/kbinani/screenshot&amp;#34;&#xA;)&#xA;&#xA;// save *image.RGBA to filePath with PNG format.&#xA;func save(img *image.RGBA, filePath string) {&#xA;&#x9;file, err := os.Create(filePath)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(err)&#xA;&#x9;}&#xA;&#x9;defer file.Close()&#xA;&#x9;png.Encode(file, img)&#xA;}&#xA;func main() {&#xA;&#xA;&#x9;//自定义截图&#xA;&#x9;img, err := screenshot.Capture(0, 0, 500, 500)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(err)&#xA;&#x9;}&#xA;&#x9;save(img, &amp;#34;自定义.png&amp;#34;)&#xA;&#xA;&#x9;//获取所有活动屏幕&#xA;&#x9;n := screenshot.NumActiveDisplays()&#xA;&#x9;if n &amp;lt;= 0 {&#xA;&#x9;&#x9;panic(&amp;#34;没有发现活动的显示器&amp;#34;)&#xA;&#x9;}&#xA;&#xA;&#x9;//全屏截取所有活动屏幕&#xA;&#x9;if n &amp;gt; 0 {&#xA;&#x9;&#x9;for i := 0; i &amp;lt; n; i++ {&#xA;&#x9;&#x9;&#x9;img, err = screenshot.CaptureDisplay(i)&#xA;&#x9;&#x9;&#x9;if err != nil {&#xA;&#x9;&#x9;&#x9;&#x9;panic(err)&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;fileName := fmt.Sprintf(&amp;#34;第%d屏幕截图.png&amp;#34;, i)&#xA;&#x9;&#x9;&#x9;save(img, fileName)&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#xA;&#x9;//使用 Rectangle 自定义截图&#xA;&#x9;// 获取第一个屏幕显示范围&#xA;&#x9;var new image.Rectangle = image.Rect(0, 0, 600, 700)&#xA;&#x9;img, err = screenshot.CaptureRect(new)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(err)&#xA;&#x9;}&#xA;&#x9;save(img, &amp;#34;new.png&amp;#34;)&#xA;&#xA;&#x9;//使用 GetDisplayBounds获取指定屏幕显示范围，全屏截图&#xA;&#x9;bounds := screenshot.GetDisplayBounds(0)&#xA;&#x9;img, err = screenshot.CaptureRect(bounds)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(err)&#xA;&#x9;}&#xA;&#x9;save(img, &amp;#34;all.png&amp;#34;)&#xA;&#xA;&#x9;//使用Union获取指定屏幕 矩形最小点和最大点&#xA;&#x9;var all image.Rectangle = image.Rect(0, 0, 0, 0)&#xA;&#x9;bounds1 := screenshot.GetDisplayBounds(0)&#xA;&#x9;all = bounds1.Union(all)&#xA;&#x9;fmt.Println(all.Min.X, all.Min.Y, all.Dx(), all.Dy())&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Flutter之Linux/Windows</title>
      <link>/code/2022/072717-flutter/</link>
      <pubDate>Wed, 27 Jul 2022 09:04:58 +0000</pubDate>
      <guid>/code/2022/072717-flutter/</guid>
      <description>&lt;p&gt;flutter随着版本的增加，功能越来越强，3.0已经开始支持linux了。之前测试不成功，这此试用还比较简单。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;安装依赖。也不知道是不是上次我安装过了，反正这次没需要。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt-get install clang cmake ninja-build pkg-config libgtk-3-dev&#xA;sudo apt install liblzma-dev&#xA;// 我测试时是3.0.5，至少不需要后一句安装了。&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;开启linux桌面应用。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;flutter config --enable-linux-desktop&#xA;// 我测试时是3.0.5，不使用此句也可以正常运行。&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;创建项目&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;flutter create ease&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;运行&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;flutter run -d linux&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;5&#34;&gt;&#xA;&lt;li&gt;其它&lt;br&gt;&#xA;在linux/my_application.cc文件中添加这句成为全屏应用：gtk_window_fullscreen(GTK_WINDOW(window));&#xA;比如我添加到这里&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;  gtk_window_fullscreen(GTK_WINDOW(window));&#xA;  gtk_window_set_default_size(window, 1280, 720);&#xA;  gtk_widget_show(GTK_WIDGET(window));&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;6&#34;&gt;&#xA;&lt;li&gt;构建release版本&lt;br&gt;&#xA;flutter build linux &amp;ndash;release&lt;br&gt;&#xA;将在build/linux/x64/release/bundle/中产生运行文件及相关资源。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;余下的就是正常的flutter编程了。虽然我flutter doctor时没有android，但这与linux无关。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang库：go-socket.io 使用</title>
      <link>/code/2022/072612-go-socket.io/</link>
      <pubDate>Tue, 26 Jul 2022 04:29:53 +0000</pubDate>
      <guid>/code/2022/072612-go-socket.io/</guid>
      <description>&lt;p&gt;因为上一篇文章涉及此库，来学习一下。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/googollee/go-socket.io&#34;&gt;go-socket.io&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;go-socket.io 是一个在 Golang 中实现 Socket.IO 的库，它是一个实时应用程序框架。&lt;br&gt;&#xA;通过websocket,实现端到端的通信，服务器只需要保存连接信息即可。这大大减小了服务器的压力。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Webrtc学习：网页视频</title>
      <link>/code/2022/072609-webrtc/</link>
      <pubDate>Tue, 26 Jul 2022 01:41:34 +0000</pubDate>
      <guid>/code/2022/072609-webrtc/</guid>
      <description>&lt;p&gt;浏览器的功能是越来越强了。之前做了一个在线聊天室(&lt;a href=&#34;https://c.scwy.net&#34;&gt;https://c.scwy.net&lt;/a&gt;)，可以图片、文字、语音，看起来还可以增加视频。&lt;br&gt;&#xA;刚才试了一下网友的演示:&lt;a href=&#34;https://github.com/243286065/WebRTCDemo&#34;&gt;https://github.com/243286065/WebRTCDemo&lt;/a&gt;， 示例5. remote_chat,在手机和平板之间视频成功。&lt;br&gt;&#xA;稍后再学习学习。&lt;br&gt;&#xA;另外还看到一个Pion-WebRTC: 纯go语言实现的webrtc框架库，也值得学习使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2009-2021年中国全国五级行政区域数据</title>
      <link>/it/2022/072220-region/</link>
      <pubDate>Fri, 22 Jul 2022 12:30:32 +0000</pubDate>
      <guid>/it/2022/072220-region/</guid>
      <description>&lt;p&gt;这个库比较细，包括村/街道。&lt;/p&gt;&#xA;&lt;p&gt;Github: &lt;a href=&#34;https://github.com/issue9/cnregion&#34;&gt;https://github.com/issue9/cnregion&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;数据来源于 &lt;a href=&#34;http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/&#34;&gt;http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/issue9/cnregion&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;v, _ := cnregion.LoadFile(&amp;#34;./regions.db&amp;#34;, &amp;#34;-&amp;#34;, 2020)&#xA;&#xA;&#x9;p := v.Provinces() // 返回所有省列表&#xA;&#x9;// cities := p[0].Items()        // 返回该省下的所有市&#xA;&#x9;// counties := cities[0].Items() // 返回该市下的所有县&#xA;&#x9;// towns := counties[0].Items()  // 返回所有镇&#xA;&#x9;// villages := towns[0].Items()  // 所有村和街道信息&#xA;&#xA;&#x9;// d := v.Districts()        // 按以前的行政大区进行划分&#xA;&#x9;// provinces := d[0].Items() // 该大区下的所有省份&#xA;&#xA;&#x9;// list := v.Search(&amp;amp;cnregion.SearchOptions{Text: &amp;#34;万年场&amp;#34;}) // 按索地名中带温州的区域列表&#xA;&#x9;// for i, n := range list {&#xA;&#x9;// &#x9;fmt.Println(i, n.FullName())&#xA;&#x9;// }&#xA;&#xA;&#x9;for i, n := range p {&#xA;&#x9;&#x9;fmt.Println(n.ID(), n.Name())&#xA;&#x9;&#x9;if n.ID() == &amp;#34;51&amp;#34; {&#xA;&#x9;&#x9;&#x9;for _, m := range p[i].Items() {&#xA;&#x9;&#x9;&#x9;&#x9;fmt.Println(&amp;#34;\t&amp;#34;, m.ID(), m.Name())&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>炫彩界面库 xcgui</title>
      <link>/code/2022/072021-xcgui/</link>
      <pubDate>Wed, 20 Jul 2022 13:09:17 +0000</pubDate>
      <guid>/code/2022/072021-xcgui/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.xcgui.com/&#34;&gt;官方网站 http://www.xcgui.com/&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;http://www.xcgui.com/doc-ui/&#34;&gt;中文文档 http://www.xcgui.com/doc-ui/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;这是一个界面设计框架，除了支持C/C++、易语言、C#、Delphl，竟然也有&lt;a href=&#34;https://github.com/twgh/xcgui&#34;&gt;Golang版&lt;/a&gt;，还有&lt;a href=&#34;https://github.com/twgh/xcgui-example&#34;&gt;Golang示例&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;C:%5Ctemp%5C68747470733a2f2f7a332e617831782e636f6d2f323032312f30392f31352f34566d6839532e706e67.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;看起来代码也不复杂。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// 简单窗口.&#xA;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;github.com/twgh/xcgui/app&amp;#34;&#xA;&#x9;&amp;#34;github.com/twgh/xcgui/window&amp;#34;&#xA;&#x9;&amp;#34;github.com/twgh/xcgui/xcc&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;// 1.初始化UI库&#xA;&#x9;a := app.New(true)&#xA;&#x9;// 2.创建窗口&#xA;&#x9;w := window.New(0, 0, 430, 300, &amp;#34;&amp;#34;, 0, xcc.Window_Style_Simple|xcc.Window_Style_Btn_Close)&#xA;&#x9;// 设置窗口边框大小&#xA;&#x9;w.SetBorderSize(0, 30, 0, 0)&#xA;&#x9;// 设置窗口透明类型&#xA;&#x9;w.SetTransparentType(xcc.Window_Transparent_Shadow)&#xA;&#x9;// 设置窗口阴影&#xA;&#x9;w.SetShadowInfo(8, 254, 10, false, 0)&#xA;&#x9;// 3.显示窗口&#xA;&#x9;w.ShowWindow(xcc.SW_SHOW)&#xA;&#x9;// 4.运行程序&#xA;&#x9;a.Run()&#xA;&#x9;// 5.释放UI库&#xA;&#x9;a.Exit()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>piping 文件/文本传输工具</title>
      <link>/code/2022/071718-piping/</link>
      <pubDate>Sun, 17 Jul 2022 10:03:26 +0000</pubDate>
      <guid>/code/2022/071718-piping/</guid>
      <description>&lt;p&gt;Piping是一个轻量级的开源文件传输工具，可自托管，支持使用curl,wget下载。可用于不同设备间传输文本或文件。&lt;br&gt;&#xA;Github 地址：https://github.com/nwtgck/piping-server&lt;/p&gt;</description>
    </item>
    <item>
      <title>电动三轮车防盗思考</title>
      <link>/it/2022/071314-guard/</link>
      <pubDate>Wed, 13 Jul 2022 06:57:29 +0000</pubDate>
      <guid>/it/2022/071314-guard/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://pics2.baidu.com/feed/9e3df8dcd100baa114eac659906cd91bcafc2e90.jpeg?token=224f0653e0e10517afe54c024054207c&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最近因为“工作”需要，购买了一个老年车（电动三轮车）。&lt;br&gt;&#xA;如何防盗，发挥IT人智慧的时候到了。&lt;/p&gt;&#xA;&lt;p&gt;问题：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;电池防盗&lt;/li&gt;&#xA;&lt;li&gt;车辆防盗&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;处理：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;电池防盗&lt;br&gt;&#xA;断电报警器，防止电池被偷。即当供电没有时，机器将响起警报。&lt;br&gt;&#xA;再加强一点，防止打开坐位下的电池盖，让“你”掀起盖子就报警。&lt;/li&gt;&#xA;&lt;li&gt;车辆防盗&lt;br&gt;&#xA;比如通过智能芯片，例如8266,esp32,当我靠近时才启动（扫描蓝牙MAC）。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;更多的再想想&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>MPFlutter</title>
      <link>/code/2022/071114-mpflutter/</link>
      <pubDate>Mon, 11 Jul 2022 06:40:27 +0000</pubDate>
      <guid>/code/2022/071114-mpflutter/</guid>
      <description>&lt;p&gt;前段时间简单的学习了一下Flutter，因为最近事多，所以暂停了一段。今天看到个用Flutter做小程序的框架，准备找时间学习学习。&#xA;或许以后就是Flutter前端+Golang后端，两者都是跨平台的主。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Win下只允许指定U盘</title>
      <link>/it/2022/070307-usb/</link>
      <pubDate>Sat, 02 Jul 2022 23:38:13 +0000</pubDate>
      <guid>/it/2022/070307-usb/</guid>
      <description>&lt;p&gt;原文: &lt;a href=&#34;https://www.sohu.com/a/364793452_120432716&#34;&gt;https://www.sohu.com/a/364793452_120432716&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;插入U盘，查看ID&lt;br&gt;&#xA;设备管理器 - 通用串行总线控制器 - USB大容量存储设备 - 属性 - 详细信息 - 硬件Id ,复制&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;组策略 gedit.msc&lt;br&gt;&#xA;计算机配置—管理模板—系统—设备安装&lt;/p&gt;</description>
    </item>
    <item>
      <title>mp3信息设置工具</title>
      <link>/code/2022/070123-id3/</link>
      <pubDate>Fri, 01 Jul 2022 15:06:01 +0000</pubDate>
      <guid>/code/2022/070123-id3/</guid>
      <description>&lt;p&gt;navidrome里的专辑归纳还是有点乱。有些专辑下面只有一首歌，一个歌后若干个专辑(但下面只有一首歌)。等等这些问题，打算将部份id3信息清除或设置，达到管理专辑的目的。&lt;br&gt;&#xA;经编译后使用：&lt;br&gt;&#xA;查看信息: id3.exe -f 文件名&lt;br&gt;&#xA;设置: id3.exe -f 文件名  -t 信息&lt;br&gt;&#xA;清除: id3.exe -f 文件名  -c true -t 任意信息     (清除标题)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mp3 Tag解析与写入</title>
      <link>/code/2022/062918-id3/</link>
      <pubDate>Wed, 29 Jun 2022 10:49:27 +0000</pubDate>
      <guid>/code/2022/062918-id3/</guid>
      <description>&lt;h2 id=&#34;no1&#34;&gt;No.1&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/dhowden/tag&#34;&gt;github.com/dhowden/tag&lt;/a&gt;看起来它只是一个解析库，并未有写入功能。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;type Metadata interface {&#xA;&#x9;Format() Format&#xA;&#x9;FileType() FileType&#xA;&#xA;&#x9;Title() string&#xA;&#x9;Album() string&#xA;&#x9;Artist() string&#xA;&#x9;AlbumArtist() string&#xA;&#x9;Composer() string&#xA;&#x9;Genre() string&#xA;&#x9;Year() int&#xA;&#xA;&#x9;Track() (int, int) // Number, Total&#xA;&#x9;Disc() (int, int) // Number, Total&#xA;&#xA;&#x9;Picture() *Picture // Artwork&#xA;&#x9;Lyrics() string&#xA;&#x9;Comment() string&#xA;&#xA;&#x9;Raw() map[string]interface{} // NB: raw tag names are not consistent across formats.&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;附带了一个Tag工具：go install github.com/dhowden/tag/cmd/tag@latest&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang与3d</title>
      <link>/code/2022/062809-3d/</link>
      <pubDate>Tue, 28 Jun 2022 01:22:45 +0000</pubDate>
      <guid>/code/2022/062809-3d/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://github.com/shikanon/gocanvas/blob/main/docs/logo.png&#34; alt=&#34;&#34;&gt;&#xA;先是看到了&lt;a href=&#34;https://github.com/shikanon/gocanvas&#34;&gt;GoCanvas&lt;/a&gt;这个3D引擎，它是一个golang封装的3D模型动画演示库，提供了gltf、obj、fbx等多种模型格式加载，支持天空盒、灯光和脚本动画编辑等功能。相比于g3n等3D框架，GoCavans 更轻量并且简单易用。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/shikanon/gocanvas/raw/main/docs/demo.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;代码看起来比较简单，做一些简单的网页3D展示似乎也还行。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;net/http&amp;#34;&#xA;&#xA;&#x9;gocanvas &amp;#34;github.com/shikanon/gocanvas/pkg/canvas&amp;#34;&#xA;)&#xA;&#xA;func render(w http.ResponseWriter, r *http.Request) {&#xA;&#x9;app := gocanvas.NewApplication(w)&#xA;&#x9;scene := app.Scene()&#xA;&#x9;// 创建一个摄像机&#xA;&#x9;camera := gocanvas.DefaultCamera()&#xA;&#x9;// 创建一个天空盒&#xA;&#x9;skybox := gocanvas.DefaultSkybox()&#xA;&#x9;// 创建一个灯光&#xA;&#x9;light := gocanvas.DefaultLight()&#xA;&#x9;// 创建一个模型&#xA;&#x9;model, err := gocanvas.LoadGLTFModel(&amp;#34;./assets/corvette_stingray/scene.gltf&amp;#34;)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;fmt.Fprintln(w, err.Error())&#xA;&#x9;&#x9;return&#xA;&#x9;}&#xA;&#x9;// 加入到场景中&#xA;&#x9;scene.AddCamera(camera)&#xA;&#x9;scene.AddSkyBox(skybox)&#xA;&#x9;scene.AddLight(light)&#xA;&#x9;scene.AddModel(model)&#xA;&#x9;// 渲染&#xA;&#x9;err = scene.Render()&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;fmt.Fprintln(w, err.Error())&#xA;&#x9;&#x9;return&#xA;&#x9;}&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;http.HandleFunc(&amp;#34;/&amp;#34;, render)&#xA;&#x9;http.Handle(&amp;#34;/src/&amp;#34;, http.FileServer(http.Dir(&amp;#34;&amp;#34;)))&#xA;&#x9;http.Handle(&amp;#34;/assets/&amp;#34;, http.FileServer(http.Dir(&amp;#34;&amp;#34;)))&#xA;&#x9;http.ListenAndServe(&amp;#34;:8080&amp;#34;, nil)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://github.com/g3n/g3nd/raw/master/data/images/g3n_logo.png&#34; alt=&#34;&#34;&gt;&#xA;通过它，又看到了&lt;a href=&#34;https://github.com/g3n/engine&#34;&gt;G3N游戏引擎&lt;/a&gt;，&lt;a href=&#34;http://g3n.rocks/&#34;&gt;官网http://g3n.rocks/&lt;/a&gt;,&lt;a href=&#34;https://github.com/g3n/g3nd&#34;&gt;示例https://github.com/g3n/g3nd&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>某学习网站的跟踪</title>
      <link>/it/2022/062609-look/</link>
      <pubDate>Sun, 26 Jun 2022 01:51:21 +0000</pubDate>
      <guid>/it/2022/062609-look/</guid>
      <description>&lt;p&gt;这是一个学习网站，要求必须把视频看完，浏览器必须有焦点（即必须在前台播放观看）。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;div data-v-203b5c6f=&amp;#34;&amp;#34; class=&amp;#34;video-container cb&amp;#34;&amp;gt;&#xA;https://videoadmin.chinahrt.com/videoPlay/play?&#xA;    business_id=gp5&amp;amp;&#xA;    signId=151%23be50251f5ca649fa9411ae9b7e0e0083%23p2s6_29a9fdb2-8e2c-488e-b4f8-15c04bea7a00&amp;amp;&#xA;    courseId=424cd7cfc80b43b88dd4c42c8966666d&amp;amp;&#xA;    sectionId=424cd7cfc80b43b88dd4c42c8966666d1-3&amp;amp;&#xA;    ifPauseAd=1&amp;amp;&#xA;    ifPauseBlur=1&amp;amp;&#xA;    ifCourseComplete=0&amp;amp;&#xA;    ifDrag=0&amp;amp;&#xA;    proxy_url=https://web.chinahrt.com/index.html%23/v_proxy%3FtrainplanId=be50251f5ca649fa9411ae9b7e0e0083%26courseId=424cd7cfc80b43b88dd4c42c8966666d%26sectionId=424cd7cfc80b43b88dd4c42c8966666d1-3&amp;amp;&#xA;    receive_course_record_url=https://yun.chinahrt.com/yunapi/course/update_learn_record&amp;amp;&#xA;    version=ckplayerx1&amp;amp;&#xA;    sub_domain_name=151&amp;amp;&#xA;    allow_study_same_time=0&#xA;&#xA;player_common.js&#xA;---------------------------------------&#xA;function initLog(){&#xA;    businessLog(attrset.signId, attrset.courseId, &amp;#34;5&amp;#34;, &amp;#34;3&amp;#34;, attrset.sectionId, &amp;#34;4&amp;#34;, 1,1);&#xA;}&#xA;&#xA;function sendLog(){&#xA;    var stayTime = new Date().getTime() - startTime;&#xA;    businessLog(attrset.signId, attrset.courseId, &amp;#34;5&amp;#34;, &amp;#34;3&amp;#34;, attrset.sectionId, &amp;#34;4&amp;#34;, stayTime,attrset.actualLearnTime);&#xA;}&#xA;&#xA;courseyunRecord 学习进度&#xA;&#xA;function courseyunRecord() {&#xA;    if (attrset.maxTime &amp;lt;= attrset.lastPlayTime || exiting) {&#xA;        return;&#xA;    }&#xA;    $.ajax({&#xA;        url: &amp;#34;/videoPlay/takeRecord&amp;#34;,&#xA;        data: {&#xA;            studyCode: attrset.studyCode,  // 21523667925f40d2a486bd917bab8cb2&#xA;            recordUrl: attrset.recordUrl,&#xA;            updateRedisMap: attrset.updateRedisMap,  // 1&#xA;            recordId: attrset.recordId,   // 1177802025af422bbd7516c4c0dad10e&#xA;            sectionId: attrset.sectionId,  // 424cd7cfc80b43b88dd4c42c8966666d1-2 &#xA;                                           // 424cd7cfc80b43b88dd4c42c8966666d1-2&#xA;            signId: attrset.signId,   // 151#be50251f5ca649fa9411ae9b7e0e0083#p2s6_29a9fdb2-8e2c-488e-b4f8-15c04bea7a00   //用户的唯一标识&#xA;            time: attrset.maxTime,  // 视频时长？&#xA;            businessId: attrset.businessId&#xA;        },&#xA;        dataType: &amp;#34;json&amp;#34;,&#xA;        type: &amp;#34;post&amp;#34;,&#xA;        success: function (data) {&#xA;            if (data.status == &amp;#39;0&amp;#39;) {&#xA;                attrset.lastPlayTime = attrset.maxTime;&#xA;            } else if (data.status == &amp;#39;-1&amp;#39;) {&#xA;                //停止播放&#xA;                alert(&amp;#34;不允许同时观看多门课程,请关闭当前页面&amp;#34;);&#xA;                try {&#xA;                    player.quitFullScreen();&#xA;                } catch (e) {&#xA;                }&#xA;                player.videoClear();&#xA;                $(&amp;#34;#video&amp;#34;).remove();&#xA;            }&#xA;        }&#xA;    });&#xA;}&#xA;&#xA;&#xA;&#xA;https://videoadmin.chinahrt.com/js/log/businesslog.js?v=1233&#xA;https://videoadmin.chinahrt.com/js/player/player_common.js?version=5&#xA;https://videoadmin.chinahrt.com/videoPlay/play?business_id=gp5&amp;amp;signId=151%23be50251f5ca649fa9411ae9b7e0e0083%23p2s6_29a9fdb2-8e2c-488e-b4f8-15c04bea7a00&amp;amp;courseId=424cd7cfc80b43b88dd4c42c8966666d&amp;amp;sectionId=424cd7cfc80b43b88dd4c42c8966666d1-2&amp;amp;ifPauseAd=1&amp;amp;ifPauseBlur=1&amp;amp;ifCourseComplete=0&amp;amp;ifDrag=0&amp;amp;proxy_url=https://web.chinahrt.com/index.html%23/v_proxy%3FtrainplanId=be50251f5ca649fa9411ae9b7e0e0083%26courseId=424cd7cfc80b43b88dd4c42c8966666d%26sectionId=424cd7cfc80b43b88dd4c42c8966666d1-2&amp;amp;receive_course_record_url=https://yun.chinahrt.com/yunapi/course/update_learn_record&amp;amp;version=ckplayerx1&amp;amp;sub_domain_name=151&amp;amp;allow_study_same_time=0&#xA;https://videoadmin.chinahrt.com/videoPlay/play?business_id=gp5&amp;amp;&#xA;   signId=151%23be50251f5ca649fa9411ae9b7e0e0083%23p2s6_29a9fdb2-8e2c-488e-b4f8-15c04bea7a00&amp;amp;&#xA;   courseId=424cd7cfc80b43b88dd4c42c8966666d&amp;amp;sectionId=424cd7cfc80b43b88dd4c42c8966666d1-1&amp;amp;&#xA;   ifPauseAd=1&amp;amp;&#xA;   ifPauseBlur=1&amp;amp;&#xA;   ifCourseComplete=0&amp;amp;&#xA;   ifDrag=0&amp;amp;&#xA;   proxy_url=https://web.chinahrt.com/index.html%23/v_proxy%3FtrainplanId=be50251f5ca649fa9411ae9b7e0e0083%26courseId=424cd7cfc80b43b88dd4c42c8966666d%26sectionId=424cd7cfc80b43b88dd4c42c8966666d1-1&amp;amp;receive_course_record_url=https://yun.chinahrt.com/yunapi/course/update_learn_record&amp;amp;&#xA;   version=ckplayerx1&amp;amp;&#xA;   sub_domain_name=151&amp;amp;&#xA;   allow_study_same_time=0&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>关于个人微信(网页)接口</title>
      <link>/it/2022/061808-weixin/</link>
      <pubDate>Sat, 18 Jun 2022 00:32:15 +0000</pubDate>
      <guid>/it/2022/061808-weixin/</guid>
      <description>&lt;p&gt;没想到2017年做的个人微信(网页微信)程序稍作修改还能使用。看起来微信没有怎么管这块。&lt;br&gt;&#xA;考虑到某个人微信号需要多个人使用，类似于客服功能，所以需要在多台设备上登陆。但微信是不支持的，只能手机上一个，电脑上一个，外出我总不能带上电脑。&lt;br&gt;&#xA;于是试用了之前的个人微信程序，虽然旧的微信号能够正常使用，但新的微信号已禁止网页登陆，此接口也就不能使用。&lt;br&gt;&#xA;暂时还没有好的办法，看起来是微信作妖，要发展客户端程序吧。晚点给客服打电话，看是否可以处理。&lt;/p&gt;</description>
    </item>
    <item>
      <title>动态域名服务 ddns</title>
      <link>/code/2022/060618-ddns/</link>
      <pubDate>Mon, 06 Jun 2022 10:58:22 +0000</pubDate>
      <guid>/code/2022/060618-ddns/</guid>
      <description>&lt;p&gt;我将一些服务安装到了手机里，手机可能在家里，可能在公司，可能在别处。但它的IP可能会存在变化，虽然我设置了DHCP的静态IP。&lt;br&gt;&#xA;如果有一种动态域名服务装到内网，即可以将访问网络的速度变快（内网解析），又可以自动发现内网存在的设备和服务。&lt;br&gt;&#xA;下面的代码是通过arp获取mac,虽说现在的手机很多都有mac变址&lt;/p&gt;</description>
    </item>
    <item>
      <title>民营医院分众小程序</title>
      <link>/it/2022/060111-hospital/</link>
      <pubDate>Wed, 01 Jun 2022 03:35:16 +0000</pubDate>
      <guid>/it/2022/060111-hospital/</guid>
      <description>&lt;p&gt;这是为民营医院打造的一个“多用户医院平台”，以较低的市场投入，达到宣传/管理医院的目的。&lt;br&gt;&#xA;可以考虑将预约功能置入供选。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../060111-hospital-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>微信小程序，服务器信息推送验证</title>
      <link>/code/2022/053100-wx/</link>
      <pubDate>Mon, 30 May 2022 16:17:37 +0000</pubDate>
      <guid>/code/2022/053100-wx/</guid>
      <description>&lt;p&gt;虽然之前也用过，但偶尔用，总忘，记下来。&lt;br&gt;&#xA;用于微信小程序设置推送信息服务器时，进行服务器验证。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;crypto/sha1&amp;#34;&#xA;&#x9;&amp;#34;encoding/hex&amp;#34;&#xA;&#x9;&amp;#34;log&amp;#34;&#xA;&#x9;&amp;#34;sort&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/gin-gonic/gin&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;r := gin.Default()&#xA;&#x9;r.GET(&amp;#34;/wx&amp;#34;, GetCheckWeixinSign)&#xA;&#x9;r.Run()&#xA;}&#xA;&#xA;func GetCheckWeixinSign(c *gin.Context) {&#xA;&#x9;token := &amp;#34;&amp;#34; //自己填的token&#xA;&#x9;signature := c.Query(&amp;#34;signature&amp;#34;)&#xA;&#x9;timestamp := c.Query(&amp;#34;timestamp&amp;#34;)&#xA;&#x9;nonce := c.Query(&amp;#34;nonce&amp;#34;)&#xA;&#x9;echostr := c.Query(&amp;#34;echostr&amp;#34;)&#xA;&#x9;//将token、timestamp、nonce三个参数进行字典序排序&#xA;&#x9;var tempArray = []string{token, timestamp, nonce}&#xA;&#x9;sort.Strings(tempArray)&#xA;&#x9;//将三个参数字符串拼接成一个字符串进行sha1加密&#xA;&#x9;var sha1String string = &amp;#34;&amp;#34;&#xA;&#x9;for _, v := range tempArray {&#xA;&#x9;&#x9;sha1String += v&#xA;&#x9;}&#xA;&#x9;h := sha1.New()&#xA;&#x9;h.Write([]byte(sha1String))&#xA;&#x9;sha1String = hex.EncodeToString(h.Sum([]byte(&amp;#34;&amp;#34;)))&#xA;&#x9;//获得加密后的字符串可与signature对比&#xA;&#x9;if sha1String == signature {&#xA;&#x9;&#x9;c.Writer.Write([]byte(echostr))&#xA;&#x9;} else {&#xA;&#x9;&#x9;log.Println(&amp;#34;微信API验证失败&amp;#34;)&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>高级布局之栈索引IndexedStack</title>
      <link>/code/2022/052615-stack/</link>
      <pubDate>Thu, 26 May 2022 07:10:11 +0000</pubDate>
      <guid>/code/2022/052615-stack/</guid>
      <description>&lt;p&gt;IndexedStack 继承自Stack，用于显示第index个child，而其他child则是不可见的。所以IndexedStack的尺寸永远是跟最大的子控件尺寸一致。与Stack相比，只是多了index的设置。&lt;/p&gt;</description>
    </item>
    <item>
      <title>flutter第三方组件</title>
      <link>/code/2022/052515-widget/</link>
      <pubDate>Wed, 25 May 2022 07:39:13 +0000</pubDate>
      <guid>/code/2022/052515-widget/</guid>
      <description>&lt;h3 id=&#34;flutter-login&#34;&gt;Flutter Login&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pub.dev/packages/flutter_login&#34;&gt;https://pub.dev/packages/flutter_login&lt;/a&gt;&lt;br&gt;&#xA;效果不错的登陆界面&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../052515-widget-01.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;看起来不错，然尔我却没有运行起来。&lt;/p&gt;&#xA;&lt;h3 id=&#34;animate-do&#34;&gt;Animate do&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pub.dev/packages/animate_do/&#34;&gt;https://pub.dev/packages/animate_do/&lt;/a&gt;&lt;br&gt;&#xA;动画库&lt;/p&gt;&#xA;&lt;h3 id=&#34;onboarding-overlay&#34;&gt;Onboarding overlay&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pub.dev/packages/onboarding_overlay&#34;&gt;https://pub.dev/packages/onboarding_overlay&lt;/a&gt;&lt;br&gt;&#xA;新手引导功能&lt;br&gt;&#xA;&lt;img src=&#34;../052515-widget-02.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;path_provider-文件读写&#34;&gt;path_provider 文件读写&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.jianshu.com/p/07aa3ee93c7c&#34;&gt;网文&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import &amp;#39;dart:io&amp;#39;;&#xA;&#xA;import &amp;#39;package:flutter/material.dart&amp;#39;;&#xA;import &amp;#39;package:path_provider/path_provider.dart&amp;#39;;&#xA;&#xA;void main() {&#xA;  runApp(MyApp());&#xA;}&#xA;&#xA;class MyApp extends StatelessWidget {&#xA;&#xA;  String name = &amp;#34;Jimi&amp;#34;;&#xA;&#xA;  /// 获取文档目录文件&#xA;  Future&amp;lt;File&amp;gt; _getLocalDocumentFile() async {&#xA;    final dir = await getApplicationDocumentsDirectory();&#xA;    return File(&amp;#39;${dir.path}/str.txt&amp;#39;);&#xA;  }&#xA;&#xA;  /// 获取临时目录文件&#xA;  Future&amp;lt;File&amp;gt; _getLocalTemporaryFile() async {&#xA;    final dir = await getTemporaryDirectory();&#xA;    return File(&amp;#39;${dir.path}/str.txt&amp;#39;);&#xA;  }&#xA;&#xA;  /// 获取应用程序目录文件&#xA;  Future&amp;lt;File&amp;gt; _getLocalSupportFile() async {&#xA;    final dir = await getApplicationSupportDirectory();&#xA;    return File(&amp;#39;${dir.path}/str.txt&amp;#39;);&#xA;  }&#xA;&#xA;  /// 读取值&#xA;  Future&amp;lt;void&amp;gt; readString() async {&#xA;    try {&#xA;&#xA;      final file = await _getLocalDocumentFile();&#xA;      final result  = await file.readAsString();&#xA;      print(&amp;#34;result-----$result&amp;#34;);&#xA;&#xA;      final file1 = await _getLocalTemporaryFile();&#xA;      final result1  = await file1.readAsString();&#xA;      print(&amp;#34;result1-----$result1&amp;#34;);&#xA;&#xA;      final file2 = await _getLocalSupportFile();&#xA;      final result2  = await file2.readAsString();&#xA;      print(&amp;#34;result2-----$result2&amp;#34;);&#xA;&#xA;&#xA;    } catch (e) {&#xA;      print(e);&#xA;    }&#xA;  }&#xA;&#xA;  /// 写入数据&#xA;  Future&amp;lt;void&amp;gt; writeString(String str) async {&#xA;    final file = await _getLocalDocumentFile();&#xA;    await file.writeAsString(name);&#xA;    print(file.path);&#xA;&#xA;    final file1 = await _getLocalTemporaryFile();&#xA;    await file1.writeAsString(name);&#xA;    print(file1.path);&#xA;&#xA;&#xA;    final file2 = await _getLocalSupportFile();&#xA;    await file2.writeAsString(name);&#xA;    print(file2.path);&#xA;&#xA;    print(&amp;#34;写入成功&amp;#34;);&#xA;  }&#xA;&#xA;  @override&#xA;  Widget build(BuildContext context) {&#xA;    return MaterialApp(&#xA;      title: &amp;#39;Flutter Demo&amp;#39;,&#xA;      theme: ThemeData(&#xA;        primarySwatch: Colors.blue,&#xA;      ),&#xA;      home: Scaffold(&#xA;        appBar: AppBar(title: Text(&amp;#34;path_provider&amp;#34;),),&#xA;        body: Center(&#xA;          child: Column(&#xA;            mainAxisAlignment: MainAxisAlignment.center,&#xA;            children: [&#xA;              Text(name,&#xA;                style: const TextStyle(&#xA;                    color: Colors.pink,&#xA;                    fontSize: 30&#xA;                ),&#xA;              ),&#xA;              const SizedBox(height: 20),&#xA;              ElevatedButton(&#xA;                onPressed: (){&#xA;                  writeString(name);&#xA;                },&#xA;                child: const Text(&amp;#34;存入本地目录&amp;#34;),&#xA;              ),&#xA;              ElevatedButton(&#xA;                onPressed: (){&#xA;                  readString();&#xA;                },&#xA;                child: Text(&amp;#34;读取值&amp;#34;),&#xA;              ),&#xA;            ],&#xA;          ),&#xA;        ),&#xA;      )&#xA;    );&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;bottomnavybar&#34;&gt;BottomNavyBar&lt;/h3&gt;&#xA;&lt;p&gt;精美动感的底部导航&lt;br&gt;&#xA;&lt;img src=&#34;../052515-widget-03.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flutter动画</title>
      <link>/code/2022/052515-flutter/</link>
      <pubDate>Wed, 25 May 2022 07:12:08 +0000</pubDate>
      <guid>/code/2022/052515-flutter/</guid>
      <description>&lt;p&gt;Flutter将动画系统进行封装，抽象出4个概念：Animation、Curve、AnimationController、Tween。&lt;/p&gt;&#xA;&lt;p&gt;Animation：Flutter动画中的核心类，此类是抽象类，通常情况下使用其子类：AnimationController，可以获取当前动画的状态和值，也可以添加其状态变化监听和值变化监听。&lt;br&gt;&#xA;Curve：决定动画执行的曲线，和Android中的Interpolator（差值器）是一样的，负责控制动画变化的速率，系统已经封装了10多种动画曲线，详见Curves类。&lt;br&gt;&#xA;AnimationController：动画控制器，控制动画的开始、停止。继承自Animation。&lt;br&gt;&#xA;Tween：映射生成不同范围的值，AnimationController的动画值是double类型的，如果需要颜色的变化，Tween可以完成此工作。&lt;/p&gt;</description>
    </item>
    <item>
      <title>博客&#43;个人微信收款新思路</title>
      <link>/it/2022/052410-pay/</link>
      <pubDate>Tue, 24 May 2022 02:33:20 +0000</pubDate>
      <guid>/it/2022/052410-pay/</guid>
      <description>&lt;p&gt;之前也做过一段时间的微信赞赏码收款。这让个人博客有了变现的思路，算是对个人独立思考的鼓励。也因此收到了一些网友的“赞款”。&lt;br&gt;&#xA;当时的方案需要单独的一人个手机，结合云服务器。手机需要不断轮询，其实效率并不高。&lt;/p&gt;</description>
    </item>
    <item>
      <title>客服系统新思路</title>
      <link>/it/2022/052409-service/</link>
      <pubDate>Tue, 24 May 2022 01:49:47 +0000</pubDate>
      <guid>/it/2022/052409-service/</guid>
      <description>&lt;p&gt;之前手机(安卓)安装了Termux，一直将博客放在手机上，其实只要做好设置，外网是可以直接看到手机上博客的。只要手机是在线状态没有断网。&lt;br&gt;&#xA;扯远了，说回客服系统。&lt;br&gt;&#xA;之前通过微信搭建过客服系统，实现了网站和微信客服沟通，转到私人微信号。目的是方便小网站使用，毕竟小网站没有24小时的客服，可以守在电脑旁。&lt;br&gt;&#xA;遵循以上的思路，结合Termux，其实可以直接将网站与手机打通，而无需微信参与。&lt;br&gt;&#xA;这里考虑的是利用Termux，结合go的命令行功能进行交互。虽然最近看了Flutter，也可以开发为APP，但毕竟有点重。个人更喜欢黑漆漆的DOS界面。当然，也可以说安装Termux有点麻烦。&lt;br&gt;&#xA;这样的好处有：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flutter 组件</title>
      <link>/code/2022/052223-flutter/</link>
      <pubDate>Sun, 22 May 2022 15:04:57 +0000</pubDate>
      <guid>/code/2022/052223-flutter/</guid>
      <description>&lt;h3 id=&#34;listview&#34;&gt;ListView&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;List listData = [&#xA;   {&#xA;          &amp;#34;title&amp;#34;: &amp;#39;Candy Shop&amp;#39;,&#xA;          &amp;#34;author&amp;#34;: &amp;#39;Mohamed Chahin&amp;#39;,&#xA;          &amp;#34;imageUrl&amp;#34;: &amp;#34;https://www.itying.com/images/flutter/1.png&amp;#34;,&#xA;   },&#xA;   {&#xA;         ...&#xA;   },&#xA;]&#xA;&#xA;&#xA;class HomeContent extends StatelessWidget {&#xA;  const HomeContent({Key? key}) : super(key: key);&#xA;&#xA;  List&amp;lt;Widget&amp;gt; _getData() {&#xA;    // List&amp;lt;Widget&amp;gt; list = [];&#xA;    // for (var i = 0; i &amp;lt; 20; i++) {&#xA;    //   list.add(ListTile(&#xA;    //     title: Text(&amp;#34;我是$i列表&amp;#34;),&#xA;    //   ));&#xA;    // }&#xA;    // return list;&#xA;&#xA;    var tempList = listData.map((value) {&#xA;      return ListTile(leading: Image.network(value[&amp;#34;imageUrl&amp;#34;]), title: Text(value[&amp;#34;title&amp;#34;]), subtitle: Text(value[&amp;#34;author&amp;#34;]));&#xA;    });&#xA;    return tempList.toList();&#xA;  }&#xA;&#xA;  @override&#xA;  Widget build(BuildContext context) {&#xA;    return ListView(&#xA;      //scrollDirection: Axis.horizontal,&#xA;      padding: const EdgeInsets.all(10),&#xA;      children: _getData(),&#xA;    );&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;方法2&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flutter 代码收集</title>
      <link>/code/2022/052212-flutter/</link>
      <pubDate>Sun, 22 May 2022 04:02:08 +0000</pubDate>
      <guid>/code/2022/052212-flutter/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;全屏&lt;br&gt;&#xA;SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []);&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;取消右上角DEBUG图片&lt;br&gt;&#xA;debugShowCheckedModeBanner: false&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;圆形图片&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Container(&#xA;     width: 230,&#xA;     height: 230,&#xA;     decoration: BoxDecoration(&#xA;           color: Colors.yellow,&#xA;           borderRadius: BorderRadius.circular(150),&#xA;           image: const DecorationImage(&#xA;           &#x9;&#x9;image: NetworkImage(&amp;#34;https://i.scwy.net/img/me.jpeg&amp;#34;)&#xA;           )&#xA;     )&#xA;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;圆形图片&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;child: ClipOval(&#xA;   child: Image.network(&amp;#34;https://i.scwy.net/img/me.jpeg&amp;#34;),&#xA;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;5&#34;&gt;&#xA;&lt;li&gt;打开视觉调试开关&lt;br&gt;&#xA;debugPaintSizeEnabled = true;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Flame Flutter中的2D游戏引擎</title>
      <link>/code/2022/052000-flame/</link>
      <pubDate>Thu, 19 May 2022 16:09:52 +0000</pubDate>
      <guid>/code/2022/052000-flame/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://flame-engine.org/assets/assets/cornerlogo.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://flame-engine.org/&#34;&gt;flame&lt;/a&gt;  &lt;a href=&#34;https://github.com/flame-engine/flame&#34;&gt;Github&lt;/a&gt;&#xA;&lt;a href=&#34;https://flame-engine.org/&#34;&gt;Flame&lt;/a&gt; 是一个开源的基于 Flutter 的游戏引擎，Flame 引擎的目的是为使用 Flutter 开发的游戏会遇到的常见问题提供一套完整的解决方案&lt;/p&gt;&#xA;&lt;p&gt;看示例最简单,当然得先引入框架flame&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flutter使用Lottie动画</title>
      <link>/code/2022/051923-lottie/</link>
      <pubDate>Thu, 19 May 2022 15:04:39 +0000</pubDate>
      <guid>/code/2022/051923-lottie/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://lottiefiles.com/&#34;&gt;Lottie&lt;/a&gt; 是 Airbnb 出的一套跨平台的动画完整解决方案，它能够帮助程序员直接加载 JSON 格式的文件在 iOS、Android 和 React Native之上，实现 100% 与设计稿相同的动画效果，而无需关心中间的实现细节。设计师只需要使用 After Effectes 设计出动画之后，通过使用 Lottic 提供的 Bodymovin 将设计好的动画导出成 JSON 格式的文件交付给开发即可完成。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang反射 Reflect</title>
      <link>/code/2022/051820-reflect/</link>
      <pubDate>Wed, 18 May 2022 12:34:50 +0000</pubDate>
      <guid>/code/2022/051820-reflect/</guid>
      <description>&lt;p&gt;Golang中的反射，应该属于必知必会的内容。&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是反射&#34;&gt;什么是反射&lt;/h2&gt;&#xA;&lt;p&gt;Go 语言提供了一种机制在运行时更新变量和检查它们的值、调用它们的方法，但是在编译时并不知道这些变量的具体类型，这称为反射机制。&lt;/p&gt;</description>
    </item>
    <item>
      <title>QOR再学习 -- 啃源代码,思考GORM升级</title>
      <link>/code/2022/051715-qor/</link>
      <pubDate>Tue, 17 May 2022 07:36:47 +0000</pubDate>
      <guid>/code/2022/051715-qor/</guid>
      <description>&lt;p&gt;通过上次的&lt;a href=&#34;https://i.scwy.net/code/2021/0818-qor/&#34;&gt;QOR实作&lt;/a&gt;，感觉QOR对后台的搭建还是非常快的。常用的过滤、增删改查都比较方便。&lt;br&gt;&#xA;但是它使用了GORM的1.0版本，而它的2.0版更新较大。简单的修改已不能将QOR升级到GORM2了。&lt;br&gt;&#xA;另一方面，也需要对QOR的整体作更详细的了解，便于更多QOR库的使，扩充它的功能。&lt;br&gt;&#xA;今天对基础库作了一个简单了解。所有的扩充功能都在它的基础之上进行，例如最常用的&lt;a href=&#34;github.com/qor/admin&#34;&gt;admin 后台管理&lt;/a&gt;。&lt;br&gt;&#xA;“啃”代码是痛苦的，一步步来。&lt;/p&gt;</description>
    </item>
    <item>
      <title>凉品铺子</title>
      <link>/other/2022/051515-eat/</link>
      <pubDate>Sun, 15 May 2022 07:22:17 +0000</pubDate>
      <guid>/other/2022/051515-eat/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../051515-eat-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;一缘起&#34;&gt;一、缘起&lt;/h2&gt;&#xA;&lt;p&gt;凉糕是中国特色传统小吃，其味美香甜沙软，食之清爽可口，还有解毒排脓、利水消肿、清热去湿、健脾止泻的功效。主要原料为大米、井水、红糖。&lt;br&gt;&#xA;凉糕在四川、重庆、贵州、海南、浙江嘉兴等地都分布，由于其采用米浆熬制而成再配上红糖水，越来越多的女性将其作为美容养颜、生津止渴的夏日美食佳品。&lt;/p&gt;</description>
    </item>
    <item>
      <title>共享图书 -- 我是馆长</title>
      <link>/other/2022/051417-library/</link>
      <pubDate>Sat, 14 May 2022 09:49:32 +0000</pubDate>
      <guid>/other/2022/051417-library/</guid>
      <description>&lt;p&gt;题外：之前就有构思过&lt;a href=&#34;https://i.scwy.net/teach/2021/091717-book/&#34;&gt;公益的儿童书店项目&lt;/a&gt;，也与部份家长作为沟通，但还是不够成熟。这次继续升级，继续思考。&lt;/p&gt;&#xA;&lt;h2 id=&#34;一缘起&#34;&gt;一、缘起&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../051417-library-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;书是人类进步的阶梯，是人类永恒的财富。&lt;/p&gt;&#xA;&lt;p&gt;2022年4月23日 该调查结果显示，2021年中国成年国民人均纸质图书阅读量为4.76本，高于2020年的4.70本。人均电子书阅读量为3.30本，高于2020年的3.29本。&lt;/p&gt;</description>
    </item>
    <item>
      <title>母亲的强势导致父亲的缺位</title>
      <link>/teach/2022/051008-teach/</link>
      <pubDate>Tue, 10 May 2022 00:00:33 +0000</pubDate>
      <guid>/teach/2022/051008-teach/</guid>
      <description>&lt;p&gt;如题，都说在中国家庭教育中父亲缺位，孩子太“娘”，我觉得其中存在母亲地位过高产生的影响。&lt;/p&gt;&#xA;&lt;p&gt;除了教育环境的影响以外，家庭对孩子的影响是最大的。&lt;/p&gt;&#xA;&lt;p&gt;而在当今社会，自妇女翻身解放以来，已经不只半边天了。特别是部份地区，女性在社会和家庭中的地位更重。&lt;/p&gt;</description>
    </item>
    <item>
      <title>lancet: golang函数库</title>
      <link>/code/2022/051007-lancet/</link>
      <pubDate>Mon, 09 May 2022 23:24:48 +0000</pubDate>
      <guid>/code/2022/051007-lancet/</guid>
      <description>&lt;p&gt;一般我都使用自己的tools库，lancet制作了300+的常用工具函数。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/duke-git/lancet&#34;&gt;https://github.com/duke-git/lancet&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;这是中文文档：https://github.com/duke-git/lancet/blob/main/README_zh-CN.md&lt;/p&gt;</description>
    </item>
    <item>
      <title>Swagger 自动生成接口文档</title>
      <link>/code/2022/042719-swagger/</link>
      <pubDate>Wed, 27 Apr 2022 11:09:32 +0000</pubDate>
      <guid>/code/2022/042719-swagger/</guid>
      <description>&lt;p&gt;除了它可以自动生成接口文档以外，也可以规范代码。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/swaggo/swag&#34;&gt;Github: https://github.com/swaggo/swag&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/swaggo/swag/blob/master/README_zh-CN.md&#34;&gt;中文帮助&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;安装自动生成工具swag： go install github.com/swaggo/swag/cmd/swag@latest&lt;/p&gt;&#xA;&lt;p&gt;自动生成文档： swag init&lt;/p&gt;&#xA;&lt;p&gt;我是使用的gin居多，可以先看看示例 celler。先 swag init 生成，然后go run . ，打开 http://localhost:8080/swagger/index.htm&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flutter&#43;Dart学习 -- 入门02 -- 布局</title>
      <link>/code/2022/042419-flutter/</link>
      <pubDate>Sun, 24 Apr 2022 11:40:15 +0000</pubDate>
      <guid>/code/2022/042419-flutter/</guid>
      <description>&lt;h2 id=&#34;一线性布局row-column&#34;&gt;一、线性布局：Row Column&lt;/h2&gt;&#xA;&lt;p&gt;Row 在水平方向上排列部件&lt;br&gt;&#xA;Column 在垂直方向上排列部件&lt;br&gt;&#xA;&lt;img src=&#34;../042419-flutter-01.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;../042419-flutter-02.png&#34; alt=&#34;&#34;&gt;&#xA;&lt;img src=&#34;../042419-flutter-06.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;二弹性布局flex&#34;&gt;二、弹性布局：Flex&lt;/h2&gt;&#xA;&lt;p&gt;沿着水平或垂直方向排列部件，与Expanded配合使用。&lt;/p&gt;&#xA;&lt;h2 id=&#34;三流式布局warp-flow&#34;&gt;三、流式布局：Warp Flow&lt;/h2&gt;&#xA;&lt;p&gt;在水平或垂直方向显示多行，可以自动换行&lt;br&gt;&#xA;Flow可以自定义实现流式布局算法的部件&lt;br&gt;&#xA;&lt;img src=&#34;../042419-flutter-07.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang之Time</title>
      <link>/code/2022/042320-time/</link>
      <pubDate>Sat, 23 Apr 2022 12:45:12 +0000</pubDate>
      <guid>/code/2022/042320-time/</guid>
      <description>&lt;h3 id=&#34;获取当前时间戳&#34;&gt;获取当前时间戳&lt;/h3&gt;&#xA;&lt;p&gt;seconds := time.Now().Unix()&lt;/p&gt;&#xA;&lt;h3 id=&#34;获取当前年月日时分和星期几&#34;&gt;获取当前年月日时分和星期几&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;//获取当前时间的Time结构体实例&#xA;t := time.Now()&#xA;​&#xA;//通过Date函数同时获取年月日&#xA;year, month, day := t.Date()&#xA;//假设日期为2021-1-7 打印结果为 year:2021, month:1, day:7&#xA;fmt.Printf(&amp;#34;year:%d, month:%d, day:%d\n&amp;#34;, year, month, day)&#xA;​&#xA;//通过Clock函数同时获取时分秒&#xA;hour, minute, second := t.Clock()&#xA;//假设时间是18:51:9 打印结果 hour:18,minute:51,second:9&#xA;fmt.Printf(&amp;#34;hour:%d,minute:%d,second:%d\n&amp;#34;, hour, minute, second)&#xA;​&#xA;//也可以单独获取年、月、日、时、分、秒、星期几&#xA;year := t.Year() //获取所属年份&#xA;month := t.Month() //获取所属月份，不带前导零&#xA;day := t.Day() //获取所属日，不带前导零&#xA;hour := t.Hour() //获取当前小时&#xA;minutes := t.Minute() //获取当前分钟&#xA;seconds := t.Seconds() //获取当前描述&#xA;nanosecond := t.Nanosecond() //获取当前纳秒数&#xA;weekday := t.Weekday()  //获取是星期几， t.Weekday返回的是Weekday类型&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;返回当前时间是一年中的第几天&#34;&gt;返回当前时间是一年中的第几天&lt;/h3&gt;&#xA;&lt;p&gt;yearday := time.Now().YearDay()&lt;/p&gt;</description>
    </item>
    <item>
      <title>用Golang自己构造ICMP数据包</title>
      <link>/code/2022/042316-icmp/</link>
      <pubDate>Sat, 23 Apr 2022 08:34:47 +0000</pubDate>
      <guid>/code/2022/042316-icmp/</guid>
      <description>&lt;p&gt;虽然内容有点旧了，但方法不旧。&lt;br&gt;&#xA;ICMP是用来对网络状况进行反馈的协议，可以用来侦测网络状态或检测网路错误。&lt;/p&gt;&#xA;&lt;p&gt;RFC792定义的echo数据包结构：&lt;br&gt;&#xA;0                   1                   2                   3&#xA;0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1&#xA;+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&#xA;|     Type      |     Code      |          Checksum             |&#xA;+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&#xA;|           Identifier          |        Sequence Number        |&#xA;+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+&#xA;|     Data &amp;hellip;&#xA;+-+-+-+-+-&lt;/p&gt;</description>
    </item>
    <item>
      <title>Zerotier应用</title>
      <link>/code/2022/042222-zerotier/</link>
      <pubDate>Fri, 22 Apr 2022 14:01:09 +0000</pubDate>
      <guid>/code/2022/042222-zerotier/</guid>
      <description>&lt;p&gt;一直在用&lt;a href=&#34;https://www.zerotier.com/&#34;&gt;ZeroTier&lt;/a&gt;,搭载于互联网的内网服务软件。&lt;br&gt;&#xA;它需要首先在官网登陆，建立自己的内网及设置。&lt;br&gt;&#xA;我想用它来建立一个去中心的自由网络：&lt;br&gt;&#xA;比如有几个朋友，各自有一套自己的内网，并在内网中建立了各类服务。当他愿意开放出来供自己这一批朋友玩耍时，它就可以开放内网给大家。&lt;br&gt;&#xA;这时就需要ZeroTier客户端能自动加入这个开放的内网。当然也可以随时收回。看起来就象朋友给我们开了门，请我们去他家逛逛。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang 中的反向代理</title>
      <link>/code/2022/042212-proxy/</link>
      <pubDate>Fri, 22 Apr 2022 04:29:32 +0000</pubDate>
      <guid>/code/2022/042212-proxy/</guid>
      <description>&lt;p&gt;反相代理可用于解决多个服务器，或者隐藏服务器。&lt;br&gt;&#xA;例如之前考虑的&lt;a href=&#34;https://i.scwy.net/it/2021/110421-server/&#34;&gt;穷人版分布式&lt;/a&gt;：我在全国部署了多台迷你服务器，通过中心服务器(反向代理)的中转，确定需要提供的服务器，让真正服务器与客户端连接。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;bytes&amp;#34;&#xA;    &amp;#34;encoding/json&amp;#34;&#xA;    &amp;#34;io/ioutil&amp;#34;&#xA;    &amp;#34;log&amp;#34;&#xA;    &amp;#34;net/http&amp;#34;&#xA;    &amp;#34;net/http/httputil&amp;#34;&#xA;    &amp;#34;net/url&amp;#34;&#xA;    &amp;#34;strings&amp;#34;&#xA;)&#xA;&#xA;const PORT = &amp;#34;1330&amp;#34;&#xA;const A_CONDITION_URL = &amp;#34;http://localhost:1331&amp;#34;&#xA;const B_CONDITION_URL = &amp;#34;http://localhost:1332&amp;#34;&#xA;const DEFAULT_CONDITION_URL = &amp;#34;http://localhost:1333&amp;#34;&#xA;&#xA;type requestPayloadStruct struct {&#xA;    ProxyCondition string `json:&amp;#34;proxy_condition&amp;#34;`&#xA;}&#xA;&#xA;// Get the port to listen on&#xA;func getListenAddress() string {&#xA;    return &amp;#34;:&amp;#34; + PORT&#xA;}&#xA;&#xA;// Log the env variables required for a reverse proxy&#xA;func logSetup() {&#xA;    a_condtion_url := A_CONDITION_URL&#xA;    b_condtion_url := B_CONDITION_URL&#xA;    default_condtion_url := DEFAULT_CONDITION_URL&#xA;&#xA;    log.Printf(&amp;#34;Server will run on: %s\n&amp;#34;, getListenAddress())&#xA;    log.Printf(&amp;#34;Redirecting to A url: %s\n&amp;#34;, a_condtion_url)&#xA;    log.Printf(&amp;#34;Redirecting to B url: %s\n&amp;#34;, b_condtion_url)&#xA;    log.Printf(&amp;#34;Redirecting to Default url: %s\n&amp;#34;, default_condtion_url)&#xA;}&#xA;&#xA;// Get a json decoder for a given requests body&#xA;func requestBodyDecoder(request *http.Request) *json.Decoder {&#xA;    // Read body to buffer&#xA;    body, err := ioutil.ReadAll(request.Body)&#xA;    if err != nil {&#xA;        log.Printf(&amp;#34;Error reading body: %v&amp;#34;, err)&#xA;        panic(err)&#xA;    }&#xA;&#xA;    // Because go lang is a pain in the ass if you read the body then any susequent calls&#xA;    // are unable to read the body again....&#xA;    request.Body = ioutil.NopCloser(bytes.NewBuffer(body))&#xA;&#xA;    return json.NewDecoder(ioutil.NopCloser(bytes.NewBuffer(body)))&#xA;}&#xA;&#xA;// Parse the requests body&#xA;func parseRequestBody(request *http.Request) requestPayloadStruct {&#xA;    decoder := requestBodyDecoder(request)&#xA;&#xA;    var requestPayload requestPayloadStruct&#xA;    err := decoder.Decode(&amp;amp;requestPayload)&#xA;&#xA;    if err != nil {&#xA;        panic(err)&#xA;    }&#xA;&#xA;    return requestPayload&#xA;}&#xA;&#xA;// Log the typeform payload and redirect url&#xA;func logRequestPayload(requestionPayload requestPayloadStruct, proxyUrl string) {&#xA;    log.Printf(&amp;#34;proxy_condition: %s, proxy_url: %s\n&amp;#34;, requestionPayload.ProxyCondition, proxyUrl)&#xA;}&#xA;&#xA;// Get the url for a given proxy condition&#xA;func getProxyUrl(proxyConditionRaw string) string {&#xA;    proxyCondition := strings.ToUpper(proxyConditionRaw)&#xA;&#xA;    a_condtion_url := A_CONDITION_URL&#xA;    b_condtion_url := B_CONDITION_URL&#xA;    default_condtion_url := DEFAULT_CONDITION_URL&#xA;&#xA;    if proxyCondition == &amp;#34;A&amp;#34; {&#xA;        return a_condtion_url&#xA;    }&#xA;&#xA;    if proxyCondition == &amp;#34;B&amp;#34; {&#xA;        return b_condtion_url&#xA;    }&#xA;&#xA;    return default_condtion_url&#xA;}&#xA;&#xA;// Serve a reverse proxy for a given url&#xA;func serveReverseProxy(target string, res http.ResponseWriter, req *http.Request) {&#xA;    // parse the url&#xA;    url, _ := url.Parse(target)&#xA;&#xA;    // create the reverse proxy&#xA;    proxy := httputil.NewSingleHostReverseProxy(url)&#xA;&#xA;    // Update the headers to allow for SSL redirection&#xA;    //req.URL.Host = url.Host&#xA;    //req.URL.Scheme = url.Scheme&#xA;    //req.Header.Set(&amp;#34;X-Forwarded-Host&amp;#34;, req.Header.Get(&amp;#34;Host&amp;#34;))&#xA;    //req.Host = url.Host&#xA;&#xA;    // Note that ServeHttp is non blocking and uses a go routine under the hood&#xA;    proxy.ServeHTTP(res, req)&#xA;}&#xA;&#xA;// Given a request send it to the appropriate url&#xA;func handleRequestAndRedirect(res http.ResponseWriter, req *http.Request) {&#xA;    requestPayload := parseRequestBody(req)&#xA;    url := getProxyUrl(requestPayload.ProxyCondition)&#xA;&#xA;    logRequestPayload(requestPayload, url)&#xA;&#xA;    serveReverseProxy(url, res, req)&#xA;}&#xA;&#xA;func main() {&#xA;    // Log setup values&#xA;    logSetup()&#xA;&#xA;    // start server&#xA;    http.HandleFunc(&amp;#34;/&amp;#34;, handleRequestAndRedirect)&#xA;    if err := http.ListenAndServe(getListenAddress(), nil); err != nil {&#xA;        panic(err)&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>golang 正向代理服务器(支持tcp)</title>
      <link>/code/2022/042212-tcp/</link>
      <pubDate>Fri, 22 Apr 2022 04:24:57 +0000</pubDate>
      <guid>/code/2022/042212-tcp/</guid>
      <description>&lt;p&gt;所谓代理服务器就是位于发起请求的客户端与原始服务器端之间的一台跳板服务器，正向代理可以隐藏客户端，反向代理可以隐藏原始服务器。&lt;br&gt;&#xA;向代理对用户则是不可知的，比如我们访问百度网站，百度的代理服务器对外的域名为 &lt;a href=&#34;https://www.baidu.com&#34;&gt;https://www.baidu.com&lt;/a&gt; 。具体内部的服务器节点我们不知道，现实中我们通过访问百度的代理服务器后，代理服务器给我们转发请求到他们N多的服务器节点中的一个给我们进行搜索后将结果返回。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang实现HTTP(s)代理服务</title>
      <link>/code/2022/042209-proxy/</link>
      <pubDate>Fri, 22 Apr 2022 01:31:49 +0000</pubDate>
      <guid>/code/2022/042209-proxy/</guid>
      <description>&lt;p&gt;原文地址：https://www.perfcode.com/p/how-to-create-a-http-proxy-service.html&lt;/p&gt;</description>
    </item>
    <item>
      <title>思考：去中心化私有网络</title>
      <link>/it/2022/042208-think/</link>
      <pubDate>Fri, 22 Apr 2022 00:08:44 +0000</pubDate>
      <guid>/it/2022/042208-think/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../042208-think-01.png&#34; alt=&#34;&#34;&gt;&#xA;去中心化有别于现在的中主化服务，一定程度上保障数据安全，私密性。&lt;br&gt;&#xA;我想，去中心化并不是完全抛开中心，而是多中心，非依赖唯一中心，且多个中心可自由切换，相互验证。当某中心出现故障，另外的中心自动接管，有点象容灾。&lt;br&gt;&#xA;这里的中心，可以是引导器（将访问指向真正的服务），也可以是服务器本身。用户可以选择目标服务器，所有服务器内容保持一致性。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang资源、库及社区（持续更新）</title>
      <link>/code/2022/042121-gores/</link>
      <pubDate>Thu, 21 Apr 2022 13:37:19 +0000</pubDate>
      <guid>/code/2022/042121-gores/</guid>
      <description>&lt;h2 id=&#34;资源&#34;&gt;资源&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://gomirrors.org/&#34;&gt;下载镜像&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://ld246.com/article/1497146010890&#34;&gt;Go示例&lt;/a&gt;&#xA;&lt;a href=&#34;https://github.com/inancgumus/learngo&#34;&gt;Go示例&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;http://c.biancheng.net/golang/&#34;&gt;Go语言入门教程&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;webassembly&#34;&gt;WebAssembly&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/golang/go/wiki/WebAssembly&#34;&gt;WebAssembly&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;社区&#34;&gt;社区&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://studygolang.com/&#34;&gt;Golang中文社区&lt;/a&gt;&#xA;&lt;a href=&#34;https://gocn.vip/&#34;&gt;Go中国技术社区 &lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;书籍&#34;&gt;书籍&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://books.studygolang.com/The-Golang-Standard-Library-by-Example/&#34;&gt;Go语言标准库&lt;/a&gt;&#xA;&lt;a href=&#34;https://docs.hacknode.org/gopl-zh/&#34;&gt;Go语言圣经（中文版）&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://chai2010.gitbooks.io/advanced-go-programming-book/content/&#34;&gt;Go语言高级编程&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/preface.md&#34;&gt;build web application with golang&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://geektutu.com/post/high-performance-go.html&#34;&gt;Go 语言高性能编程&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/ffhelicopter/Go42&#34;&gt;Go语言四十二章经&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;其它&#34;&gt;其它&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://golangnote.com/&#34;&gt;Golang笔记&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://go.dev/dl/&#34;&gt;安装下载&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/geektutu/7days-golang&#34;&gt;7天从0到实现&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://www.zhihu.com/column/hellogithub&#34;&gt;HelloGitHub&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://golang.hotexamples.com/zh/&#34;&gt;代码搜索&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;库&#34;&gt;库&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://studygolang.com/pkgdoc&#34;&gt;Golang标准库文档&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://yaotian.github.io/gowechat/&#34;&gt;微信平台库&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://darjun.github.io/&#34;&gt;大俊的博客&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/maxence-charriere/go-app&#34;&gt;使用Go编程语言和WebAssembly构建渐进式web应用程序&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://libs.garden&#34;&gt;搜索库&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/anthonynsimon/bild&#34;&gt;bild图像处理&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/qax-os/excelize&#34;&gt;excelize 读写 Excel&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://www.open-open.com/lib/view/open1442132093137.html&#34;&gt;库集合&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;web&#34;&gt;Web&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/gin-gonic/gin&#34;&gt;Gin&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/astaxie/beego&#34;&gt;BeeGo&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Flutter&#43;Dart学习 -- 入门01</title>
      <link>/code/2022/041722-flutter/</link>
      <pubDate>Sun, 17 Apr 2022 14:31:45 +0000</pubDate>
      <guid>/code/2022/041722-flutter/</guid>
      <description>&lt;p&gt;之前一直不是太想学手机端的开发，一直希望有一款实用的linux手机，但即贵且不实用，还没有保障。根本达不到商用。&lt;/p&gt;&#xA;&lt;p&gt;个人对手机端开发是有需求的。通过手机端，可以实现很多想法。前端手机，后端Golang，世界就更大了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>设想：脚用鼠标</title>
      <link>/it/2022/041709-think/</link>
      <pubDate>Sun, 17 Apr 2022 01:42:35 +0000</pubDate>
      <guid>/it/2022/041709-think/</guid>
      <description>&lt;p&gt;我有一个想法：&#xA;现在的办公室人群，久坐不动，长期面对电脑。特别是我们这种IT类的。&lt;br&gt;&#xA;是不是设计一种脚用鼠标，让脚也能动起来。&lt;/p&gt;&#xA;&lt;p&gt;实现：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Arduino芯片&lt;/li&gt;&#xA;&lt;li&gt;三轴传感器&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;或者就先用鼠标进行改造，关键在于适应性。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ebiten，用golang做一个桌面宠物</title>
      <link>/code/2022/041513-ebiten/</link>
      <pubDate>Fri, 15 Apr 2022 05:06:33 +0000</pubDate>
      <guid>/code/2022/041513-ebiten/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../041513-ebiten-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;ebiten 是golang的跨平台2D游戏引擎。以下是它自带的示例，运行程序后，会在屏幕上显示一个来回走动的golang宠物。&lt;br&gt;&#xA;代码中有一点特殊的是，它居然用了两个init，不过看起来它只是顺序运行了而已，并没有什么问题。&lt;br&gt;&#xA;不一定真的用它做游戏，可以把它的原理作为软件的启动界面是比较酷的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>思考: 没有网络的电脑如何通过手机下载</title>
      <link>/it/2022/041421-net/</link>
      <pubDate>Thu, 14 Apr 2022 13:18:08 +0000</pubDate>
      <guid>/it/2022/041421-net/</guid>
      <description>&lt;p&gt;场景：&lt;br&gt;&#xA;某公司，普通用户不能上网，也没有外网。禁止了USB设备。&lt;br&gt;&#xA;如何才能通过手机下载外网软件呢？&lt;/p&gt;&#xA;&lt;p&gt;思考：&lt;br&gt;&#xA;ESP32做一个模拟键盘的设备，由它来“手动”生成软件？&lt;br&gt;&#xA;atmega32u4仿佛也有&lt;a href=&#34;https://www.cnblogs.com/hjf-log/p/atmega32u4.html&#34;&gt;虚拟键盘的程序&lt;/a&gt;&lt;br&gt;&#xA;不知道禁用USB设备，会不会也禁止这种虚拟键盘。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用Croc跨平台、跨内外网实现文件上传服务器</title>
      <link>/code/2022/041221-croc/</link>
      <pubDate>Tue, 12 Apr 2022 13:19:39 +0000</pubDate>
      <guid>/code/2022/041221-croc/</guid>
      <description>&lt;p&gt;croc是golang开发的跨平台文件传送工具。不仅如此，还实现了跨内外网的文件/文本传输。&lt;br&gt;&#xA;&lt;a href=&#34;https://i.scwy.net/tags/croc/&#34;&gt;之前的文章&lt;/a&gt;就提到可以将此实现：跨平台的文件上传服务器。这里的服务器还可以是内网服务器。&lt;/p&gt;&#xA;&lt;p&gt;服务器脚本server.sh&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash&#xA;while true; do&#xA;      croc_pass=$(cat ./croc_pass.txt)&#xA;      #echo $croc_pass&#xA;      croc --overwrite --yes $croc_pass&#xA;      sleep 5s&#xA;done&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这里是将croc_pass.txt中的内容作为croc的传输密码。若客户端上传修改内容的croc_pass.txt文件，即实现了由客户端来动态修改。&lt;/p&gt;</description>
    </item>
    <item>
      <title>择机搞一套在线考试系统</title>
      <link>/it/2022/041009-test/</link>
      <pubDate>Sun, 10 Apr 2022 01:40:44 +0000</pubDate>
      <guid>/it/2022/041009-test/</guid>
      <description>&lt;p&gt;如题，看时间情况。先收集一些相关信息。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../041009-test-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/471123586&#34;&gt;7个免费在线考试系统推荐&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/349416160&#34;&gt;国内外常用的几款在线考试系统介绍&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang做个短地址服务 https://k.scwy.net</title>
      <link>/code/2022/040909-short/</link>
      <pubDate>Sat, 09 Apr 2022 01:29:00 +0000</pubDate>
      <guid>/code/2022/040909-short/</guid>
      <description>&lt;p&gt;已完成&lt;a href=&#34;https://k.scwy.net&#34;&gt;腾图短地址生成 https://k.scwy.net&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../040909-short-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;使用通用的做法，使用 0-9 A-Z a-z 一共62个字符，我们看使用hash键位数分别有多少种排列组合情况。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;1位：pow(62,1) = 62 种&#xA;2位：pow(62,2) = 3844 种&#xA;3位：pow(62,3) = 238328 种&#xA;4位：pow(62,4) = 14776336 种&#xA;5位：pow(62,5) = 916132832 种&#xA;6位：pow(62,6) = 56800235584 种&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;看起来我用3位就够了。 :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>修改golang的Log(日志)格式</title>
      <link>/code/2022/040610-log/</link>
      <pubDate>Wed, 06 Apr 2022 02:54:22 +0000</pubDate>
      <guid>/code/2022/040610-log/</guid>
      <description>&lt;p&gt;作为中国人，始终不太习惯golang中自带的日志输出时间格式。这里将log库作一点修改来适合自己。&lt;br&gt;&#xA;其中color.New是CLI的颜色输出库 &amp;ldquo;github.com/gookit/color&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>powershell设置环境变量</title>
      <link>/it/2022/040511-env/</link>
      <pubDate>Tue, 05 Apr 2022 03:53:25 +0000</pubDate>
      <guid>/it/2022/040511-env/</guid>
      <description>&lt;p&gt;cmd中是使用set设置环境变量，而powershell中不同。&lt;br&gt;&#xA;$Env:VER=VAL&lt;/p&gt;&#xA;&lt;p&gt;比如环境变量的PATH下添加一条内容：&lt;br&gt;&#xA;$Env:path=$Env:Path+&amp;quot;;c:\go\bin&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;移除变量&#xA;remove-item env:VER&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wails 最简模块</title>
      <link>/code/2022/032814-wails/</link>
      <pubDate>Mon, 28 Mar 2022 06:25:08 +0000</pubDate>
      <guid>/code/2022/032814-wails/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://wails.top/zh-Hans/img/wails-logo-horizontal.svg&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;默认模板由main.go(配置和运行)和app.go(应用逻辑)两个文件构成&lt;/p&gt;&#xA;&lt;p&gt;app.go&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;type App struct {&#xA;    ctx context.Context&#xA;}&#xA;&#xA;func NewApp() *App {&#xA;    return &amp;amp;App{}&#xA;}&#xA;&#xA;func (a *App) startup(ctx context.Context) {&#xA;    a.ctx = ctx&#xA;}&#xA;&#xA;func (a *App) shutdown(ctx context.Context) {&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;main.go&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wails, golang的gui</title>
      <link>/code/2022/032810-wails/</link>
      <pubDate>Mon, 28 Mar 2022 02:48:27 +0000</pubDate>
      <guid>/code/2022/032810-wails/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://wails.top/zh-Hans/docs/introduction/&#34;&gt;官方V2中文文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;网上示例较少，好在有中文文档可以啃&lt;/p&gt;&#xA;&lt;p&gt;这个示例主要是添加了菜单，弹出消息框，文件打开对话框等&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;context&amp;#34;&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;os&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/wailsapp/wails/v2/pkg/menu&amp;#34;&#xA;&#x9;&amp;#34;github.com/wailsapp/wails/v2/pkg/menu/keys&amp;#34;&#xA;&#x9;&amp;#34;github.com/wailsapp/wails/v2/pkg/runtime&amp;#34;&#xA;)&#xA;&#xA;type App struct {&#xA;&#x9;ctx context.Context&#xA;&#x9;ti  *TrayIcon&#xA;}&#xA;&#xA;// NewApp 创建一个新的 App 应用程序&#xA;func NewApp() *App {&#xA;&#x9;return &amp;amp;App{}&#xA;}&#xA;&#xA;func (b *App) GetCtx() context.Context {&#xA;&#x9;return b.ctx&#xA;}&#xA;&#xA;// startup 在应用程序启动时调用&#xA;func (b *App) startup(ctx context.Context) {&#xA;&#x9;// 在这里执行初始化设置&#xA;&#x9;b.ctx = ctx&#xA;&#x9;b.ti = NewTrayIcon()&#xA;&#x9;b.ti.BalloonClickFunc = b.showWindow&#xA;&#x9;b.ti.TrayClickFunc = b.showWindow&#xA;&#x9;go b.ti.RunTray()&#xA;&#xA;&#x9;// 菜单------------------------------------------------------&#xA;&#xA;&#x9;Update := menu.Text(&amp;#34;检查更新&amp;#34;, nil, HelpUpdate)&#xA;&#x9;Update.Disabled = true&#xA;&#x9;Fullscreen := menu.Checkbox(&amp;#34;全屏显示&amp;#34;, true, nil, HelpFullScreen)&#xA;&#x9;myMenu := menu.NewMenuFromItems(&#xA;&#x9;&#x9;menu.SubMenu(&amp;#34;文件(&amp;amp;F)&amp;#34;, menu.NewMenuFromItems(&#xA;&#x9;&#x9;&#x9;menu.Text(&amp;#34;打开文件(&amp;amp;O)&amp;#34;, keys.CmdOrCtrl(&amp;#34;o&amp;#34;), OpenFile),&#xA;&#x9;&#x9;&#x9;menu.Separator(),&#xA;&#x9;&#x9;&#x9;menu.Text(&amp;#34;退出&amp;#34;, keys.CmdOrCtrl(&amp;#34;q&amp;#34;), func(_ *menu.CallbackData) {&#xA;&#x9;&#x9;&#x9;&#x9;runtime.Quit(ctx)&#xA;&#x9;&#x9;&#x9;}),&#xA;&#x9;&#x9;)),&#xA;&#x9;&#x9;menu.SubMenu(&amp;#34;帮助(&amp;amp;H)&amp;#34;, menu.NewMenuFromItems(&#xA;&#x9;&#x9;&#x9;menu.Text(&amp;#34;如何使用&amp;#34;, nil, HelpUse),&#xA;&#x9;&#x9;&#x9;Update,&#xA;&#x9;&#x9;&#x9;Fullscreen,&#xA;&#x9;&#x9;&#x9;menu.Text(&amp;#34;关于我们&amp;#34;, nil, HelpAbout),&#xA;&#x9;&#x9;)),&#xA;&#x9;)&#xA;&#xA;&#x9;runtime.MenuSetApplicationMenu(ctx, myMenu)&#xA;&#xA;}&#xA;&#xA;func HelpFullScreen(c *menu.CallbackData) {&#xA;&#x9;fmt.Println(&amp;#34;----&amp;#34;, c.MenuItem.Checked)&#xA;}&#xA;&#xA;func HelpUpdate(c *menu.CallbackData) {&#xA;&#x9;fmt.Println(&amp;#34;----&amp;#34;, c.MenuItem.Label)&#xA;}&#xA;&#xA;func OpenFile(c *menu.CallbackData) {&#xA;&#x9;fmt.Println(&amp;#34;----&amp;#34;, c.MenuItem.Label)&#xA;}&#xA;&#xA;func HelpUse(c *menu.CallbackData) {&#xA;&#x9;fmt.Println(&amp;#34;----&amp;#34;, c.MenuItem.Label)&#xA;}&#xA;&#xA;func HelpAbout(c *menu.CallbackData) {&#xA;&#x9;fmt.Println(&amp;#34;----&amp;#34;, c.MenuItem.Label)&#xA;}&#xA;&#xA;// ------------------------------------------------------&#xA;&#xA;// domReady 在前端Dom加载完毕后调用&#xA;func (b *App) domReady(ctx context.Context) {&#xA;&#x9;// 在这里添加你的操作&#xA;}&#xA;&#xA;func (b *App) showWindow() {&#xA;&#x9;//runtime.LogDebug(a.ctx, &amp;#34;showWindow&amp;#34;)&#xA;&#x9;runtime.WindowShow(b.ctx)&#xA;}&#xA;&#xA;// 在应用程序终止时被调用&#xA;func (b *App) shutdown(ctx context.Context) {&#xA;&#x9;// 在此处做一些资源释放的操作&#xA;}&#xA;&#xA;// Greet returns a greeting for the given name&#xA;func (b *App) Greet(name string) string {&#xA;&#x9;return fmt.Sprintf(&amp;#34;Hello %s, It&amp;#39;s show time!&amp;#34;, name)&#xA;}&#xA;&#xA;func (b *App) Quit() {&#xA;&#x9;b.ti.Dispose()&#xA;&#x9;runtime.Quit(b.ctx)&#xA;}&#xA;&#xA;// 打开文件对话框&#xA;func (b *App) OpenFile() {&#xA;&#x9;var d runtime.OpenDialogOptions&#xA;&#x9;cur, _ := os.Getwd()&#xA;&#x9;d.DefaultDirectory = cur&#xA;&#x9;d.Title = &amp;#34;打开文件&amp;#34;&#xA;&#xA;&#x9;fmt.Println(runtime.OpenFileDialog(b.ctx, d))&#xA;}&#xA;&#xA;func (b *App) MessageBox() {&#xA;&#x9;fmt.Println(runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{&#xA;&#x9;&#x9;Type:    runtime.InfoDialog,&#xA;&#x9;&#x9;Title:   &amp;#34;一个消息&amp;#34;,&#xA;&#x9;&#x9;Message: &amp;#34;这是一个消息&amp;#34;,&#xA;&#x9;}))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>golang Agent</title>
      <link>/code/2022/032416-agent/</link>
      <pubDate>Thu, 24 Mar 2022 08:57:35 +0000</pubDate>
      <guid>/code/2022/032416-agent/</guid>
      <description>&lt;p&gt;内容很简单，只是添加一个http访问的header。用于一些情况下，服务端会判断user-agent的处理。&lt;/p&gt;&#xA;&lt;p&gt;偶有用到，且作记录&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;io/ioutil&amp;#34;&#xA;&#x9;&amp;#34;net/http&amp;#34;&#xA;)&#xA;&#xA;func main() { //生成client 参数为默认&#xA;&#x9;client := &amp;amp;http.Client{}&#xA;&#x9;url := &amp;#34;http://..../content.php&amp;#34;&#xA;&#x9;reqest, err := http.NewRequest(&amp;#34;GET&amp;#34;, url, nil)&#xA;&#xA;&#x9;// reqest.Header.Add(&amp;#34;Cookie&amp;#34;, &amp;#34;xxxxxx&amp;#34;)&#xA;&#x9;// reqest.Header.Add(&amp;#34;X-Requested-With&amp;#34;, &amp;#34;xxxx&amp;#34;)&#xA;&#x9;reqest.Header.Add(&amp;#34;User-Agent&amp;#34;, &amp;#34;Mozilla/5.0 (Linux; U; Android 8.0.0; zh-CN; MHA-AL00 Build/HUAWEIMHA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.1.4.994 Mobile Safari/537.36&amp;#34;)&#xA;&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;panic(err)&#xA;&#x9;}&#xA;&#x9;//处理返回结果&#xA;&#x9;response, _ := client.Do(reqest)&#xA;&#x9;respByte, _ := ioutil.ReadAll(response.Body)&#xA;&#x9;fmt.Println(string(respByte))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>用 Go 语言实现一个 HTTP 中间件</title>
      <link>/code/2022/032308-middlewares/</link>
      <pubDate>Wed, 23 Mar 2022 00:39:07 +0000</pubDate>
      <guid>/code/2022/032308-middlewares/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gocn.vip/topics/ZwLb8nHVRP&#34;&gt;原文地址&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://cdn.gocn.vip/forum-user-images/20220213/832ddadced354d3194a5c971706f3f86.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;一个基础的中间件示例&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main &#xA;import (&#xA;    &amp;#34;fmt&amp;#34;&#xA;    &amp;#34;net/http&amp;#34;&#xA;)&#xA;&#xA;func middleware(handler http.Handler) http.Handler {&#xA;     return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {&#xA;         fmt.Println(&amp;#34;Executing middleware before request phase!&amp;#34;)&#xA;         // 将控制权交回 Handler&#xA;         handler.ServeHTTP(w, r)         &#xA;         fmt.Println(&amp;#34;Executing middleware after response phase!&amp;#34;)&#xA;     })&#xA; }&#xA; func mainLogic(w http.ResponseWriter, r *http.Request) {&#xA;     // 业务逻辑&#xA;     fmt.Println(&amp;#34;Executing mainHandler...&amp;#34;)&#xA;     w.Write([]byte(&amp;#34;OK&amp;#34;)) } func main() {&#xA;     // HandlerFunc 返回 HTTP Handler &#xA;     mainLogicHandler := http.HandlerFunc(mainLogic)&#xA;     http.Handle(&amp;#34;/&amp;#34;, middleware(mainLogicHandler))&#xA;     http.ListenAndServe(&amp;#34;:8000&amp;#34;, nil)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Gops诊断运行中的go程序</title>
      <link>/code/2022/032308-gops/</link>
      <pubDate>Wed, 23 Mar 2022 00:28:54 +0000</pubDate>
      <guid>/code/2022/032308-gops/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gocn.vip/topics/8QG0jxInwO&#34;&gt;原文地址&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;gops是一个命令行工具，配合agent，可以用来很方便的诊断运行中的go程序，使用简单，官方维护&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装&#34;&gt;安装&lt;/h3&gt;&#xA;&lt;p&gt;go get github.com/google/gops&lt;br&gt;&#xA;或&lt;br&gt;&#xA;go install github.com/google/gops@latest&lt;/p&gt;&#xA;&lt;h3 id=&#34;使用&#34;&gt;使用&lt;/h3&gt;&#xA;&lt;p&gt;gops本身可以查看所有go程序的进程，如果一个程序使用了agent，gops可以报告更多的信息，比如stack，内存统计，trace等，使用了agent的程序会用*号标记&lt;/p&gt;</description>
    </item>
    <item>
      <title>cmux 端口复用</title>
      <link>/code/2022/032308-cmux/</link>
      <pubDate>Wed, 23 Mar 2022 00:15:08 +0000</pubDate>
      <guid>/code/2022/032308-cmux/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/soheilhy/cmux&#34;&gt;cmux&lt;/a&gt; 是一个通用的 Go 库，用于根据有效载荷复用连接。使用 cmux，你可以在同一个 TCP 监听器上提供 gRPC、SSH、HTTPS、HTTP、Go RPC 以及几乎所有其他协议的服务。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wails 又一个Web前台GUI</title>
      <link>/code/2022/032120-wails/</link>
      <pubDate>Mon, 21 Mar 2022 12:44:30 +0000</pubDate>
      <guid>/code/2022/032120-wails/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/wailsapp/wails&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://wails.top/zh-Hans/&#34;&gt;中文官网&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://wails.top/zh-Hans/docs/introduction&#34;&gt;中文文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;使用 Go + HTML + CSS + JS 构建漂亮的跨平台桌面应用&lt;/p&gt;&#xA;&lt;p&gt;这又是一个用HTML作前端的库。看起来比较符合我的想法：扩展一些功能，让HTML看起来更看桌面端应用。例如：最大化、透明、无边框、移动位置等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>消息转发系统: 信息发送到飞书、钉钉、微信</title>
      <link>/it/2022/032009-message/</link>
      <pubDate>Sun, 20 Mar 2022 01:02:49 +0000</pubDate>
      <guid>/it/2022/032009-message/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;/img/feishu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/img/weixin.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://gw.alicdn.com/imgextra/i1/O1CN017BAeMY1LQErGDkUQ3_!!6000000001293-2-tps-370-160.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;功能：将数据库中的消息发送到微信(群)、飞书(群)、钉钉(群)&lt;/p&gt;&#xA;&lt;p&gt;用途：不能实时处理消息的客服系统，不能实时处理的通知/公告。转发到微信/飞书，达到24小时服务的作用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang操作Win的API</title>
      <link>/code/2022/031621-win/</link>
      <pubDate>Wed, 16 Mar 2022 13:41:27 +0000</pubDate>
      <guid>/code/2022/031621-win/</guid>
      <description>&lt;p&gt;对 github.com/lxn/win 做了一点点学习，进行win操作。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;os/exec&amp;#34;&#xA;&#x9;&amp;#34;runtime&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/lxn/win&amp;#34;&#xA;&#x9;&amp;#34;github.com/webview/webview&amp;#34;&#xA;)&#xA;&#xA;const DESKTOP_SWITCHDESKTOP = 0x0100 // The access to the desktop&#xA;&#xA;var (&#xA;&#x9;ScreenWidth  int32&#xA;&#x9;ScreenHeight int32&#xA;&#x9;WinWidth     int&#xA;&#x9;WinHeight    int&#xA;)&#xA;&#xA;func init() {&#xA;&#x9;WinWidth = 800&#xA;&#x9;WinHeight = 500&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;debug := true&#xA;&#xA;&#x9;w := webview.New(debug)&#xA;&#x9;hWnd := win.HWND(w.Window())&#xA;&#x9;win.AnimateWindow(hWnd, 1, win.AW_HIDE|win.AW_CENTER)&#xA;&#x9;defer w.Destroy()&#xA;&#xA;&#x9;// 获取系统参数：屏幕大小&#xA;&#x9;ScreenWidth = win.GetSystemMetrics(win.SM_CXSCREEN)&#xA;&#x9;ScreenHeight = win.GetSystemMetrics(win.SM_CYSCREEN)&#xA;&#x9;win.MoveWindow(hWnd, 0, 0, ScreenWidth, ScreenHeight, true) // 移动窗口位置和大小&#xA;&#x9;w.SetTitle(&amp;#34;Minimal webview example&amp;#34;)&#xA;&#x9;w.Navigate(&amp;#34;https://i.scwy.net&amp;#34;)&#xA;&#x9;//w.SetSize(int(ScreenHeight), int(ScreenHeight), webview.HintNone) // 窗口大小&#xA;&#x9;win.AnimateWindow(hWnd, 700, win.AW_BLEND) // 渐显&#xA;&#x9;win.MessageBeep(win.MB_OK)                 // 播放完成声音&#xA;&#xA;&#x9;// 信息框&#xA;&#x9;// Text := syscall.StringToUTF16Ptr(&amp;#34;测试内容&amp;#34;)&#xA;&#x9;// Caption := syscall.StringToUTF16Ptr(&amp;#34;测试&amp;#34;)&#xA;&#x9;// ret := win.MessageBox(hWnd, Text, Caption, win.MB_YESNO)&#xA;&#x9;// if ret == win.IDYES {&#xA;&#x9;// &#x9;fmt.Println(&amp;#34;点击YES&amp;#34;)&#xA;&#x9;// } else if ret == win.IDNO {&#xA;&#x9;// &#x9;fmt.Println(&amp;#34;点击NO&amp;#34;)&#xA;&#x9;// }&#xA;&#xA;&#x9;var old_press int16&#xA;&#x9;go func() {&#xA;&#x9;&#x9;for {&#xA;&#x9;&#x9;&#x9;press := win.GetKeyState(win.VK_CONTROL)&#xA;&#xA;&#x9;&#x9;&#x9;if press != old_press {&#xA;&#x9;&#x9;&#x9;&#x9;if press &amp;gt; 0 {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;fmt.Println(&amp;#34;没按&amp;#34;)&#xA;&#x9;&#x9;&#x9;&#x9;} else if press &amp;lt; 0 {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;fmt.Println(&amp;#34;按下&amp;#34;)&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;old_press = press&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}()&#xA;&#xA;&#x9;// 获取鼠标位置&#xA;&#x9;// go func() {&#xA;&#x9;// &#x9;var old_point win.POINT&#xA;&#x9;// &#x9;for {&#xA;&#x9;// &#x9;&#x9;var point win.POINT&#xA;&#x9;// &#x9;&#x9;win.GetCursorPos(&amp;amp;point)&#xA;&#x9;// &#x9;&#x9;if old_point != point {&#xA;&#x9;// &#x9;&#x9;&#x9;fmt.Println(point)&#xA;&#x9;// &#x9;&#x9;&#x9;old_point = point&#xA;&#x9;// &#x9;&#x9;}&#xA;&#x9;// &#x9;}&#xA;&#x9;// }()&#xA;&#xA;&#x9;// 查找窗口&#xA;&#x9;// hwnd, err = GetWindowHwndByName(&amp;#34;firfox.exe&amp;#34;)&#xA;&#x9;// hWnd = win.HWND(unsafe.Pointer(hwnd))&#xA;&#x9;// if IsMyWindowsHwnd(hWnd) {}&#xA;&#xA;&#x9;// win.SetWindowPos(hWnd, win.HWND_TOPMOST, 0, 0, 0, 0, win.SWP_NOMOVE|win.SWP_NOSIZE) // 置顶&#xA;&#x9;// win.SetWindowPos(hWnd, win.HWND_NOTOPMOST, 0, 0, 0, 0, win.SWP_NOMOVE|win.SWP_NOSIZE) // 不置顶&#xA;&#x9;// style := win.GetWindowLong(hWnd, win.GWL_STYLE) // 普通窗口样式&#xA;&#x9;// style &amp;amp;= ^win.WS_SIZEBOX &amp;amp; ^win.WS_CAPTION // 无边框&#xA;&#x9;// style |= win.WS_SIZEBOX | win.WS_CAPTION        // 有边框&#xA;&#x9;// win.SetWindowLong(hWnd, win.GWL_STYLE, style)   // 设置样式&#xA;&#x9;// win.MoveWindow(hWnd, int32(-10), int32(-10), int32(1), int32(1), true) // 移动窗口位置和大小&#xA;&#xA;&#x9;// win.SendMessage(hWnd, win.WM_KEYDOWN, 0x0000007A, 0x20380001) // 按下按键&#xA;&#x9;// win.SendMessage(hWnd, win.WM_KEYUP, 0x0000007A, 0x003C0001)   // 抬起按键&#xA;&#xA;&#x9;w.Run()&#xA;}&#xA;&#xA;// 打开浏览器&#xA;func OpenWithBrowser(url string) error {&#xA;&#x9;switch runtime.GOOS {&#xA;&#x9;case &amp;#34;linux&amp;#34;:&#xA;&#x9;&#x9;return exec.Command(&amp;#34;xdg-open&amp;#34;, url).Start()&#xA;&#x9;case &amp;#34;windows&amp;#34;:&#xA;&#x9;&#x9;return exec.Command(&amp;#34;rundll32&amp;#34;, &amp;#34;url.dll,FileProtocolHandler&amp;#34;, url).Start()&#xA;&#xA;&#x9;case &amp;#34;darwin&amp;#34;:&#xA;&#x9;&#x9;return exec.Command(&amp;#34;open&amp;#34;, url).Start()&#xA;&#x9;default:&#xA;&#x9;&#x9;return fmt.Errorf(&amp;#34;runtime.GOOS %s is not supported&amp;#34;, runtime.GOOS)&#xA;&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Webview 将浏览器作为golang的GUI</title>
      <link>/code/2022/031613-webview/</link>
      <pubDate>Wed, 16 Mar 2022 05:58:58 +0000</pubDate>
      <guid>/code/2022/031613-webview/</guid>
      <description>&lt;p&gt;将浏览器作为golang的GUI界面使用，外面可套层壳，也可直接控制。这解决了golang的前端短板，利用现成的HTML来完成交互部份。&lt;/p&gt;&#xA;&lt;p&gt;例如这里使用webview: github.com/webview/webview。前后台的交互其实可以通过类似VUE来实现，当然它有自己的交互方式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang 对文件增删写读操作备忘</title>
      <link>/code/2022/031521-file/</link>
      <pubDate>Tue, 15 Mar 2022 13:06:32 +0000</pubDate>
      <guid>/code/2022/031521-file/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://golangnote.com/topic/269.html&#34;&gt;原文件地址&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;经常会用到，抄下来免得到处找。&lt;/p&gt;&#xA;&lt;p&gt;使用Golang 的底层库 io 、 os 对文件常规操作：新建、写入、读取、删除。另外内置的 ioutil 使用也很方便。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;fmt&amp;#34;&#xA;    &amp;#34;io&amp;#34;&#xA;    &amp;#34;os&amp;#34;&#xA;)&#xA;&#xA;var path = &amp;#34;/Users/novalagung/Documents/temp/test.txt&amp;#34;&#xA;&#xA;func main() {&#xA;    createFile()&#xA;    writeFile()&#xA;    readFile()&#xA;    deleteFile()&#xA;}&#xA;&#xA;func createFile() {&#xA;    // detect if file exists&#xA;    var _, err = os.Stat(path)&#xA;&#xA;    // create file if not exists&#xA;    if os.IsNotExist(err) {&#xA;        var file, err = os.Create(path)&#xA;        if isError(err) { return }&#xA;        defer file.Close()&#xA;    }&#xA;&#xA;    fmt.Println(&amp;#34;==&amp;gt; done creating file&amp;#34;, path)&#xA;}&#xA;&#xA;func writeFile() {&#xA;    // open file using READ &amp;amp; WRITE permission&#xA;    var file, err = os.OpenFile(path, os.O_RDWR, 0644)&#xA;    if isError(err) { return }&#xA;    defer file.Close()&#xA;&#xA;    // write some text line-by-line to file&#xA;    _, err = file.WriteString(&amp;#34;halo\n&amp;#34;)&#xA;    if isError(err) { return }&#xA;    _, err = file.WriteString(&amp;#34;mari belajar golang\n&amp;#34;)&#xA;    if isError(err) { return }&#xA;&#xA;    // save changes&#xA;    err = file.Sync()&#xA;    if isError(err) { return }&#xA;&#xA;    fmt.Println(&amp;#34;==&amp;gt; done writing to file&amp;#34;)&#xA;}&#xA;&#xA;func readFile() {&#xA;    // re-open file&#xA;    var file, err = os.OpenFile(path, os.O_RDWR, 0644)&#xA;    if isError(err) { return }&#xA;    defer file.Close()&#xA;&#xA;    // read file, line by line&#xA;    var text = make([]byte, 1024)&#xA;    for {&#xA;        _, err = file.Read(text)&#xA;        &#xA;        // break if finally arrived at end of file&#xA;        if err == io.EOF {&#xA;            break&#xA;        }&#xA;        &#xA;        // break if error occured&#xA;        if err != nil &amp;amp;&amp;amp; err != io.EOF {&#xA;            isError(err)&#xA;            break&#xA;        }&#xA;    }&#xA;    &#xA;    fmt.Println(&amp;#34;==&amp;gt; done reading from file&amp;#34;)&#xA;    fmt.Println(string(text))&#xA;}&#xA;&#xA;func deleteFile() {&#xA;    // delete file&#xA;    var err = os.Remove(path)&#xA;    if isError(err) { return }&#xA;&#xA;    fmt.Println(&amp;#34;==&amp;gt; done deleting file&amp;#34;)&#xA;}&#xA;&#xA;func isError(err error) bool {&#xA;    if err != nil {&#xA;        fmt.Println(err.Error())&#xA;    }&#xA;&#xA;    return (err != nil)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;使用-ioutil&#34;&gt;使用 ioutil&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[200~func NopCloser(r io.Reader) io.ReadCloser&#xA;// 返回一个包裹起给定 Reader r 的 ReadCloser ， 这个 ReadCloser 带有一个无参数的 Close 方法。&#xA;&#xA;func ReadAll(r io.Reader) ([]byte, error) &#xA;// 对 r 进行读取， 直到发生错误或者遇到 EOF 为止， 然后返回被读取的数据。&#xA;&#xA;func ReadDir(dirname string) ([]os.FileInfo, error)&#xA;// 读取 dirname 指定的目录， 并返回一个根据文件名进行排序的目录节点列表&#xA;&#xA;func ReadFile(filename string) ([]byte, error)&#xA;// 读取名字为 filename 的文件并返回文件中的内容。&#xA;&#xA;func TempDir(dir, pattern string) (name string, err error)&#xA;// 在目录 dir 中新创建一个带有指定前缀 prefix 的临时目录， 然后返回该目录的路径。 &#xA;&#xA;func TempFile(dir, pattern string) (f *os.File, err error)&#xA;// 在目录 dir 新创建一个名字带有指定前缀 prefix 的临时文件， 以可读写的方式打开它， 并返回一个 *os.File 指针。&#xA;&#xA;func WriteFile(filename string, data []byte, perm os.FileMode) error&#xA;// 将给定的数据 data 写入到名字为 filename 的文件里面。[201~]]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[200&lt;del&gt;一般情况下，ioutil 库读取文件的效率最高，bufio 库次之，直接使用文件的 Read 加上 buffer 的方法效率最低。但对于大文件，设置相同大小的 buffer 有时 bufio 反而会更慢。[201&lt;/del&gt;]]&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang embed 的 index.html 文件存放路径</title>
      <link>/code/2022/031521-embed/</link>
      <pubDate>Tue, 15 Mar 2022 13:00:26 +0000</pubDate>
      <guid>/code/2022/031521-embed/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://golangnote.com/topic/278.html&#34;&gt;原文地址&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;go:embed 可提供嵌入静态文件功能，首页文件 index.html 的放置及设定&lt;/p&gt;&#xA;&lt;p&gt;文件结构：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;.&#xA;├── main.go&#xA;└── abc/&#xA;    └── index.html&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;//go:embed abc&#xA;var abc embed.FS&#xA;&#xA;func main() {&#xA;&#x9;// 以前的方式&#xA;&#x9;//fileServer := http.FileServer(http.Dir(&amp;#34;./abc&amp;#34;)) // New code&#xA;&#x9;//http.Handle(&amp;#34;/&amp;#34;, fileServer) // New code&#xA;&#xA;&#x9;sub, _ := fs.Sub(abc, &amp;#34;abc&amp;#34;)&#xA;&#xA;&#x9;// 根目录 /index.html&#xA;&#x9;http.Handle(&amp;#34;/&amp;#34;, http.FileServer(http.FS(sub)))&#xA;&#xA;&#x9;// 子目录 /abc/index.html&#xA;&#x9;http.Handle(&amp;#34;/abc/&amp;#34;, http.StripPrefix(&amp;#34;/abc/&amp;#34;, http.FileServer(http.FS(sub))))&#xA;&#xA;&#x9;// 其它路由&#xA;&#x9;http.HandleFunc(&amp;#34;/hello&amp;#34;, helloHandler)&#xA;&#xA;&#x9;fmt.Printf(&amp;#34;Starting server at port 8081\n&amp;#34;)&#xA;&#x9;if err := http.ListenAndServe(&amp;#34;:8081&amp;#34;, nil); err != nil {&#xA;&#x9;&#x9;log.Fatal(err)&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>自定义树莓派开机画机</title>
      <link>/it/2022/031514-pios/</link>
      <pubDate>Tue, 15 Mar 2022 06:32:16 +0000</pubDate>
      <guid>/it/2022/031514-pios/</guid>
      <description>&lt;p&gt;可能需要将开机画面定制化，网上找找，这个似乎更靠谱，待测试。&lt;/p&gt;&#xA;&lt;p&gt;也不知道是不是显示器反应太慢，除了黑屏没有见到太多的过场画面。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.codenong.com/cs106769019/&#34;&gt;原地址&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;其实Raspberry Pi OS中默认就自带使用了plymouth这个工具来管理开机启动画面的效果,可以使用下面命令进行操作&lt;/p&gt;</description>
    </item>
    <item>
      <title>思路打开，Golang的GUI想法</title>
      <link>/it/2022/031111-gui/</link>
      <pubDate>Fri, 11 Mar 2022 03:27:29 +0000</pubDate>
      <guid>/it/2022/031111-gui/</guid>
      <description>&lt;p&gt;最近使用lorca完成一个GUI，它实际是套壳HTML，使用Chrome系的浏览器。&lt;/p&gt;&#xA;&lt;p&gt;其实换个想法，我们只需要随意浏览器(不怕兼容性问题的话)作为呈现，即GUI。后端用Golang用Web来完成功能即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang中执行Shell命令，隐藏黑窗口的方法</title>
      <link>/code/2022/030722-gocmd/</link>
      <pubDate>Mon, 07 Mar 2022 14:45:36 +0000</pubDate>
      <guid>/code/2022/030722-gocmd/</guid>
      <description>&lt;p&gt;最近用lorca做一个桌面工具，在调用命令行时总是会闪一个黑窗口，无时无刻不在提醒自己：它是做后端的。&lt;/p&gt;&#xA;&lt;p&gt;有一个库 github.com/CodyGuo/win 通过调用win的api来隐藏窗口。不过它是没有返回字符串的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang Gui寻找中</title>
      <link>/it/2022/030609-gui/</link>
      <pubDate>Sun, 06 Mar 2022 01:46:49 +0000</pubDate>
      <guid>/it/2022/030609-gui/</guid>
      <description>&lt;p&gt;还是那句老话：虽然golang并不是为了gui而生，但社会要求它做到。&lt;/p&gt;&#xA;&lt;p&gt;之前的godot并不能在arm64的linux上运行(Pi OS64)，其实它是开源，或许自己编译是可以的，但确实有点麻烦(不会)。&lt;/p&gt;</description>
    </item>
    <item>
      <title>计划制作一个网络工具</title>
      <link>/it/2022/030210-plan/</link>
      <pubDate>Wed, 02 Mar 2022 02:43:00 +0000</pubDate>
      <guid>/it/2022/030210-plan/</guid>
      <description>&lt;p&gt;计划制作一个网络工具，功能如下：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;可方便画网络拓朴图&lt;/li&gt;&#xA;&lt;li&gt;自动检测设备通断，并可将断网信息发送到微信&lt;/li&gt;&#xA;&lt;li&gt;跨平台&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;思考：&lt;br&gt;&#xA;可使用golang+web实现。&lt;br&gt;&#xA;web作为前端显示，可实现跨平台，有浏览器即可使用。&lt;br&gt;&#xA;golang实现通断判断，可检查通信端口。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于用Godot作为Golang的GUI，即界面开发</title>
      <link>/it/2022/022817-godot/</link>
      <pubDate>Mon, 28 Feb 2022 09:22:54 +0000</pubDate>
      <guid>/it/2022/022817-godot/</guid>
      <description>&lt;p&gt;之前就思考过&lt;a href=&#34;https://i.scwy.net/it/2020/031911-think/&#34;&gt;将godot作为golang的界面开发工具&lt;/a&gt;，也作为一些尝试。今天在阅读godot官方文档时，又看到关于作为gui的可行性。&lt;/p&gt;&#xA;&lt;p&gt;“&#xA;是否能用 Godot 创建非游戏应用？&lt;/p&gt;&#xA;&lt;p&gt;是的! Godot 具有广泛的内置 UI 系统, 其较小的软件包可以使它成为 Electron 或 Qt 等框架的合适替代品.&lt;/p&gt;&#xA;&lt;p&gt;当创建一个非游戏的应用程序时，确保在项目设置中启用 低处理器模式 以减少CPU和GPU占用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>有什么方法能够获取文件类型?</title>
      <link>/it/2022/022816-code/</link>
      <pubDate>Mon, 28 Feb 2022 08:18:39 +0000</pubDate>
      <guid>/it/2022/022816-code/</guid>
      <description>&lt;p&gt;Windows是通过扩展名来判断文件类型的，这是一个很傻很天真的认识。我想知道的是它真实的文件类型。&lt;/p&gt;&#xA;&lt;p&gt;看起来一般文件在文件头是有类型标识的，但通过实际的测试，这种标识也不是很明确。&lt;/p&gt;</description>
    </item>
    <item>
      <title>做一个图片合成工具，抗疫工具</title>
      <link>/it/2022/022522-tool/</link>
      <pubDate>Fri, 25 Feb 2022 14:49:55 +0000</pubDate>
      <guid>/it/2022/022522-tool/</guid>
      <description>&lt;p&gt;因为疫情的原因，学校需要每天收集各个家长的健康码。一般是父母孩子各一张健康码，有时还需要行程码。&lt;/p&gt;&#xA;&lt;p&gt;之前一直是要求各个家长发到家委会负责人那里，统一再发给班主任。家长各有各的事，各有各的情况，要么是总催，要么就是发三四张图片，请负责人帮忙拼接成一张。&lt;/p&gt;</description>
    </item>
    <item>
      <title>飞书自定义机器人开发</title>
      <link>/it/2022/022310-feishu-robot/</link>
      <pubDate>Wed, 23 Feb 2022 02:52:53 +0000</pubDate>
      <guid>/it/2022/022310-feishu-robot/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;/img/feishu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;手机版本(至少使用的安卓版上)是没有看到群的自定义机器人的，只有PC版的群定义中找到。这个&amp;hellip;啥意思呢？&lt;/p&gt;&#xA;&lt;p&gt;使用起来还是比较简单，当你自定义机器人时，飞书将给你一个网址。当我们的程序向这个网址发送规定格式的信息，飞书后台会将此信息发送到群中。&lt;/p&gt;</description>
    </item>
    <item>
      <title>飞书安装提示：当前安装包不完整，请尝试重新下载 解决方法</title>
      <link>/it/2022/022310-feishu/</link>
      <pubDate>Wed, 23 Feb 2022 02:22:56 +0000</pubDate>
      <guid>/it/2022/022310-feishu/</guid>
      <description>&lt;p&gt;最近使用飞书，Windows上始终安装不上，网上也没找到答案，寻求客服解决了。&lt;/p&gt;&#xA;&lt;p&gt;首先确定安装包有签名，即文件属性中看数字签名项。&lt;/p&gt;&#xA;&lt;p&gt;我是官方下载的，签名没有问题。但依然安装不上，继续下一步解决。&lt;/p&gt;</description>
    </item>
    <item>
      <title>调节树莓派外接显示器的亮度 ddcutil</title>
      <link>/it/2022/021818-light/</link>
      <pubDate>Fri, 18 Feb 2022 10:05:24 +0000</pubDate>
      <guid>/it/2022/021818-light/</guid>
      <description>&lt;p&gt;购进一台移动显示器（且这么叫吧，通过移动电源供电的独立显示器）,接上Pi400，亮度太高。网上找找资料，成功。记录一下。&lt;br&gt;&#xA;&lt;a href=&#34;https://blog.csdn.net/u010013028/article/details/105335936&#34;&gt;原文章在这里&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;安装ddcutil: sudo apt-get install ddcutil -y&lt;br&gt;&#xA;（下面的配置我不确定是不是真的需要，等下次重做系统的时候再试）&lt;/p&gt;</description>
    </item>
    <item>
      <title>飞书消息提醒工具</title>
      <link>/code/2022/021723-feishu/</link>
      <pubDate>Thu, 17 Feb 2022 15:23:10 +0000</pubDate>
      <guid>/code/2022/021723-feishu/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;/img/feishu.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最近在使用飞书。微信占空间3.59G，内存1.2G。飞书存储1.02G，内存0.86G。比较一下&amp;hellip;. 如果可能，我希望卸载微信。很多人其实已经被微信绑架。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《程序员第二步：从程序员到项目经理》</title>
      <link>/other/2022/021610-book/</link>
      <pubDate>Wed, 16 Feb 2022 02:00:27 +0000</pubDate>
      <guid>/other/2022/021610-book/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../021610-book-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;编程做为本人的爱好，因此一直在学习。当然这还不够。结合多年实践工作经验，加深对行业的理解，加强对项目管理的理解和应用。&lt;br&gt;&#xA;这本书应该买了好几年了，现在才拾起来看。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pi400树莓派键盘电脑使用体验</title>
      <link>/it/2022/021209-pi400/</link>
      <pubDate>Sat, 12 Feb 2022 01:00:12 +0000</pubDate>
      <guid>/it/2022/021209-pi400/</guid>
      <description>&lt;p&gt;购回Pi400一台，使用一周左右，安装过32位和64位。没有具体数据，来谈谈使用感受。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../021209-pi400-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;虽网文说&lt;a href=&#34;https://www.cnbeta.com/articles/tech/1236105.htm&#34;&gt;64位比32位性能提升14倍&lt;/a&gt;(我不信)，但使用上并没有很明显的感觉。&lt;/p&gt;&#xA;&lt;p&gt;可能20%左右还是有，拉跨速度或许在于CPU和磁盘(TF)。什么时候能出个原生支持SSD的。使用TF和优盘也没有感觉太大差别。&lt;/p&gt;</description>
    </item>
    <item>
      <title>简版手机投屏</title>
      <link>/code/2022/021118-screen/</link>
      <pubDate>Fri, 11 Feb 2022 10:32:52 +0000</pubDate>
      <guid>/code/2022/021118-screen/</guid>
      <description>&lt;p&gt;树莓派出了最新的64位系统,但手机投屏却没有办法。能安装adb工具，不能安装scrcpy。&lt;/p&gt;&#xA;&lt;p&gt;既然如此，adb可以通过shell来运行screecap截图程序，那自己做一个简版的投屏。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot之音频可视化</title>
      <link>/code/2022/020715-godot/</link>
      <pubDate>Mon, 07 Feb 2022 07:04:59 +0000</pubDate>
      <guid>/code/2022/020715-godot/</guid>
      <description>&lt;p&gt;最近忙着做一个项目，使用godot就比较少了。最新出了Godot4.0a版，始终关注中。也关注着它与XR（VR/AR）的发展。&lt;/p&gt;&#xA;&lt;p&gt;这个示例将音频显示出来，Godot隐藏了一些细节，非常便于可视化。&lt;/p&gt;</description>
    </item>
    <item>
      <title>TCL智能眼镜 NXTWEAR AIR</title>
      <link>/it/2022/012008-tcl/</link>
      <pubDate>Thu, 20 Jan 2022 00:32:07 +0000</pubDate>
      <guid>/it/2022/012008-tcl/</guid>
      <description>&lt;p&gt;TCL 的新智能眼镜NXTWEAR AIR，样子普通(这是优点)，重量仅为 75 克。戴上它，就可以看出距离4米140寸大屏幕的效果。&lt;br&gt;&#xA;它是作为屏幕存在即眼镜显示器，没有嵌入复杂的设备。这或许正是适合当前情况的。&lt;br&gt;&#xA;预计在2022年一季度海外上市。作为参考，去年的眼镜售价为 599 欧元（合 676 美元），看起来有点贵了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>小程序视频推流/拉流研究</title>
      <link>/code/2022/011713-rtmp/</link>
      <pubDate>Mon, 17 Jan 2022 05:28:42 +0000</pubDate>
      <guid>/code/2022/011713-rtmp/</guid>
      <description>&lt;p&gt;因为需要完成客户与服务之间的一对一视频/语音，对推流和拉流进行了一些学习。&lt;/p&gt;&#xA;&lt;p&gt;了解提供服务的livego，它就是一个中介：原视频推给它，需要观看的就在它上面拉取。&lt;/p&gt;</description>
    </item>
    <item>
      <title>go官方嵌入文件到可执行程序</title>
      <link>/code/2022/011310-embed/</link>
      <pubDate>Thu, 13 Jan 2022 02:21:50 +0000</pubDate>
      <guid>/code/2022/011310-embed/</guid>
      <description>&lt;p&gt;这是官方自带的文件嵌入。先看代码&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    _ &amp;#34;embed&amp;#34;&#xA;)&#xA;&#xA;//go:embed test.txt&#xA;var testString string  // 当前目录，解析为string类型&#xA;&#xA;//go:embed test.txt&#xA;var testByte []byte  // 当前目录，解析为[]byte类型&#xA;&#xA;//go:embed test/test.txt&#xA;var testAbsolutePath string  // 子目录，解析为string类型&#xA;&#xA;//go:embed notExistsFile&#xA;var testErr0 string // 文件不存在，编译报错：pattern notExistsFile: no matching files found&#xA;&#xA;//go:embed dir&#xA;var testErr1 string // dir是目录，编译报错：pattern dir: cannot embed directory dir: contains no embeddable files&#xA;&#xA;//go:embed ../test.txt&#xA;var testErr2 string // 相对路径，不是当前目录或子目录，编译报错：pattern ../test.txt: invalid pattern syntax&#xA;&#xA;//go:embed D:\test.txt&#xA;var testErr3 string // 绝对路径，编译报错：pattern D:\test.txt: no matching files found&#xA;&#xA;func main() {&#xA;    println(testString)&#xA;    println(string(testByte))&#xA;    println(testAbsolutePath)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;embed&amp;#34;&#xA;    &amp;#34;io&amp;#34;&#xA;    &amp;#34;os&amp;#34;&#xA;)&#xA;&#xA;//go:embed test0.txt test1.txt test1*.txt&#xA;//go:embed test/test0.txt test/test1.txt&#xA;//go:embed test0&#xA;var fileList embed.FS&#xA;/*&#xA;使用上述方法可以将多个文件或目录添加到fileList中。&#xA;1. 添加多个文件，且支持&amp;#34;*&amp;#34;号通配文件。&#xA;2. 支持子目录文件。&#xA;3. 支持嵌入一个目录。&#xA;*/&#xA;&#xA;func main() {&#xA;    testDir, err := fileList.ReadDir(&amp;#34;test0&amp;#34;)&#xA;    if err != nil {&#xA;        panic(err)&#xA;    }&#xA;    for _, v := range testDir {&#xA;        println(v.Name()) // 打印嵌入的目录内容&#xA;    }&#xA;&#xA;    // 使用fileList.Open可以生成一个对象，可以通过文件流那样读出来&#xA;    testFile, err := fileList.Open(&amp;#34;test0.txt&amp;#34;)&#xA;    if err != nil {&#xA;        panic(err)&#xA;    }&#xA;    io.Copy(os.Stdout, testFile)&#xA;&#xA;    testFile, err = fileList.Open(&amp;#34;test112.txt&amp;#34;)&#xA;    if err != nil {&#xA;        panic(err)&#xA;    }&#xA;    io.Copy(os.Stdout, testFile)&#xA;&#xA;    testFile, err = fileList.Open(&amp;#34;test/test1.txt&amp;#34;)&#xA;    if err != nil {&#xA;        panic(err)&#xA;    }&#xA;    io.Copy(os.Stdout, testFile)&#xA;&#xA;    // 直接将文件内容读出来&#xA;    data, err := fileList.ReadFile(&amp;#34;test111.txt&amp;#34;)&#xA;    if err != nil {&#xA;        panic(err)&#xA;    }&#xA;    println(string(data))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在项目中，需要将几十个音频文件放到一起，避免文件过多，且有初级的加密作用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>了解一下网络打印 SNMP RAW LPR</title>
      <link>/it/2021/122122-rawlpr/</link>
      <pubDate>Tue, 21 Dec 2021 14:36:25 +0000</pubDate>
      <guid>/it/2021/122122-rawlpr/</guid>
      <description>&lt;p&gt;标准端口监视器增强了LPR（line printer remote，远程行式打印机）。发送方端口721-731，接收端口515。&lt;/p&gt;&#xA;&lt;p&gt;标准端口监视器还使用简单网络管理协议（SNMP）&lt;/p&gt;</description>
    </item>
    <item>
      <title>远程共享打印</title>
      <link>/it/2021/122121-printer/</link>
      <pubDate>Tue, 21 Dec 2021 13:04:52 +0000</pubDate>
      <guid>/it/2021/122121-printer/</guid>
      <description>&lt;p&gt;最近Win10更新导致局域网共享打印机出现了问题。虽然尝试后还是解决了。不过之前要实多个系统间共享打印的经历还是比较郁闷。&lt;/p&gt;&#xA;&lt;p&gt;如果能通过软件简单的实现跨版本、跨系统的实现远程共享打印，这对管理人员来说是种解放。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Termux 听股票</title>
      <link>/code/2021/122113-termux/</link>
      <pubDate>Tue, 21 Dec 2021 05:34:48 +0000</pubDate>
      <guid>/code/2021/122113-termux/</guid>
      <description>&lt;p&gt;没时间看股票，还不能听吗？&lt;/p&gt;&#xA;&lt;p&gt;让手机每5分钟播报一下股票信息，记得戴上耳机。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash&#xA;&#xA;# 新浪API 获取实时行情数据接口 http://hq.sinajs.cn/list=sz002208,sh601318&#xA;# 雪球 https://stock.xueqiu.com/v5/stock/realtime/quotec.json?symbol=SH601003,SH601001&#xA;# 腾讯财经 http://qt.gtimg.cn/q=sh601003,sh601001&#xA;#&#xA;&#xA;&#xA;while [ 1 -le 1 ]&#xA;do&#xA;  stock=`curl &amp;#34;http://hq.sinajs.cn/list=sz000725,sz300144,sh600016,sz000651,sh600030,sh000001&amp;#34; -s | awk -F&amp;#39;[,]&amp;#39; &amp;#39;{print $4}&amp;#39;`&#xA;  info1=&amp;#34;京东方A:  &amp;#34;`echo $stock | awk &amp;#39;{print $1*10/10}&amp;#39; | bc`&#xA;  info2=&amp;#34;宋城演艺: &amp;#34;`echo $stock | awk &amp;#39;{print $2*10/10}&amp;#39; | bc`&#xA;  info3=&amp;#34;民生银行: &amp;#34;`echo $stock | awk &amp;#39;{print $3*10/10}&amp;#39; | bc`&#xA;  info4=&amp;#34;格力电器: &amp;#34;`echo $stock | awk &amp;#39;{print $4*10/10}&amp;#39; | bc`&#xA;  info5=&amp;#34;中信证券: &amp;#34;`echo $stock | awk &amp;#39;{print $5*10/10}&amp;#39; | bc`&#xA;  info6=&amp;#34;上证指数: &amp;#34;`echo $stock | awk &amp;#39;{print $6*10000/10000}&amp;#39; | bc`&#xA;  termux-toast &amp;#34;$info1   $info2   $info3   $info4   $info5  $info6&amp;#34;&#xA;  termux-tts-speak &amp;#34;$info1 。。。 $info2 。。。$info3 。。。 $info4 。。。$info5 。。。$info6&amp;#34;&#xA;&#xA;  sleep 5m&#xA;done&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;p&gt;第二个版本，能够清楚的知道是涨是跌。&lt;/p&gt;</description>
    </item>
    <item>
      <title>uni-app 学习 -- vue3</title>
      <link>/it/2021/121821-uniapp/</link>
      <pubDate>Sat, 18 Dec 2021 13:13:53 +0000</pubDate>
      <guid>/it/2021/121821-uniapp/</guid>
      <description>&lt;p&gt;uni-app一套代码多个平台运行，算是懒人和小团队的福音。&lt;/p&gt;&#xA;&lt;p&gt;官网：https://uniapp.dcloud.io&lt;/p&gt;&#xA;&lt;p&gt;vue是它的主要语言，之前对vue了解不多。既然新的开始，就从&lt;a href=&#34;https://uniapp.dcloud.io/vue3-basics&#34;&gt;新版3&lt;/a&gt;开始学习。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Termux工具化再研究</title>
      <link>/it/2021/121108-termux/</link>
      <pubDate>Sat, 11 Dec 2021 00:19:58 +0000</pubDate>
      <guid>/it/2021/121108-termux/</guid>
      <description>&lt;p&gt;继续研究termux，将它工具化，应用化，自动化。&lt;/p&gt;&#xA;&lt;p&gt;陆续写了几个脚本，安装了定时任务crontab，让它后台自动运行。&lt;/p&gt;&#xA;&lt;p&gt;比如凌晨1点上传(同步)博客。早上7点播报天气，7点10分播报每日一语。&lt;/p&gt;</description>
    </item>
    <item>
      <title>室内自行车运动项目</title>
      <link>/money/2021/121010-bike/</link>
      <pubDate>Fri, 10 Dec 2021 02:16:12 +0000</pubDate>
      <guid>/money/2021/121010-bike/</guid>
      <description>&lt;p&gt;这是一个室内竞技的自行车运动与迷你赛车结合的项目。&lt;/p&gt;&#xA;&lt;p&gt;为了避免一般的运动项目的枯燥，运转的自行车将和游戏结合到一起。即通过传感器，将自行车的数据与玩具小车结合到一起，形成一个迷你赛车游戏。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Termux应用：自动更新博客hugo</title>
      <link>/code/2021/121009-termux/</link>
      <pubDate>Fri, 10 Dec 2021 01:28:53 +0000</pubDate>
      <guid>/code/2021/121009-termux/</guid>
      <description>&lt;p&gt;最近玩Termux，将hugo装在了手机上。我现在可以随时随地写博客，并写随时可以查看内容。&lt;/p&gt;&#xA;&lt;p&gt;不过必须这只是在自己手机上，网上的博客(&lt;a href=&#34;https://i.scwy.net&#34;&gt;https://i.scwy.net&lt;/a&gt;)内容如何更新呢，必须要让它自动化，这是IT人的执着。&lt;/p&gt;&#xA;&lt;p&gt;废话不多，代码人用代码说话，这是第一个版本：&lt;/p&gt;</description>
    </item>
    <item>
      <title>SSH免密登陆</title>
      <link>/it/2021/121008-ssh/</link>
      <pubDate>Fri, 10 Dec 2021 00:44:01 +0000</pubDate>
      <guid>/it/2021/121008-ssh/</guid>
      <description>&lt;p&gt;网上有些说得太复杂了。简单点说，就是本机生成密钥公钥对，把公钥发给目标主机即可。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;ssh-keygen -t rsa 生成密钥公钥&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;ssh-copy-id &lt;a href=&#34;mailto:xxx@xxx.net&#34;&gt;xxx@xxx.net&lt;/a&gt;  把公钥发给目标主机&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;2023.2.16&lt;/p&gt;&#xA;&lt;p&gt;windows无法使用ssh-copy-id解决办法&lt;/p&gt;</description>
    </item>
    <item>
      <title>Termux-Api</title>
      <link>/it/2021/120909-termuxapi/</link>
      <pubDate>Thu, 09 Dec 2021 01:16:40 +0000</pubDate>
      <guid>/it/2021/120909-termuxapi/</guid>
      <description>&lt;p&gt;Termux-Api 是一个Termux的插件，它通过app与命令行配合，与手机硬件完成一些交互。比如读取通话记录，发送短信，拨打电话，录音，开关Wifi等。让Termux玩出更多功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>让Termux在你的手机里为所欲为</title>
      <link>/it/2021/120819-termux/</link>
      <pubDate>Wed, 08 Dec 2021 11:11:43 +0000</pubDate>
      <guid>/it/2021/120819-termux/</guid>
      <description>&lt;h3 id=&#34;1&#34;&gt;1&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://termux.com/files/htop_framed.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;先看看什么是Termux:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://termux.com/&#34;&gt;Termux&lt;/a&gt; 是 Android 平台上的一个终端模拟器，它将众多 Linux 上运行的软件和工具近乎完美的移植到了手机端。&lt;/p&gt;&#xA;&lt;p&gt;无需任何复杂的安装和配置过程，软件装好以后即会自动配置一个基本的运行环境，用以执行一些常见的 Linux 命令。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用微信企业号建立自己的客服系统</title>
      <link>/it/2021/120816-server/</link>
      <pubDate>Wed, 08 Dec 2021 16:40:10 +0800</pubDate>
      <guid>/it/2021/120816-server/</guid>
      <description>&lt;p&gt;使用微信企业号建立自己的客服系统&lt;/p&gt;&#xA;&lt;p&gt;1、申请微信企业号&lt;/p&gt;&#xA;&lt;p&gt;2、添加通讯录，记住成员名的&amp;quot;帐号&amp;quot;，它是“用户ID”&lt;/p&gt;&#xA;&lt;p&gt;3、应用管理中添加“自建”&amp;ndash;创建应用。记住它的AgentId和Secret（即“应用ID”和“应用密钥”），它将决定消息发送到哪个应用中。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Termux 手机上建个公网博客</title>
      <link>/it/2021/120811-termux/</link>
      <pubDate>Wed, 08 Dec 2021 11:06:10 +0800</pubDate>
      <guid>/it/2021/120811-termux/</guid>
      <description>&lt;p&gt;博客用于记录一些自己的想法，收集整理一些资料是很有用的。但不是每个都有服务器，都需要购买服务器。我们利用家里淘汰下来的手机，建立一个服务器，用于存放博客，还可以公网访问，是一个很不错的想法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>remark42给博客加个评论功能</title>
      <link>/it/2021/120409-remark/</link>
      <pubDate>Sat, 04 Dec 2021 09:10:10 +0800</pubDate>
      <guid>/it/2021/120409-remark/</guid>
      <description>&lt;p&gt;就&lt;a href=&#34;https://i.scwy.net&#34;&gt;本站&lt;/a&gt;是一个hugo静态博客，之前使用过两三种博客系统，大体是调用第三方的脚本来使用。存在速度慢和安全等问题。昨天试了试在自己服务器上搭一个评论系统。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/umputun/remark42/&#34;&gt;remark42&lt;/a&gt;因为使用Go开发，天然绿色跨平台，部署就一个程序文件搞定。&lt;/p&gt;&#xA;&lt;p&gt;官网文档:&lt;a href=&#34;https://remark42.com/docs&#34;&gt;https://remark42.com/docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;个人习惯，能直接运行的就不考虑Docker。下载可执行程序直接运行即可。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;remark42 server --secret 129129 --url https://pp.scwy.net/ --anon-vote --auth.anon --dbg --site scwy --admin-passwd 129129 --auth.email.enable --auth.email.from mailto:admin@scwy.net --auth.email.host scwy.net/ auth.email.user admin auth.email.passwd 129129 --auth.email.port 25 --auth.email.from 博客的邮箱验证&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这里开通了评论服务，允许匿名和邮箱登陆。邮箱登陆首次需要验证Token，因此配置了自己发件信息。&lt;/p&gt;</description>
    </item>
    <item>
      <title>打造个人专属邮箱，域名邮箱，邮件系统 (更新2022.5.8)</title>
      <link>/it/2021/112621-mail/</link>
      <pubDate>Fri, 26 Nov 2021 21:39:20 +0800</pubDate>
      <guid>/it/2021/112621-mail/</guid>
      <description>&lt;p&gt;最近使用微信小程序开发比较多，一个帐号需要一个邮箱，导致邮箱都不够用了。&lt;/p&gt;&#xA;&lt;p&gt;一般的邮箱系统需要与手机号绑定，所以能够申请的数量是有限的。&lt;/p&gt;&#xA;&lt;p&gt;家里利用电信宽带挂的Pi3作为服务器，如果能自己架一个小型邮箱系统，那想要多少邮箱都行。加之自己的域名，感觉帅气了许多。以前腾讯QQ邮箱可以绑定域名，似乎现在是收费了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>内网DNS</title>
      <link>/code/2021/110920-dns/</link>
      <pubDate>Tue, 09 Nov 2021 20:41:50 +0800</pubDate>
      <guid>/code/2021/110920-dns/</guid>
      <description>&lt;p&gt;自建内网的DNS有几个使用场景：&lt;/p&gt;&#xA;&lt;p&gt;1、内网用户不用强记IP，使用自己喜欢的短域名，好记好输入。&lt;/p&gt;&#xA;&lt;p&gt;2、从DNS开始就阻止用户访问一些网站（先封掉所有向外网的53端口，只允许内网服务器通过）&lt;/p&gt;</description>
    </item>
    <item>
      <title>利用Caddy轻松HTTPS，支持HTTP3/QUIC</title>
      <link>/it/2021/110614-caddy/</link>
      <pubDate>Sat, 06 Nov 2021 14:33:45 +0800</pubDate>
      <guid>/it/2021/110614-caddy/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;/code/2020/013117-caddy-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Caddy是一款快速，易用的生产型开源Web服务器。有很多特点，可以自行搜索。&lt;/p&gt;&#xA;&lt;p&gt;官网：&lt;a href=&#34;https://caddyserver.com/&#34;&gt;https://caddyserver.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;今天对网站服务器进行了改造，将Nginx换为Caddy，轻松实现了HTTPS和HTTP3(QUIC)。整个过程非常简单。&lt;/p&gt;</description>
    </item>
    <item>
      <title>服务器使用Caddy代替Nginx，本站已支持HTTP3</title>
      <link>/it/2021/110613-caddy/</link>
      <pubDate>Sat, 06 Nov 2021 13:11:49 +0800</pubDate>
      <guid>/it/2021/110613-caddy/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;/code/2020/013117-caddy-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;正将服务器使用的nginx换为caddy原因&#34;&gt;正将服务器使用的Nginx换为Caddy。原因：&lt;/h4&gt;&#xA;&lt;p&gt;1、自动HTTPS，轻松&lt;/p&gt;&#xA;&lt;p&gt;2、配置简单，可API配置&lt;/p&gt;&#xA;&lt;p&gt;3、试图通过它来实现动态域名解析，将它里的Pi3服务器映射出来使用。&lt;/p&gt;&#xA;&lt;p&gt;4、Caddy是Go开发的，支持插件，可以开发出更多实用功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>穷人分布式 思路初探</title>
      <link>/it/2021/110421-server/</link>
      <pubDate>Thu, 04 Nov 2021 21:39:13 +0800</pubDate>
      <guid>/it/2021/110421-server/</guid>
      <description>&lt;p&gt;当用户量到达一定数量时，对服务器的要求增加较大。特别是音频、视频、下载。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../110421-server-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;当前国内家庭宽带普遍较高，100MB、1000MB都很多。找三四个朋友，随便搞个百MB带宽。我们是否能利用这个分散而众多的家庭宽带来提供服务呢？&lt;/p&gt;</description>
    </item>
    <item>
      <title>croc应用：服务器文件上传</title>
      <link>/code/2021/110315-croc/</link>
      <pubDate>Wed, 03 Nov 2021 07:49:57 +0000</pubDate>
      <guid>/code/2021/110315-croc/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/schollz/croc&#34;&gt;https://github.com/schollz/croc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;croc是golang开发的一款跨平台传输工具，基于命令行。&lt;/p&gt;&#xA;&lt;p&gt;几MB的大小，足可以需要的时候下载使用。也可以脚本安装：&lt;code&gt;curl https://getcroc.schollz.com | bash&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;发送端：croc  send  文件名     它会自动给出一个安全编码&lt;/p&gt;</description>
    </item>
    <item>
      <title>Windows下建立SSH服务器</title>
      <link>/it/2021/101220-ssh/</link>
      <pubDate>Tue, 12 Oct 2021 20:41:20 +0800</pubDate>
      <guid>/it/2021/101220-ssh/</guid>
      <description>&lt;p&gt;windows下需要使用第三方软件，windows powershell团队也基于openssh 二次开发了openssh server工具。&lt;/p&gt;&#xA;&lt;p&gt;下载链接为：https://github.com/PowerShell/Win32-OpenSSH/releases&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fyne: 使用中文并打包进二进制文件</title>
      <link>/code/2021/0930-fyne/</link>
      <pubDate>Thu, 30 Sep 2021 14:28:27 +0800</pubDate>
      <guid>/code/2021/0930-fyne/</guid>
      <description>&lt;h4 id=&#34;1-fyne官方工具&#34;&gt;1. fyne官方工具&lt;/h4&gt;&#xA;&lt;p&gt;go get fyne.io/fyne/cmd/fyne&lt;/p&gt;&#xA;&lt;h4 id=&#34;2-将字体转换为go文件&#34;&gt;2. 将字体转换为go文件&lt;/h4&gt;&#xA;&lt;p&gt;fyne bundle Alibaba-PuHuiTi-Medium.ttf &amp;gt; bundle.go&lt;/p&gt;&#xA;&lt;h4 id=&#34;3-创建自定义theme&#34;&gt;3. 创建自定义theme&lt;/h4&gt;&#xA;&lt;p&gt;也就是自定义样式&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// theme.go&#xA;package main&#xA;&#xA;import (&#xA;    &amp;#34;fyne.io/fyne/v2&amp;#34;&#xA;    &amp;#34;fyne.io/fyne/v2/theme&amp;#34;&#xA;&#xA;    &amp;#34;image/color&amp;#34;&#xA;)&#xA;&#xA;type MyTheme struct{}&#xA;&#xA;func (m MyTheme) Font(s fyne.TextStyle) fyne.Resource {&#xA;    return ResourceSourceHanSansTtf&#xA;}&#xA;func (*MyTheme) Color(n fyne.ThemeColorName, v fyne.ThemeVariant) color.Color {&#xA;    return theme.DefaultTheme().Color(n, v)&#xA;}&#xA;&#xA;func (*MyTheme) Icon(n fyne.ThemeIconName) fyne.Resource {&#xA;    return theme.DefaultTheme().Icon(n)&#xA;}&#xA;&#xA;func (*MyTheme) Size(n fyne.ThemeSizeName) float32 {&#xA;    return theme.DefaultTheme().Size(n)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;而我并没有单独做一个包，依然放到main下，即 package main&lt;/p&gt;</description>
    </item>
    <item>
      <title>给Win下的Golang软件加个图标</title>
      <link>/code/2021/0930-res/</link>
      <pubDate>Thu, 30 Sep 2021 08:53:58 +0800</pubDate>
      <guid>/code/2021/0930-res/</guid>
      <description>&lt;p&gt;有些人用&lt;a href=&#34;github.com/akavel/rsrc&#34;&gt;rsrc&lt;/a&gt;，有些人用&lt;a href=&#34;github.com%5Cjosephspurrier%5Cgoversioninfo&#34;&gt;GoVersionInfo&lt;/a&gt;，但我却死活不行。究其原因，估计是产生的syso文件版本问题：因为我用以下这个，它会产生32位版本和64位版本两个文件，而前两个软件，似乎只是产生的32位版本。&lt;/p&gt;&#xA;&lt;p&gt;我的主角是&lt;a href=&#34;https://github.com/tc-hib/go-winres&#34;&gt;go-winres&lt;/a&gt;，使用其实大同小异。&lt;/p&gt;&#xA;&lt;h5 id=&#34;安装&#34;&gt;安装：&lt;/h5&gt;&#xA;&lt;p&gt;go install github.com/tc-hib/go-winres@latest&lt;/p&gt;&#xA;&lt;h5 id=&#34;用法&#34;&gt;用法：&lt;/h5&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;运行 go-winres init ,它将创建 winres 目录&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;修改winres目录下winres.json内容&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;运行 go-winres make 生成syso文件&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;也可以在文件中包含：//go:generate go-winres make &amp;ndash;product-version=git-tag&lt;/p&gt;</description>
    </item>
    <item>
      <title>浏览器开启 QUIC/HTTP/3</title>
      <link>/it/2021/092018-quic/</link>
      <pubDate>Mon, 20 Sep 2021 18:18:45 +0800</pubDate>
      <guid>/it/2021/092018-quic/</guid>
      <description>&lt;p&gt;火狐浏览器访问：about:config&lt;/p&gt;&#xA;&lt;p&gt;启用：network.http.http3.enabled&lt;/p&gt;&#xA;&lt;p&gt;Chrome 浏览器访问：chrome://flags&lt;/p&gt;&#xA;&lt;p&gt;启用：enable-quic&lt;/p&gt;</description>
    </item>
    <item>
      <title>公益项目：儿童书店 【未完，不断更新】</title>
      <link>/teach/2021/091717-book/</link>
      <pubDate>Fri, 17 Sep 2021 17:48:04 +0800</pubDate>
      <guid>/teach/2021/091717-book/</guid>
      <description>&lt;h4 id=&#34;相关链接&#34;&gt;相关链接：&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.sohu.com/a/255841745_292883&#34;&gt;2018-09-24  重庆首家儿童主题书店：为孩子打造一个童梦乐园&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://kuaibao.qq.com/s/20190520A0Q1H900&#34;&gt;除了方所，成都这几个地方更适合阅读，最后一个是王炸&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../091717-book-03.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;儿童书店，不仅仅应该流于形式，不仅仅是“让儿童读书的店”，而应该是一个书的海洋，锻炼和成长的家。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fyne实例</title>
      <link>/code/2021/0820-fyne/</link>
      <pubDate>Fri, 20 Aug 2021 08:25:20 +0800</pubDate>
      <guid>/code/2021/0820-fyne/</guid>
      <description>&lt;p&gt;用fyne做了一个例子，希望用它来完善自己的工具。&lt;/p&gt;&#xA;&lt;p&gt;在win和ubuntu中测试均通过。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../0820-fyne-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;图中的流量表只是一个测试，它将会实时显示网络流量。&lt;/p&gt;&#xA;&lt;p&gt;将添加股市走势信息，如果有交易接口就更好了，就可以解决linux下不能查看、交易的问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang与图表：go-chart显示中文汉字</title>
      <link>/code/2021/0818-chart/</link>
      <pubDate>Wed, 18 Aug 2021 22:29:41 +0800</pubDate>
      <guid>/code/2021/0818-chart/</guid>
      <description>&lt;p&gt;最近在看客户端GUI，需要在界面中显示图表，于是github一通搜索，找到一个符合的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/wcharczuk/go-chart&#34;&gt;go-chart&lt;/a&gt;，它的图表可做为图片保存。&lt;/p&gt;&#xA;&lt;p&gt;使用中发现原不支持中文，又是一通搜索、测试和啃部份源代码。发现方法如下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Qor实作</title>
      <link>/code/2021/0818-qor/</link>
      <pubDate>Wed, 18 Aug 2021 10:26:56 +0800</pubDate>
      <guid>/code/2021/0818-qor/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://getqor.com/source/images/qor-logo.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;之前有看过QOR，但没有具体用于项目中。这次深入学习一点，并实际使用。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://getqor.com/cn&#34;&gt;官网&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://doc.getqor.com&#34;&gt;文档&lt;/a&gt; 我将它下载到了本地，并且中译。在使用中根据自己的理解，添加了一些注释。&lt;/p&gt;</description>
    </item>
    <item>
      <title>再次学习fyne</title>
      <link>/code/2021/081808-fyne/</link>
      <pubDate>Wed, 18 Aug 2021 09:00:10 +0800</pubDate>
      <guid>/code/2021/081808-fyne/</guid>
      <description>&lt;p&gt;寻找一款好用的GUI是每个Go开发者的追求。之前也学习过fyne，没有使用它的主要原因是对中文的支持（能显示，不能输入）。&lt;/p&gt;&#xA;&lt;p&gt;今天再看的时候，发现它已经支持中文输入了。我们毕竟应该用发展的眼光来看所有问题。继续学习…&lt;/p&gt;</description>
    </item>
    <item>
      <title>最近</title>
      <link>/other/2021/0808-zj/</link>
      <pubDate>Sun, 08 Aug 2021 08:34:05 +0800</pubDate>
      <guid>/other/2021/0808-zj/</guid>
      <description>&lt;p&gt;有段时间没有更新了，在做一些实际工作。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;对QOR进行了更深入的研究和应用，用于某个实际的项目中。利用QOR，让整个后台开发还是快不少。&lt;/p&gt;&#xA;&lt;p&gt;不过看起来，它使用数据库的效率不是很高，在后期需要更优化。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Esp32 与 BLE</title>
      <link>/code/2021/0526-esp32/</link>
      <pubDate>Wed, 26 May 2021 22:35:00 +0800</pubDate>
      <guid>/code/2021/0526-esp32/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/api-reference/bluetooth/index.html&#34;&gt;官方资料&lt;/a&gt; 适合先看。 &lt;a href=&#34;https://www.espressif.com/sites/default/files/documentation/esp32_bluetooth_architecture_cn.pdf&#34;&gt;这里还有PDF文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;蓝⽛牙系统分为两种不不同的技术：经典蓝⽛牙 (Classic Bluetooth) 和蓝⽛牙低功耗 (Bluetooth Low Energy)。ESP32 ⽀支持双模蓝⽛牙，即同时⽀支持经典蓝⽛牙和蓝⽛牙低功耗。BLE隶属于蓝牙4.0协议的一部分。&lt;/p&gt;</description>
    </item>
    <item>
      <title>继续EPS32研究</title>
      <link>/code/2021/0524-esp32/</link>
      <pubDate>Mon, 24 May 2021 20:30:51 +0800</pubDate>
      <guid>/code/2021/0524-esp32/</guid>
      <description>&lt;p&gt;需求：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;与蓝牙手环连接，获取运动数据，上传到服务器&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;从服务器上下载音频，保存在本地播放&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;2021.5.24&lt;/p&gt;&#xA;&lt;p&gt;购回一个立体声解码器模块，&lt;a href=&#34;https://learn.adafruit.com/adafruit-i2s-stereo-decoder-uda1334a/pinouts&#34;&gt;I2S UDA1334A&lt;/a&gt;，某宝十几元。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;先试试这个蓝牙播放功能：ESP32 作为蓝牙音频接收端&lt;/p&gt;</description>
    </item>
    <item>
      <title>HFish 蜜罐系统</title>
      <link>/it/2021/0523-hfish/</link>
      <pubDate>Sun, 23 May 2021 21:20:58 +0800</pubDate>
      <guid>/it/2021/0523-hfish/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://hfish.io&#34;&gt;HFish&lt;/a&gt; 是一款基于 Golang 开发的跨平台高交互蜜罐系统&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://hfish.io/static/img/hfishlogo.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;基于Golang，它是跨平台的存在。&lt;a href=&#34;https://hfish.io/download.html&#34;&gt;下载&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;我试了一下Win10平台，解开即用，全中文。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;登陆链接：https:// [ip]:4433/web&#xA;账号：admin&#xA;密码：HFish2021&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>建立自己的网络磁盘 Webdav</title>
      <link>/code/2021/052003-webdav/</link>
      <pubDate>Thu, 20 May 2021 03:02:44 +0800</pubDate>
      <guid>/code/2021/052003-webdav/</guid>
      <description>&lt;p&gt;网络磁盘的好处，在于你可以随时随地,任何一台电脑上修改自己的文件。&lt;/p&gt;&#xA;&lt;p&gt;首先，我利用Pi3在家中，利用电信宽带，安装好webdav的服务。&lt;/p&gt;&#xA;&lt;p&gt;我已经申请好了外网IP。它是动态IP，于是申请绑定了域名。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gin 中间件</title>
      <link>/code/2021/042820-gin/</link>
      <pubDate>Wed, 28 Apr 2021 20:39:06 +0800</pubDate>
      <guid>/code/2021/042820-gin/</guid>
      <description>&lt;h3 id=&#34;无中间件&#34;&gt;无中间件&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA;    //创建一个无中间件路由&#xA;    router := gin.New()&#xA;    router.Run()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;默认中间件&#34;&gt;默认中间件&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA;    // 默认启动方式，包含 Logger、Recovery 中间件&#xA;    router:=gin.Default()&#xA;    router.GET(&amp;#34;/&amp;#34;, func(context *gin.Context) {&#xA;        context.JSON(200,gin.H{&#xA;            &amp;#34;goods_name&amp;#34;:&amp;#34;牛奶&amp;#34;,&#xA;        })&#xA;    })&#xA;    router.Run()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;自定义中间件&#34;&gt;自定义中间件&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;//自定义中间件第1种定义方式&#xA;func CustomRouterMiddle1(c *gin.Context)  {&#xA;&#x9;t := time.Now()&#xA;&#x9;fmt.Println(&amp;#34;我是自定义中间件第1种定义方式---请求之前&amp;#34;)&#xA;&#x9;//在gin上下文中定义一个变量&#xA;&#x9;c.Set(&amp;#34;example&amp;#34;, &amp;#34;CustomRouterMiddle1&amp;#34;)&#xA;&#x9;//请求之前&#xA;&#x9;c.Next()&#xA;&#x9;fmt.Println(&amp;#34;我是自定义中间件第1种定义方式---请求之后&amp;#34;)&#xA;&#x9;//请求之后&#xA;&#x9;//计算整个请求过程耗时&#xA;&#x9;t2 := time.Since(t)&#xA;&#x9;log.Println(t2)&#xA;&#xA;}&#xA;&#xA;//自定义中间件第2种定义方式&#xA;func CustomRouterMiddle2() gin.HandlerFunc{&#xA;&#x9;return func(c *gin.Context) {&#xA;&#x9;&#x9;t := time.Now()&#xA;&#x9;&#x9;fmt.Println(&amp;#34;我是自定义中间件第2种定义方式---请求之前&amp;#34;)&#x9;&#x9;&#xA;&#x9;&#x9;c.Set(&amp;#34;example&amp;#34;, &amp;#34;CustomRouterMiddle2&amp;#34;) //在gin上下文中定义一个变量&#xA;&#x9;&#x9;c.Next()&#xA;&#x9;&#x9;fmt.Println(&amp;#34;我是自定义中间件第2种定义方式---请求之后&amp;#34;)&#xA;&#x9;&#x9;t2 := time.Since(t)&#xA;&#x9;&#x9;log.Println(t2)&#xA;&#x9;}&#xA;}&#xA;&#xA;&#xA;&#xA;func main() {&#xA;&#x9;&#xA;&#x9;r := gin.New()&#xA;&#x9;&#xA;&#x9;//测试时下面两个中间件选择一个，注释一个&#xA;&#x9;r.Use(CustomRouterMiddle1)&#xA;&#x9;r.Use(CustomRouterMiddle2())&#xA;&#xA;&#x9;r.GET(&amp;#34;/test&amp;#34;, func(c *gin.Context) {&#xA;&#x9;&#x9;example := c.MustGet(&amp;#34;example&amp;#34;).(string)&#xA;&#x9;&#x9;log.Println(example)&#xA;&#x9;})&#xA;&#xA;&#x9;// 监听本地8080端口&#xA;&#x9;r.Run(&amp;#34;:8080&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;路由中间件&#34;&gt;路由中间件&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func RouterMiddle1(c *gin.Context)  {&#xA;&#x9;fmt.Println(&amp;#34;我是路由中间件1&amp;#34;)&#xA;}&#xA;&#xA;func RouterMiddle2(c *gin.Context)  {&#xA;&#x9;fmt.Println(&amp;#34;我是路由中间件2&amp;#34;)&#xA;}&#xA;&#xA;func oneRouterMiddleHandle() gin.HandlerFunc{&#xA;&#x9;return func(c *gin.Context) {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;我是业务处理函数&amp;#34;)&#xA;&#x9;}&#xA;}&#xA;&#xA;func main() {&#x9;&#xA;&#x9;router := gin.New() //创建一个无中间件路由&#x9;&#xA;&#x9;router.GET(&amp;#34;/oneRouterMiddle&amp;#34;, RouterMiddle1,RouterMiddle2,oneRouterMiddleHandle()) // 对于每个路由中间件，您可以添加任意数量的路由中间件&#x9;&#xA;&#x9;router.Run()  // 默认监听本地 0.0.0.0:8080 即localhost:8080 或 127.0.0.1:8080&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;github.com/gin-gonic/gin&amp;#34;&#xA;&#x9;&amp;#34;net/http&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;router := gin.Default()&#xA;&#x9;router.GET(&amp;#34;/&amp;#34;, gin.Recovery(), gin.Logger(), func(c *gin.Context) {&#xA;&#x9;&#x9;c.JSON(http.StatusOK, gin.H{&amp;#34;msg&amp;#34;: &amp;#34;single route&amp;#34;})&#xA;&#x9;})&#xA;&#xA;&#x9;router.Run(&amp;#34;:8080&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;路由组中间件&#34;&gt;路由组中间件&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func GroupRouterGoodsMiddle1(c *gin.Context)  {&#xA;&#x9;fmt.Println(&amp;#34;我是goods路由组中间件1&amp;#34;)&#xA;}&#xA;&#xA;func GroupRouterGoodsMiddle2(c *gin.Context) {&#xA;&#x9;fmt.Println(&amp;#34;我是goods路由组中间件2&amp;#34;)&#xA;}&#xA;&#xA;func GroupRouterOrderMiddle1(c *gin.Context) {&#xA;&#x9;fmt.Println(&amp;#34;我是order路由组中间件1&amp;#34;)&#xA;}&#xA;&#xA;func GroupRouterOrderMiddle2(c *gin.Context) {&#xA;&#x9;fmt.Println(&amp;#34;我是order路由组中间件2&amp;#34;)&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;//创建一个无中间件路由&#xA;&#x9;router := gin.New()&#xA;&#x9;router.Use(gin.Logger())&#xA;&#xA;&#x9;//第1种路由组使用方式 可以添加多个处理函数 但是不知道为什么 官方举例的这第一种方式用不了&#xA;&#x9;router.Group(&amp;#34;/goods&amp;#34;, GroupRouterGoodsMiddle1, GroupRouterGoodsMiddle2)&#xA;&#x9;router.GET(&amp;#34;/goods/add&amp;#34;, func(context *gin.Context) {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;/goods/add&amp;#34;)&#xA;&#x9;})&#xA;&#xA;&#xA;&#x9;//第2种路由组使用方式&#xA;&#x9;orderGroup := router.Group(&amp;#34;/order&amp;#34;)&#xA;&#x9;orderGroup.Use(GroupRouterOrderMiddle1, GroupRouterOrderMiddle2)&#xA;&#x9;{&#xA;&#x9;&#x9;orderGroup.GET(&amp;#34;/add&amp;#34;, func(context *gin.Context) {&#xA;&#x9;&#x9;&#x9;fmt.Println(&amp;#34;/order/add&amp;#34;)&#xA;&#xA;&#x9;&#x9;})&#xA;&#xA;&#x9;&#x9;orderGroup.GET(&amp;#34;/del&amp;#34;, func(context *gin.Context) {&#xA;&#x9;&#x9;&#x9;fmt.Println(&amp;#34;/order/del&amp;#34;)&#xA;&#xA;&#x9;&#x9;})&#xA;&#xA;&#x9;&#x9;//orderGroup下再嵌套一个testGroup&#xA;&#x9;&#x9;testGroup:=orderGroup.Group(&amp;#34;/test&amp;#34;, func(context *gin.Context) {&#xA;&#x9;&#x9;&#x9;fmt.Println(&amp;#34;order/test下的中间件&amp;#34;)&#xA;&#x9;&#x9;})&#xA;&#xA;&#x9;&#x9;testGroup.GET(&amp;#34;/test1&amp;#34;, func(context *gin.Context) {&#xA;&#x9;&#x9;&#x9;fmt.Println(&amp;#34;order/test/test1的函数&amp;#34;)&#xA;&#x9;&#x9;})&#xA;&#x9;}&#xA;&#xA;&#x9;router.Run()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;github.com/gin-gonic/gin&amp;#34;&#xA;&#x9;&amp;#34;net/http&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;router := gin.Default()&#xA;&#x9;v1 := router.Group(&amp;#34;/v1&amp;#34;, gin.Logger(), gin.Recovery())&#xA;&#x9;{&#xA;&#x9;&#x9;v1.GET(&amp;#34;/test1&amp;#34;, func(c *gin.Context) {&#xA;&#x9;&#x9;&#x9;c.JSON(http.StatusOK, gin.H{&amp;#34;res&amp;#34;: &amp;#34;test1&amp;#34;})&#xA;&#x9;&#x9;})&#xA;&#x9;&#x9;v1.GET(&amp;#34;/test2&amp;#34;, func(c *gin.Context) {&#xA;&#x9;&#x9;&#x9;c.JSON(http.StatusOK, gin.H{&amp;#34;res&amp;#34;: &amp;#34;test2&amp;#34;})&#xA;&#x9;&#x9;})&#xA;&#x9;}&#xA;&#xA;&#x9;router.Run(&amp;#34;:8080&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;全局中间件&#34;&gt;全局中间件&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func GlobalMiddle(c *gin.Context){&#xA;&#x9;fmt.Println(&amp;#34;我是全局中间件&amp;#34;)&#xA;}&#xA;&#xA;func main() {&#xA;//创建一个无中间件路由&#xA;router := gin.New()&#xA;&#xA;//使用自定义的全局中间件&#xA;router.Use(GlobalMiddle)&#xA;&#xA;router.GET(&amp;#34;/&amp;#34;, func(context *gin.Context) {&#xA;&#x9;fmt.Println(&amp;#34;我是/&amp;#34;)&#xA;})&#xA;&#xA;router.Run()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;github.com/gin-gonic/gin&amp;#34;&#xA;&#x9;&amp;#34;net/http&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;router := gin.Default()&#xA;&#x9;router.Use(func(c *gin.Context) {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;hello middleware&amp;#34;)&#xA;&#x9;})&#xA;&#xA;&#x9;router.GET(&amp;#34;/&amp;#34;, func(c *gin.Context) {&#xA;&#x9;&#x9;c.JSON(http.StatusOK, gin.H{&amp;#34;status&amp;#34;: &amp;#34;OK&amp;#34;})&#xA;&#x9;})&#xA;&#xA;&#x9;router.Run(&amp;#34;:8080&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;执行顺序: 全局中间件 &amp;gt; 路由组中间件 &amp;gt; 路由中间件&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fiber 又一个Golang框架 例</title>
      <link>/code/2021/042819-fiber/</link>
      <pubDate>Wed, 28 Apr 2021 19:55:17 +0800</pubDate>
      <guid>/code/2021/042819-fiber/</guid>
      <description>&lt;h3 id=&#34;i18n&#34;&gt;i18n&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;log&amp;#34;&#xA;&#x9;&amp;#34;strconv&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/BurntSushi/toml&amp;#34;&#xA;&#x9;&amp;#34;github.com/gofiber/fiber/v2&amp;#34;&#xA;&#x9;&amp;#34;github.com/gofiber/template/html&amp;#34;&#xA;&#x9;&amp;#34;github.com/nicksnyder/go-i18n/v2/i18n&amp;#34;&#xA;&#x9;&amp;#34;golang.org/x/text/language&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;// 使用默认语言（英语）创建新的语言包。&#xA;&#x9;bundle := i18n.NewBundle(language.English)&#xA;&#xA;&#x9;// 注册toml unmarshal函数。&#xA;&#x9;bundle.RegisterUnmarshalFunc(&amp;#34;toml&amp;#34;, toml.Unmarshal)&#xA;&#xA;&#x9;// 加载其他语言的翻译。&#xA;&#x9;// 由于我们提供了默认的翻译，因此不需要加载active.en.toml。&#xA;&#x9;bundle.MustLoadMessageFile(&amp;#34;./lang/active.es.toml&amp;#34;)&#xA;&#x9;bundle.MustLoadMessageFile(&amp;#34;./lang/active.ru.toml&amp;#34;)&#xA;&#x9;bundle.MustLoadMessageFile(&amp;#34;./lang/active.zh.toml&amp;#34;)&#xA;&#xA;&#x9;// 通过使用&amp;lt;engine&amp;gt;.new（dir，ext string）传递模板文件夹和模板扩展来创建新引擎&#xA;&#x9;engine := html.New(&amp;#34;./templates&amp;#34;, &amp;#34;.html&amp;#34;)&#xA;&#xA;&#x9;// 在每次渲染时重新加载模板，有利于开发&#xA;&#x9;engine.Reload(true) // Optional. Default: false&#xA;&#xA;    // 创建引擎后，可以将其传递给Fiber的视图引擎&#xA;&#x9;app := fiber.New(fiber.Config{&#xA;&#x9;&#x9;Views: engine,&#xA;&#x9;})&#xA;&#xA;&#x9;// 渲染模板.&#xA;&#x9;app.Get(&amp;#34;/&amp;#34;, func(c *fiber.Ctx) error {&#xA;&#x9;&#x9;lang := c.Query(&amp;#34;lang&amp;#34;)            // 从查询中分析语言&#xA;&#x9;&#x9;accept := c.Get(&amp;#34;Accept-Language&amp;#34;) // 或者，从头解析语言&#xA;&#xA;&#x9;&#x9;// 创建新的定位器&#xA;&#x9;&#x9;localizer := i18n.NewLocalizer(bundle, lang, accept)&#xA;&#xA;&#x9;&#x9;// 设置默认用户名（示例）&#xA;&#x9;&#x9;name := c.Query(&amp;#34;name&amp;#34;)&#xA;&#x9;&#x9;if name == &amp;#34;&amp;#34; {&#xA;&#x9;&#x9;&#x9;name = &amp;#34;Bob&amp;#34;&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;// 设置标题消息.&#xA;&#x9;&#x9;helloPerson := localizer.MustLocalize(&amp;amp;i18n.LocalizeConfig{&#xA;&#x9;&#x9;&#x9;DefaultMessage: &amp;amp;i18n.Message{&#xA;&#x9;&#x9;&#x9;&#x9;ID:    &amp;#34;HelloPerson&amp;#34;,&#xA;&#x9;&#x9;&#x9;&#x9;Other: &amp;#34;Hello {{.Name}}&amp;#34;,&#xA;&#x9;&#x9;&#x9;},&#xA;&#x9;&#x9;&#x9;TemplateData: map[string]string{&#xA;&#x9;&#x9;&#x9;&#x9;&amp;#34;Name&amp;#34;: name,&#xA;&#x9;&#x9;&#x9;},&#xA;&#x9;&#x9;})&#xA;&#xA;&#x9;&#x9;// 分析并设置未读邮件数&#xA;&#x9;&#x9;unreadEmailCount, _ := strconv.ParseInt(c.Query(&amp;#34;unread&amp;#34;), 10, 64)&#xA;&#xA;&#x9;&#x9;myUnreadEmails := localizer.MustLocalize(&amp;amp;i18n.LocalizeConfig{&#xA;&#x9;&#x9;&#x9;DefaultMessage: &amp;amp;i18n.Message{&#xA;&#x9;&#x9;&#x9;&#x9;ID:          &amp;#34;MyUnreadEmails&amp;#34;,&#xA;&#x9;&#x9;&#x9;&#x9;Description: &amp;#34;The number of unread emails I have&amp;#34;,&#xA;&#x9;&#x9;&#x9;&#x9;One:         &amp;#34;I have {{.PluralCount}} unread email.&amp;#34;,&#xA;&#x9;&#x9;&#x9;&#x9;Other:       &amp;#34;I have {{.PluralCount}} unread emails.&amp;#34;,&#xA;&#x9;&#x9;&#x9;},&#xA;&#x9;&#x9;&#x9;PluralCount: unreadEmailCount,&#xA;&#x9;&#x9;})&#xA;&#xA;&#x9;&#x9;personUnreadEmails := localizer.MustLocalize(&amp;amp;i18n.LocalizeConfig{&#xA;&#x9;&#x9;&#x9;DefaultMessage: &amp;amp;i18n.Message{&#xA;&#x9;&#x9;&#x9;&#x9;ID:          &amp;#34;PersonUnreadEmails&amp;#34;,&#xA;&#x9;&#x9;&#x9;&#x9;Description: &amp;#34;The number of unread emails a person has&amp;#34;,&#xA;&#x9;&#x9;&#x9;&#x9;One:         &amp;#34;{{.Name}} has {{.UnreadEmailCount}} unread email.&amp;#34;,&#xA;&#x9;&#x9;&#x9;&#x9;Other:       &amp;#34;{{.Name}} has {{.UnreadEmailCount}} unread emails.&amp;#34;,&#xA;&#x9;&#x9;&#x9;},&#xA;&#x9;&#x9;&#x9;PluralCount: unreadEmailCount,&#xA;&#x9;&#x9;&#x9;TemplateData: map[string]interface{}{&#xA;&#x9;&#x9;&#x9;&#x9;&amp;#34;Name&amp;#34;:             name,&#xA;&#x9;&#x9;&#x9;&#x9;&amp;#34;UnreadEmailCount&amp;#34;: unreadEmailCount,&#xA;&#x9;&#x9;&#x9;},&#xA;&#x9;&#x9;})&#xA;&#xA;&#x9;&#x9;// 返回呈现模板.&#xA;&#x9;&#x9;return c.Render(&amp;#34;index&amp;#34;, fiber.Map{&#xA;&#x9;&#x9;&#x9;&amp;#34;Title&amp;#34;: helloPerson,&#xA;&#x9;&#x9;&#x9;&amp;#34;Paragraphs&amp;#34;: []string{&#xA;&#x9;&#x9;&#x9;&#x9;myUnreadEmails,&#xA;&#x9;&#x9;&#x9;&#x9;personUnreadEmails,&#xA;&#x9;&#x9;&#x9;},&#xA;&#x9;&#x9;})&#xA;&#x9;})&#xA;&#xA;&#x9;log.Fatal(app.Listen(&amp;#34;:3000&amp;#34;))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;文件上传&#34;&gt;文件上传&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;log&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/gofiber/fiber/v2&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;app := fiber.New()&#xA;&#xA;&#x9;app.Post(&amp;#34;/&amp;#34;, func(c *fiber.Ctx) error {&#xA;&#x9;&#x9;// 从表单字段“document”获取第一个文件:&#xA;&#x9;&#x9;file, err := c.FormFile(&amp;#34;document&amp;#34;)&#xA;&#x9;&#x9;if err != nil {&#xA;&#x9;&#x9;&#x9;return err&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;return c.SaveFile(file, fmt.Sprintf(&amp;#34;./%s&amp;#34;, file.Filename))&#xA;&#x9;})&#xA;&#xA;&#x9;log.Fatal(app.Listen(&amp;#34;:3000&amp;#34;))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;log&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/gofiber/fiber/v2&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;app := fiber.New()&#xA;&#xA;&#x9;app.Post(&amp;#34;/&amp;#34;, func(c *fiber.Ctx) error {&#xA;&#x9;&#x9;// 解析多部分表单:&#xA;&#x9;&#x9;form, err := c.MultipartForm()&#xA;&#x9;&#x9;if err != nil {&#xA;&#x9;&#x9;&#x9;return err&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;// =&amp;gt; *multipart.Form&#xA;&#xA;        // 从“documents”键获取所有文件&#xA;&#x9;&#x9;files := form.File[&amp;#34;documents&amp;#34;]&#xA;&#x9;&#x9;// =&amp;gt; []*multipart.FileHeader&#xA;&#xA;&#x9;&#x9;// 循环浏览文件 :&#xA;&#x9;&#x9;for _, file := range files {&#xA;&#x9;&#x9;&#x9;fmt.Println(file.Filename, file.Size, file.Header[&amp;#34;Content-Type&amp;#34;][0])&#xA;&#x9;&#x9;&#x9;// =&amp;gt; &amp;#34;tutorial.pdf&amp;#34; 360641 &amp;#34;application/pdf&amp;#34;&#xA;&#xA;&#x9;&#x9;&#x9;err := c.SaveFile(file, fmt.Sprintf(&amp;#34;./%s&amp;#34;, file.Filename))&#xA;&#xA;&#x9;&#x9;&#x9;if err != nil {&#xA;&#x9;&#x9;&#x9;&#x9;return err&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;return nil&#xA;&#x9;})&#xA;&#xA;&#x9;log.Fatal(app.Listen(&amp;#34;:3000&amp;#34;))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;websocket&#34;&gt;websocket&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;log&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/gofiber/fiber/v2&amp;#34;&#xA;&#x9;&amp;#34;github.com/gofiber/websocket/v2&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;app := fiber.New()&#xA;&#xA;&#x9;// Optional middleware&#xA;&#x9;app.Use(&amp;#34;/ws&amp;#34;, func(c *fiber.Ctx) error {&#xA;&#x9;&#x9;if c.Get(&amp;#34;host&amp;#34;) == &amp;#34;localhost:3000&amp;#34; {&#xA;&#x9;&#x9;&#x9;c.Locals(&amp;#34;Host&amp;#34;, &amp;#34;Localhost:3000&amp;#34;)&#xA;&#x9;&#x9;&#x9;return c.Next()&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;return c.Status(403).SendString(&amp;#34;Request origin not allowed&amp;#34;)&#xA;&#x9;})&#xA;&#xA;&#x9;// Upgraded websocket request&#xA;&#x9;app.Get(&amp;#34;/ws&amp;#34;, websocket.New(func(c *websocket.Conn) {&#xA;&#x9;&#x9;fmt.Println(c.Locals(&amp;#34;Host&amp;#34;)) // &amp;#34;Localhost:3000&amp;#34;&#xA;&#x9;&#x9;for {&#xA;&#x9;&#x9;&#x9;mt, msg, err := c.ReadMessage()&#xA;&#x9;&#x9;&#x9;if err != nil {&#xA;&#x9;&#x9;&#x9;&#x9;log.Println(&amp;#34;read:&amp;#34;, err)&#xA;&#x9;&#x9;&#x9;&#x9;break&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;recv: %s&amp;#34;, msg)&#xA;&#x9;&#x9;&#x9;err = c.WriteMessage(mt, msg)&#xA;&#x9;&#x9;&#x9;if err != nil {&#xA;&#x9;&#x9;&#x9;&#x9;log.Println(&amp;#34;write:&amp;#34;, err)&#xA;&#x9;&#x9;&#x9;&#x9;break&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}))&#xA;&#xA;&#x9;// ws://localhost:3000/ws&#xA;&#x9;log.Fatal(app.Listen(&amp;#34;:3000&amp;#34;))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Fiber 又一个Golang框架</title>
      <link>/code/2021/042717-fiber/</link>
      <pubDate>Tue, 27 Apr 2021 17:55:58 +0800</pubDate>
      <guid>/code/2021/042717-fiber/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://gofiber.io/assets/images/logo.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Fiber 是一个受 Express 启发的 web 框架，构建在 Go 最快的 HTTP 引擎 Fasthttp 上。旨在 为 快速 开发提供方便，同时考虑 零内存分配 和 性能。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://gofiber.io/&#34;&gt;官网&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.gofiber.io/&#34;&gt;文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/gofiber/fiber&#34;&gt;github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/gofiber/recipes&#34;&gt;示例&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://gofiber.io/assets/images/benchmark-pipeline.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;路由&#34;&gt;路由&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;app.Get(&amp;#34;/&amp;#34;, func (c *fiber.Ctx) error {&#xA;    return c.SendString(&amp;#34;GET request&amp;#34;)&#xA;})&#xA;&#xA;app.Get(&amp;#34;/:param&amp;#34;, func (c *fiber.Ctx) error {&#xA;    return c.SendString(&amp;#34;param: &amp;#34; + c.Params(&amp;#34;param&amp;#34;))&#xA;})&#xA;&#xA;app.Post(&amp;#34;/&amp;#34;, func (c *fiber.Ctx) error {&#xA;    return c.SendString(&amp;#34;POST request&amp;#34;)&#xA;})&#xA;&#xA;app.Get(&amp;#34;/:name?&amp;#34;, func(c *fiber.Ctx) error {&#xA;  if c.Params(&amp;#34;name&amp;#34;) != &amp;#34;&amp;#34; {&#xA;    return c.SendString(&amp;#34;Hello &amp;#34; + c.Params(&amp;#34;name&amp;#34;))&#xA;  }&#xA;  return c.SendString(&amp;#34;Where is john?&amp;#34;)&#xA;})&#xA;&#xA;// GET http://localhost:3000/api/user/john&#xA;app.Get(&amp;#34;/api/*&amp;#34;, func(c *fiber.Ctx) error {&#xA;  return c.SendString(&amp;#34;API path: &amp;#34; + c.Params(&amp;#34;*&amp;#34;))&#xA;  // =&amp;gt; API path: user/john&#xA;})&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;静态文件&#34;&gt;静态文件&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;app.Static(&amp;#34;/&amp;#34;, &amp;#34;./public&amp;#34;)&#xA;&#xA;app.Static(&amp;#34;/static&amp;#34;, &amp;#34;./public&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;api&#34;&gt;API&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;app.Get(&amp;#34;/api/posts&amp;#34;, func (c *fiber.Ctx) error {&#xA;    posts := getPosts() // your logic&#xA;    if len(posts) == 0 {&#xA;        return c.Status(404).JSON(&amp;amp;fiber.Map{&#xA;            &amp;#34;success&amp;#34;: false,&#xA;            &amp;#34;error&amp;#34;:   &amp;#34;There are no posts!&amp;#34;,&#xA;        })&#xA;    }&#xA;    return c.JSON(&amp;amp;fiber.Map{&#xA;        &amp;#34;success&amp;#34;: true,&#xA;        &amp;#34;posts&amp;#34;:   posts,&#xA;    })&#xA;})&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;中间件&#34;&gt;中间件&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.gofiber.io/api/middleware&#34;&gt;看起来不少的中间件&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang插件技术</title>
      <link>/code/2021/042709-plugin/</link>
      <pubDate>Tue, 27 Apr 2021 09:02:42 +0800</pubDate>
      <guid>/code/2021/042709-plugin/</guid>
      <description>&lt;p&gt;有时候设计不能一簇而就，在主体完成后，完善模块功能时，就会用到插件技术。&lt;/p&gt;&#xA;&lt;p&gt;通过&lt;a href=&#34;https://blog.csdn.net/qq_42038407/article/details/108925286&#34;&gt;网友的文章&lt;/a&gt;学习学习。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;: 插件技术只能在Linux下， windows 下 Golang不支持动态库。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;time&amp;#34;&#xA;)&#xA;&#xA;// main 主体程序入口&#xA;func main() {&#xA;&#x9;nowSecond := time.Now().Second()&#xA;&#x9;doPrint(nowSecond)&#xA;&#x9;fmt.Println(&amp;#34;Process Stop ========&amp;#34;)&#xA;}&#xA;&#xA;// 执行打印操作&#xA;func doPrint(nowSecond int) {&#xA;&#x9;if nowSecond%2 == 0 {&#xA;&#x9;&#x9;printWorld() //偶数&#xA;&#x9;} else {&#xA;&#x9;&#x9;printHello() //奇数&#xA;&#x9;}&#xA;}&#xA;&#xA;// 执行打印hello&#xA;func printHello() {&#xA;&#x9;fmt.Println(&amp;#34;hello&amp;#34;)&#xA;}&#xA;&#xA;// 执行打印world&#xA;func printWorld() {&#xA;&#x9;fmt.Println(&amp;#34;world&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;以上代码，实现不断显示字符串&lt;/p&gt;</description>
    </item>
    <item>
      <title>推荐工具：VMOS 虚拟大师</title>
      <link>/it/2021/042108-vmos/</link>
      <pubDate>Wed, 21 Apr 2021 08:25:45 +0800</pubDate>
      <guid>/it/2021/042108-vmos/</guid>
      <description>&lt;p&gt;使用觉得比较好，将相关介绍摘抄如下。VMOS Pro当前版本1.2。&lt;/p&gt;&#xA;&lt;p&gt;官方网址：http://www.vmos.cn/&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../042108-vmos-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;VMOS（虚拟大师）是一款以Virtual Machine(简称VM，即虚拟机)技术为主的APP(安卓应用软件） 。通过VM技术，把开源的安卓系统(支持任意版本)，无需root，以普通应用安装的形式运行到任意版本的linux或安卓系统上。&#xA;即通过一个应用运行一个完整的安卓系统，且不受宿主系统(手机上安卓系统)的限制。类似于PC上的VMWare，OS in OS。可定制操作系统版本、功能。定制的操作系统拥有root权限，权限不会涉及宿主系统的安全问题。&#xA;VMOS可为企业定制安全的系统级服务，也可以为发烧友用户提供定制ROM的需求，更为开发者提供模拟任意操作系统做适配提供方便 。&lt;/p&gt;</description>
    </item>
    <item>
      <title>网站回来了</title>
      <link>/other/2021/042108-other/</link>
      <pubDate>Wed, 21 Apr 2021 08:18:07 +0800</pubDate>
      <guid>/other/2021/042108-other/</guid>
      <description>&lt;p&gt;网站出现的断断续续问题，原来是域名备案失效。经过重新备案，已经恢复使用。&lt;/p&gt;&#xA;&lt;p&gt;相关功能也逐步恢复中&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go package main下多个文件</title>
      <link>/code/2021/042103-main/</link>
      <pubDate>Wed, 21 Apr 2021 03:07:14 +0800</pubDate>
      <guid>/code/2021/042103-main/</guid>
      <description>&lt;p&gt;补充一个golang知识点。&lt;/p&gt;&#xA;&lt;p&gt;个人洁癖，不想建立太多目录，喜欢把文件有序的放在同一个目录下。当项目越来越大，为了便于管理就会按功能拆分为多个文件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>GORM学习摘要</title>
      <link>/code/2021/041918-gorm/</link>
      <pubDate>Mon, 19 Apr 2021 18:34:50 +0800</pubDate>
      <guid>/code/2021/041918-gorm/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://gorm.io/zh_CN/docs/index.html&#34;&gt;官方中文文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;安装&#34;&gt;安装&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go get -u gorm.io/gorm&#xA;go get -u gorm.io/driver/sqlite&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;快速hello&#34;&gt;快速Hello&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;  &amp;#34;gorm.io/gorm&amp;#34;&#xA;  &amp;#34;gorm.io/driver/sqlite&amp;#34;&#xA;)&#xA;&#xA;type Product struct {&#xA;  gorm.Model&#xA;  Code  string&#xA;  Price uint&#xA;}&#xA;&#xA;func main() {&#xA;  db, err := gorm.Open(sqlite.Open(&amp;#34;test.db&amp;#34;), &amp;amp;gorm.Config{})&#xA;  if err != nil {&#xA;    panic(&amp;#34;failed to connect database&amp;#34;)&#xA;  }&#xA;&#xA;  // 迁移 schema&#xA;  db.AutoMigrate(&amp;amp;Product{})&#xA;&#xA;  // Create&#xA;  db.Create(&amp;amp;Product{Code: &amp;#34;D42&amp;#34;, Price: 100})&#xA;&#xA;  // Read&#xA;  var product Product&#xA;  db.First(&amp;amp;product, 1) // 根据整形主键查找&#xA;  db.First(&amp;amp;product, &amp;#34;code = ?&amp;#34;, &amp;#34;D42&amp;#34;) // 查找 code 字段值为 D42 的记录&#xA;&#xA;  // Update - 将 product 的 price 更新为 200&#xA;  db.Model(&amp;amp;product).Update(&amp;#34;Price&amp;#34;, 200)&#xA;  // Update - 更新多个字段&#xA;  db.Model(&amp;amp;product).Updates(Product{Price: 200, Code: &amp;#34;F42&amp;#34;}) // 仅更新非零值字段&#xA;  db.Model(&amp;amp;product).Updates(map[string]interface{}{&amp;#34;Price&amp;#34;: 200, &amp;#34;Code&amp;#34;: &amp;#34;F42&amp;#34;})&#xA;&#xA;  // Delete - 删除 product&#xA;  db.Delete(&amp;amp;product, 1)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;看示例的增删改查很简单。&lt;/p&gt;</description>
    </item>
    <item>
      <title>发挥废旧平板/手机余热：把平板作为电脑的扩展屏</title>
      <link>/it/2021/041409-exp/</link>
      <pubDate>Wed, 14 Apr 2021 09:59:54 +0800</pubDate>
      <guid>/it/2021/041409-exp/</guid>
      <description>&lt;p&gt;作为开发人员，有时双屏都不够用。而且传统的显示器还占桌面空间，桌面上乱七八糟。&lt;/p&gt;&#xA;&lt;p&gt;电子时代，几乎家家户户都有多余的手机和平板。电子产品的更新换代太快了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>树莓派 Pi4从USB启动</title>
      <link>/it/2021/033021-pi/</link>
      <pubDate>Tue, 30 Mar 2021 21:46:39 +0800</pubDate>
      <guid>/it/2021/033021-pi/</guid>
      <description>&lt;p&gt;Pi上的tf卡，速度是有限的。自从Pi4出来，使用USB3，大家就盼着用USB作为启动，抛弃慢带的tf。&lt;/p&gt;&#xA;&lt;p&gt;今天有点时间，试了试，将手上的SSD优盘作为启动，完全可以不要TF卡了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>最近网站遇到的问题</title>
      <link>/it/2021/032921-wt/</link>
      <pubDate>Mon, 29 Mar 2021 21:38:35 +0800</pubDate>
      <guid>/it/2021/032921-wt/</guid>
      <description>&lt;p&gt;现象：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;浏览器打开通过域名访问，显示：连接被重置。多次刷新后有机会打开，没有任何规律。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;为了排除故障，制作了最简单的Web服务器，发现：&lt;/p&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;浏览器打开时，服务器端显示多次访问记录。&lt;/p&gt;</description>
    </item>
    <item>
      <title>GoAdmin</title>
      <link>/code/2021/031715-goadmin/</link>
      <pubDate>Wed, 17 Mar 2021 15:37:16 +0800</pubDate>
      <guid>/code/2021/031715-goadmin/</guid>
      <description>&lt;p&gt;GoAdmin 是一个基于 golang 面向生产的数据可视化管理平台搭建框架，可以让你使用简短的代码在极短时间内搭建起一个管理后台。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://doc.go-admin.cn/zh/&#34;&gt;官方文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/GoAdminGroup/go-admin&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/GoAdminGroup/example/blob/master/README_CN.md&#34;&gt;简单上手实例&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;直接点先看看示例&#34;&gt;直接点先看看示例：&lt;/h3&gt;&#xA;&lt;p&gt;使用模块go module加载依赖&lt;/p&gt;</description>
    </item>
    <item>
      <title>GLIBC 没找到的解决办法</title>
      <link>/it/2021/030210-gblic/</link>
      <pubDate>Tue, 02 Mar 2021 10:50:11 +0800</pubDate>
      <guid>/it/2021/030210-gblic/</guid>
      <description>&lt;p&gt;在本机编译的Go程序，放到服务器上总是出错，提示：　/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32&amp;rsquo; not found。&lt;/p&gt;&#xA;&lt;p&gt;cd /usr/local/&lt;/p&gt;&#xA;&lt;p&gt;wget &lt;a href=&#34;http://ftp.gnu.org/gnu/glibc/glibc-2&#34;&gt;http://ftp.gnu.org/gnu/glibc/glibc-2&lt;/a&gt;.３２.tar.gz&lt;/p&gt;&#xA;&lt;p&gt;tar -zxvf glibc-2.32.tar.gz&lt;/p&gt;&#xA;&lt;p&gt;sudo apt install gawk bison (不确定是否必须)&lt;/p&gt;&#xA;&lt;p&gt;mkdir build&lt;/p&gt;&#xA;&lt;p&gt;cd build&lt;/p&gt;&#xA;&lt;p&gt;../configure &amp;ndash;prefix=/usr&lt;/p&gt;&#xA;&lt;p&gt;make&lt;/p&gt;&#xA;&lt;p&gt;make install&lt;/p&gt;&#xA;&lt;p&gt;注意：注意：注意： 这样确实问题解决了，但是，需要原来so文件的程序却出错了，导致系统问题。所以还需要后续的解决，也不能用于远程解决问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang库：go-app 续：实例</title>
      <link>/code/2021/030117-goapp/</link>
      <pubDate>Mon, 01 Mar 2021 17:23:21 +0800</pubDate>
      <guid>/code/2021/030117-goapp/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;io/ioutil&amp;#34;&#xA;&#x9;&amp;#34;net/http&amp;#34;&#xA;&#x9;&amp;#34;net/url&amp;#34;&#xA;&#x9;&amp;#34;strconv&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/maxence-charriere/go-app/v7/pkg/app&amp;#34;&#xA;)&#xA;&#xA;// 线程调用 -------------------------------------------------------&#xA;&#xA;type httpCall struct {&#xA;&#x9;app.Compo&#xA;&#x9;response string&#xA;}&#xA;&#xA;func (c *httpCall) Render() app.UI {&#xA;&#x9;return app.Div().Body(&#xA;&#x9;&#x9;app.H1().&#xA;&#x9;&#x9;&#x9;Class(&amp;#34;title&amp;#34;).&#xA;&#x9;&#x9;&#x9;Text(&amp;#34;HTTP Call&amp;#34;),&#xA;&#xA;&#x9;&#x9;app.H2().Text(&amp;#34;URL:&amp;#34;),&#xA;&#x9;&#x9;app.Input().&#xA;&#x9;&#x9;&#x9;Placeholder(&amp;#34;Enter an URL&amp;#34;).&#xA;&#x9;&#x9;&#x9;OnChange(c.OnURLChange),&#xA;&#xA;&#x9;&#x9;app.H2().Text(&amp;#34;Response:&amp;#34;),&#xA;&#x9;&#x9;app.P().Text(c.response),&#xA;&#x9;)&#xA;}&#xA;&#xA;func (c *httpCall) OnURLChange(ctx app.Context, e app.Event) {&#xA;&#x9;c.response = &amp;#34;&amp;#34;&#xA;&#x9;c.Update()&#xA;&#xA;&#x9;url := ctx.JSSrc.Get(&amp;#34;value&amp;#34;).String()&#xA;&#x9;go c.doRequest(url)&#xA;}&#xA;&#xA;func (c *httpCall) doRequest(url string) {&#xA;&#x9;r, err := http.Get(url)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;c.updateResponse(err.Error())&#xA;&#x9;&#x9;return&#xA;&#x9;}&#xA;&#x9;defer r.Body.Close()&#xA;&#xA;&#x9;b, err := ioutil.ReadAll(r.Body)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;c.updateResponse(err.Error())&#xA;&#x9;&#x9;return&#xA;&#x9;}&#xA;&#xA;&#x9;c.updateResponse(string(b))&#xA;}&#xA;&#xA;func (c *httpCall) updateResponse(res string) {&#xA;&#x9;app.Dispatch(func() { // 确保响应字段在UI goroutine上更新&#xA;&#x9;&#x9;c.response = res&#xA;&#x9;&#x9;c.Update()&#xA;&#x9;})&#xA;}&#xA;&#xA;// 选择 --------------------------------------------------------------------------&#xA;&#xA;type ShowSelect struct {&#xA;&#x9;app.Compo&#xA;&#x9;option string&#xA;}&#xA;&#xA;func (s *ShowSelect) Render() app.UI {&#xA;&#x9;return app.Div().Body(&#xA;&#x9;&#x9;app.Main().Body(&#xA;&#x9;&#x9;&#x9;app.H1().Body(&#xA;&#x9;&#x9;&#x9;&#x9;app.If(s.option == &amp;#34;&amp;#34;,&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;app.Text(&amp;#34;请选择!&amp;#34;),&#xA;&#x9;&#x9;&#x9;&#x9;).Else(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;app.Text(&amp;#34;你选择了 &amp;#34;+s.option),&#xA;&#x9;&#x9;&#x9;&#x9;),&#xA;&#x9;&#x9;&#x9;),&#xA;&#x9;&#x9;),&#xA;&#x9;&#x9;app.Select().Body(&#xA;&#x9;&#x9;&#x9;app.Option().Body(&#xA;&#x9;&#x9;&#x9;&#x9;app.Text(&amp;#34;苹果&amp;#34;),&#xA;&#x9;&#x9;&#x9;),&#xA;&#x9;&#x9;&#x9;app.Option().Body(&#xA;&#x9;&#x9;&#x9;&#x9;app.Text(&amp;#34;橙子&amp;#34;),&#xA;&#x9;&#x9;&#x9;),&#xA;&#x9;&#x9;&#x9;app.Option().Body(&#xA;&#x9;&#x9;&#x9;&#x9;app.Text(&amp;#34;香蕉&amp;#34;),&#xA;&#x9;&#x9;&#x9;),&#xA;&#x9;&#x9;).OnChange(s.OnSelectChange),&#xA;&#x9;)&#xA;}&#xA;&#xA;func (s *ShowSelect) OnSelectChange(ctx app.Context, e app.Event) {&#xA;&#x9;s.option = ctx.JSSrc.Get(&amp;#34;value&amp;#34;).String()&#xA;&#x9;s.Update()&#xA;}&#xA;&#xA;// 判断 -------------------------------------------------------------&#xA;&#xA;type ScoreUI struct {&#xA;&#x9;app.Compo&#xA;&#x9;score int&#xA;}&#xA;&#xA;func (c *ScoreUI) Render() app.UI {&#xA;&#x9;return app.Div().Body(&#xA;&#x9;&#x9;app.If(c.score &amp;gt;= 90,&#xA;&#x9;&#x9;&#x9;app.H1().&#xA;&#x9;&#x9;&#x9;&#x9;Style(&amp;#34;color&amp;#34;, &amp;#34;green&amp;#34;).&#xA;&#x9;&#x9;&#x9;&#x9;Body(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;app.Text(&amp;#34;优!&amp;#34;),&#xA;&#x9;&#x9;&#x9;&#x9;),&#xA;&#x9;&#x9;).ElseIf(c.score &amp;gt;= 60,&#xA;&#x9;&#x9;&#x9;app.H1().&#xA;&#x9;&#x9;&#x9;&#x9;Style(&amp;#34;color&amp;#34;, &amp;#34;orange&amp;#34;).&#xA;&#x9;&#x9;&#x9;&#x9;Body(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;app.Text(&amp;#34;良!&amp;#34;),&#xA;&#x9;&#x9;&#x9;&#x9;),&#xA;&#x9;&#x9;).Else(&#xA;&#x9;&#x9;&#x9;app.H1().&#xA;&#x9;&#x9;&#x9;&#x9;Style(&amp;#34;color&amp;#34;, &amp;#34;red&amp;#34;).&#xA;&#x9;&#x9;&#x9;&#x9;Body(&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;app.Text(&amp;#34;差!&amp;#34;),&#xA;&#x9;&#x9;&#x9;&#x9;),&#xA;&#x9;&#x9;),&#xA;&#x9;&#x9;app.Input().&#xA;&#x9;&#x9;&#x9;Value(c.score).&#xA;&#x9;&#x9;&#x9;Placeholder(&amp;#34;Input your score?&amp;#34;).&#xA;&#x9;&#x9;&#x9;AutoFocus(true).&#xA;&#x9;&#x9;&#x9;OnChange(c.OnInputChange),&#xA;&#x9;)&#xA;}&#xA;&#xA;func (c *ScoreUI) OnInputChange(ctx app.Context, e app.Event) {&#xA;&#x9;score, _ := strconv.ParseUint(ctx.JSSrc.Get(&amp;#34;value&amp;#34;).String(), 10, 32)&#xA;&#x9;c.score = int(score)&#xA;&#x9;c.Update()&#xA;}&#xA;&#xA;// 列表 -------------------------------------------------------------&#xA;&#xA;type RangeUI struct {&#xA;&#x9;app.Compo&#xA;&#x9;name string&#xA;}&#xA;&#xA;func (*RangeUI) Render() app.UI {&#xA;&#x9;langs := []string{&amp;#34;Go&amp;#34;, &amp;#34;JavaScript&amp;#34;, &amp;#34;Python&amp;#34;, &amp;#34;C&amp;#34;}&#xA;&#x9;return app.Ul().Body(&#xA;&#x9;&#x9;app.Range(langs).Slice(func(i int) app.UI {&#xA;&#x9;&#x9;&#x9;return app.Li().Body(&#xA;&#x9;&#x9;&#x9;&#x9;app.Text(langs[i]),&#xA;&#x9;&#x9;&#x9;)&#xA;&#x9;&#x9;}),&#xA;&#x9;)&#xA;}&#xA;&#xA;// 上下文菜单 -------------------------------------------------------------&#xA;&#xA;type ContextMenuUI struct {&#xA;&#x9;app.Compo&#xA;&#x9;name string&#xA;}&#xA;&#xA;func (c *ContextMenuUI) Render() app.UI {&#xA;&#x9;return app.Div().Body(&#xA;&#x9;&#x9;app.Text(&amp;#34;鼠标右键看菜单&amp;#34;),&#xA;&#x9;).OnContextMenu(c.OnContextMenu)&#xA;}&#xA;&#xA;func (*ContextMenuUI) OnContextMenu(ctx app.Context, e app.Event) {&#xA;&#x9;e.PreventDefault()&#xA;&#xA;&#x9;app.NewContextMenu(&#xA;&#x9;&#x9;app.MenuItem().&#xA;&#x9;&#x9;&#x9;Label(&amp;#34;item 1&amp;#34;).&#xA;&#x9;&#x9;&#x9;OnClick(func(ctx app.Context, e app.Event) {&#xA;&#x9;&#x9;&#x9;&#x9;fmt.Println(&amp;#34;item 1 clicked&amp;#34;)&#xA;&#x9;&#x9;&#x9;}),&#xA;&#x9;&#x9;app.MenuItem().Separator(),&#xA;&#x9;&#x9;app.MenuItem().&#xA;&#x9;&#x9;&#x9;Label(&amp;#34;item 2&amp;#34;).&#xA;&#x9;&#x9;&#x9;OnClick(func(ctx app.Context, e app.Event) {&#xA;&#x9;&#x9;&#x9;&#x9;fmt.Println(&amp;#34;item 2 clicked&amp;#34;)&#xA;&#x9;&#x9;&#x9;}),&#xA;&#x9;)&#xA;}&#xA;&#xA;// 生命周期 -------------------------------------------------------------&#xA;&#xA;type Foo struct {&#xA;&#x9;app.Compo&#xA;}&#xA;&#xA;func (*Foo) Render() app.UI {&#xA;&#x9;return app.P().Body(&#xA;&#x9;&#x9;app.Text(&amp;#34;Hello World&amp;#34;),&#xA;&#x9;)&#xA;}&#xA;&#xA;func (*Foo) OnMount() {&#xA;&#x9;fmt.Print(&amp;#34;component mounted&amp;#34;)&#xA;}&#xA;&#xA;func (*Foo) OnNav(u *url.URL) {&#xA;&#x9;fmt.Print(&amp;#34;component navigated:&amp;#34;, u)&#xA;}&#xA;&#xA;func (*Foo) OnDismount() {&#xA;&#x9;fmt.Print(&amp;#34;component dismounted&amp;#34;)&#xA;}&#xA;&#xA;//-------------------------------------------------------------&#xA;&#xA;func main() {&#xA;&#x9;app.Route(&amp;#34;/&amp;#34;, &amp;amp;httpCall{})       //线程调用&#xA;&#x9;app.Route(&amp;#34;/1&amp;#34;, &amp;amp;ShowSelect{})    //选择&#xA;&#x9;app.Route(&amp;#34;/2&amp;#34;, &amp;amp;ScoreUI{})       //判断&#xA;&#x9;app.Route(&amp;#34;/3&amp;#34;, &amp;amp;RangeUI{})       //列表&#xA;&#x9;app.Route(&amp;#34;/4&amp;#34;, &amp;amp;ContextMenuUI{}) //上下文菜单&#xA;&#x9;app.Route(&amp;#34;/5&amp;#34;, &amp;amp;Foo{})           //生命周期&#xA;&#x9;app.Run()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;../030117-goapp-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python 实现数字图片盲水印（隐水印）</title>
      <link>/code/2021/030110-pic/</link>
      <pubDate>Mon, 01 Mar 2021 10:55:30 +0800</pubDate>
      <guid>/code/2021/030110-pic/</guid>
      <description>&lt;p&gt;开源代码：　https://github.com/guofei9987/blind_watermark&lt;/p&gt;&#xA;&lt;p&gt;安装：　pip install blind-watermark&lt;/p&gt;&#xA;&lt;p&gt;作者的文档：　https://github.com/guofei9987/blind_watermark/blob/master/README_cn.md&lt;/p&gt;&#xA;&lt;p&gt;原图：&#xA;&lt;img src=&#34;../030110-pic-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;加过水印：&#xA;&lt;img src=&#34;../030110-pic-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;看起来效果不错，提交图片的时候可以用这个。&lt;/p&gt;&#xA;&lt;h3 id=&#34;使用&#34;&gt;使用&lt;/h3&gt;&#xA;&lt;p&gt;它需要安装pywt: pip install PyWavelets&lt;/p&gt;&#xA;&lt;h4 id=&#34;嵌入水印&#34;&gt;嵌入水印&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;from blind_watermark import WaterMark&#xA;&#xA;bwm1 = WaterMark(password_wm=1, password_img=1)&#xA;# 读取原图&#xA;bwm1.read_img(&amp;#39;pic/原图.jpg&amp;#39;)&#xA;# 读取水印&#xA;bwm1.read_wm(&amp;#39;pic/水印.png&amp;#39;)&#xA;# 打上盲水印&#xA;bwm1.embed(&amp;#39;output/打上水印的图.png&amp;#39;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;提取水印&#34;&gt;提取水印&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;bwm1 = WaterMark(password_wm=1, password_img=1)&#xA;# 注意需要设定水印的长宽wm_shape&#xA;bwm1.extract(filename=&amp;#39;output/打上水印的图.png&amp;#39;, wm_shape=(128, 128), out_wm_name=&amp;#39;output/解出的水印.png&amp;#39;, )&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;####　嵌入字符&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang库：go-app</title>
      <link>/code/2021/022710-goapp/</link>
      <pubDate>Sat, 27 Feb 2021 10:26:26 +0800</pubDate>
      <guid>/code/2021/022710-goapp/</guid>
      <description>&lt;p&gt;Go -app是一个使用Go编程语言和WebAssembly构建渐进式web应用程序(PWA)的包。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://go-app.dev/reference&#34;&gt;这里有详细的官方文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;看起来手机和电脑主流浏览器都支持（Chrome Edge Firefox Opera Safari）&lt;/p&gt;</description>
    </item>
    <item>
      <title>TypeScript 仅入门</title>
      <link>/code/2021/022709-typescript/</link>
      <pubDate>Sat, 27 Feb 2021 09:09:59 +0800</pubDate>
      <guid>/code/2021/022709-typescript/</guid>
      <description>&lt;p&gt;IT是更新换代、升级最快的，TypeScript又更新了，我都还没有认真学习过。&lt;/p&gt;&#xA;&lt;p&gt;TypeScript 是 JavaScript 的一个超集。TypeScript 设计目标是开发大型应用，它可以编译成纯 JavaScript，编译出来的 JavaScript 可以运行在任何浏览器上。&lt;/p&gt;</description>
    </item>
    <item>
      <title>简单直接点：掩码、子网内主机数、子网数、主机总数</title>
      <link>/it/2021/022508-net/</link>
      <pubDate>Thu, 25 Feb 2021 08:57:26 +0800</pubDate>
      <guid>/it/2021/022508-net/</guid>
      <description>&lt;h3 id=&#34;1&#34;&gt;1&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;掩码：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;206.110.1.0 /18 表示掩码为　11111111.11111111.11 | 000000.00000000，即１８个１，则有１４个０。即255.255.192.0&lt;/p&gt;&#xA;&lt;p&gt;129.168.1.1 /24 表示掩码为 11111111 11111111 11111111 00000000 即　255.255.255.0&lt;/p&gt;&#xA;&lt;p&gt;172.16.10.33/27 中的/27　掩码是　11111111 11111111 11111111 11100000　即　255.255.255.224&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu Ufw防火墙</title>
      <link>/it/2021/022411-ufw/</link>
      <pubDate>Wed, 24 Feb 2021 11:31:50 +0800</pubDate>
      <guid>/it/2021/022411-ufw/</guid>
      <description>&lt;p&gt;总是在收费服务程序上看到不断很多连接，分析发现是两个ＩＰ在不断连接它。于是对此服务进行了修改，将此ＩＰ放入了黑名单。估计博客出现问题也有可能是类似问题导致的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>智能房车思考　（持续思考更新）</title>
      <link>/other/2021/022109-fangche/</link>
      <pubDate>Sun, 21 Feb 2021 09:59:18 +0800</pubDate>
      <guid>/other/2021/022109-fangche/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;/other/2019/101308-fangche-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;智能化设备进入房车是必然的趋势，虽然我们现在还处在房车的初级阶段。&lt;/p&gt;&#xA;&lt;p&gt;充分发挥自己的专业以及想像力，想想什么东西能让房车更智能呢？有什么现有设备可以智能化呢？&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang实现反向代理</title>
      <link>/code/2021/022015-proxy/</link>
      <pubDate>Sat, 20 Feb 2021 15:55:06 +0800</pubDate>
      <guid>/code/2021/022015-proxy/</guid>
      <description>&lt;p&gt;最近服务器上的nginx代理的博客，总是出现&amp;quot;连接被重置&amp;quot;，考虑自己做一个代理。但不知道https和阿里和微信收费部份是否有受影响。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ningx Unit与Golang</title>
      <link>/it/2021/021809-ningx_unit/</link>
      <pubDate>Thu, 18 Feb 2021 09:20:46 +0800</pubDate>
      <guid>/it/2021/021809-ningx_unit/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://docs.nginxunit.cn/_static/logo.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;&#xA;NGINX Unit 是一个动态Web和应用服务器，可以运行多种编程语言的应用。Unit 是轻量级的、支持多种语言，并且可以通过API进行动态配置。Unit 的设计允许开发或运维需要的情况下，重新配置特定应用参数。&#xA;&amp;quot;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Caddy试用</title>
      <link>/it/2021/020616-caddy/</link>
      <pubDate>Sat, 06 Feb 2021 16:42:24 +0800</pubDate>
      <guid>/it/2021/020616-caddy/</guid>
      <description>&lt;p&gt;因为最近域名访问老是不稳定，现象为：刷新不出内容，多次刷新又偶尔正常。不知道什么原因。浏览器提示：连接被重置。而直接通过域名和端口访问是没有问题的。直接能过域名管理平台，隐式跳转的IP+Port也是正常的。现在暂时用这种方法解决的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>给父母看的电影 (持续收集)</title>
      <link>/teach/2021/020610-fm/</link>
      <pubDate>Sat, 06 Feb 2021 10:23:20 +0800</pubDate>
      <guid>/teach/2021/020610-fm/</guid>
      <description>&lt;p&gt;最该教育的是父母，然后才是孩子。所以首先父母应该学习起来。传统教育中，没有一党课是给父母的，也鲜有父母课堂。&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-地球上的星星-taare-zameen-par-2007&#34;&gt;1. 地球上的星星 Taare Zameen Par (2007)&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../020610-fm-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://movie.douban.com/subject/2363506/&#34;&gt;豆瓣电影相关介绍及评论&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;　　对于8岁的男孩伊夏（达席尔·萨法瑞 Darsheel Safary 饰）来说，世界是充满了惊奇和快乐的万花筒，他正在用一切他能够想到的方式和这个陌生的世界进行着交流，同时也充分的享受着大地万物慷慨的赠与。可是，这样的伊夏却是成年人眼中的问题儿童，他的成绩不好，在班上的排名靠后， 脑子里还充满了各种匪夷所思的鬼点子，在又一次闯下大祸后，忍无可忍的父母将他送往了寄宿学校。&#xA;　　虽然伊夏的新生活并没有什么改变，但在内心里，和父母分离的生活让他感到闷闷不乐，这时，一位名叫尼克（阿米尔·汗 Aamir Khan 饰）的美术老师走进了他的生活。和以往所见到的固守成规的老师不同，尼克主张让学生们保留自己的个性和思想，自由的发展。在和尼克相处的日子里，伊夏和尼克都慢慢的成熟了起来。&lt;/p&gt;</description>
    </item>
    <item>
      <title>GoFrame框架学习 续</title>
      <link>/code/2021/012722-goframe/</link>
      <pubDate>Wed, 27 Jan 2021 22:48:51 +0800</pubDate>
      <guid>/code/2021/012722-goframe/</guid>
      <description>&lt;p&gt;GoFrame的文档实在太多，把部份模块的资料单独提出来&lt;/p&gt;&#xA;&lt;p&gt;GF(Go Frame)是一款模块化、高性能、企业级的Go基础开发框架。完整详实的中文文档，可以减轻学习的压力。&lt;/p&gt;</description>
    </item>
    <item>
      <title>易于实施的汽车风挡全屏方案</title>
      <link>/it/2021/012713-car/</link>
      <pubDate>Wed, 27 Jan 2021 13:35:19 +0800</pubDate>
      <guid>/it/2021/012713-car/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../012713-car-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;我一直认为汽车前挡风玻璃应该换成全部屏幕。随着柔性屏的进一步成熟，似乎这种改造也更加易于实现。&lt;/p&gt;&#xA;&lt;p&gt;最简单的方法就是外面依然保持玻璃，在内部贴合一个全尺寸的柔性屏（如果太贵，来个1／3也是可以的）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>此博客备用网址 http://wyyyh.3322.org:8181</title>
      <link>/other/2021/012220-web/</link>
      <pubDate>Fri, 22 Jan 2021 20:49:30 +0800</pubDate>
      <guid>/other/2021/012220-web/</guid>
      <description>&lt;p&gt;不知道什么原因，最近scwy.net域名总是出现不能打开的问题，多刷新几次又能正常。感觉是间歇性被墙。&lt;/p&gt;&#xA;&lt;p&gt;国内的网络环境真是很糟糕，这也可能是一般人搞不好网站的原因。站长总是被很多莫名其妙的东西打败。&lt;/p&gt;</description>
    </item>
    <item>
      <title>计划假期给孩子看的高分纪录片及下载地址</title>
      <link>/teach/2021/012219-jq/</link>
      <pubDate>Fri, 22 Jan 2021 19:48:51 +0800</pubDate>
      <guid>/teach/2021/012219-jq/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;美丽中国&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../012219-jq-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;蓝色星球&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;.../012219-jq-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;猎捕&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../012219-jq-03.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;地球脉动&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../012219-jq-04.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ol start=&#34;5&#34;&gt;&#xA;&lt;li&gt;王朝&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../012219-jq-05.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ol start=&#34;6&#34;&gt;&#xA;&lt;li&gt;冰冻星球&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../012219-jq-06.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ol start=&#34;7&#34;&gt;&#xA;&lt;li&gt;我们的星球&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../012219-jq-07.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ol start=&#34;8&#34;&gt;&#xA;&lt;li&gt;太阳系的奇迹&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../012219-jq-08.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ol start=&#34;9&#34;&gt;&#xA;&lt;li&gt;植物王国&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../012219-jq-09.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ol start=&#34;10&#34;&gt;&#xA;&lt;li&gt;微观小世界&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../012219-jq-10.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ol start=&#34;11&#34;&gt;&#xA;&lt;li&gt;啊！设计&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.iqiyi.com/w_19sb1symll.html&#34;&gt;在线观看&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ol start=&#34;12&#34;&gt;&#xA;&lt;li&gt;元日(v)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;中国唱诗班的作品都很经典&lt;/p&gt;</description>
    </item>
    <item>
      <title>GoFrame框架学习 (超长)</title>
      <link>/code/2021/011921-goframe/</link>
      <pubDate>Tue, 19 Jan 2021 21:35:02 +0800</pubDate>
      <guid>/code/2021/011921-goframe/</guid>
      <description>&lt;p&gt;GF(Go Frame)是一款模块化、高性能、企业级的Go基础开发框架。完整详实的中文文档，可以减轻学习的压力。&lt;/p&gt;&#xA;&lt;p&gt;主库：https://github.com/gogf/gf&lt;/p&gt;</description>
    </item>
    <item>
      <title>读书：《不如去闯》</title>
      <link>/other/2021/011817-brqc/</link>
      <pubDate>Mon, 18 Jan 2021 17:21:16 +0800</pubDate>
      <guid>/other/2021/011817-brqc/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../011817-brqc-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这是新年里又一个读书计划。阅读他那本《学习高手》感觉还不错，或许能成为孩子的学习宝典。于是顺路又买回了这本《不如去闯》。希望孩子们也成为像他那样知识丰富，生活多彩，阳光帅气的男生。&lt;/p&gt;</description>
    </item>
    <item>
      <title>go mod</title>
      <link>/code/2021/011808-gomod/</link>
      <pubDate>Mon, 18 Jan 2021 08:35:46 +0800</pubDate>
      <guid>/code/2021/011808-gomod/</guid>
      <description>&lt;pre&gt;&lt;code&gt;export GO111MODULE=off  #关闭go mod&#xA;export GO111MODULE=on   # 开启mod&#xA;export GO111MODULE=auto # GOPATH/src不启用,但是还要看当前目录或者上级目录是否存在go.mod,go.sum，如果存在，则启用go mod&#xA;&#xA;export GOPROXY=https://mirrors.aliyun.com/goproxy/ #设置拉取的代理 &#xA;export GOPROXY=file://本地路径  # 也可以从本地加载&#xA;&#xA;go mod init &amp;lt;module_name&amp;gt; # 对一个项目的module进行初始化，module_name是选填的，可以在初始化的时候就制定module名&#xA;go mod tidy # 添加包，清除没有引用的包&#xA;go clean -modcache 清除mod下载的包&#xA;go mod vendor 生成vendor目录&#xA;go mod verify 验证依赖是否正确&#xA;&#xA;go env -w GO111MODULE=on&#xA;go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct&#xA;&#xA;go get golang.org/x/text@latest  拉取最新的版本(优先择取 tag)&#xA;go get golang.org/x/text@master  拉取 master 分支的最新 commit&#xA;go get golang.org/x/text@v0.3.2  拉取 tag 为 v0.3.2 的 commit&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>手机发展趋势的设想</title>
      <link>/ai/2021/011512-mob/</link>
      <pubDate>Fri, 15 Jan 2021 12:56:05 +0800</pubDate>
      <guid>/ai/2021/011512-mob/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;/img/mob.jpg&#34; alt=&#34;&#34;&gt;&#xA;随着一代代的手机推出，各个商家你追我赶，令人眼花缭乱，像极了之前的PC市场，我们仿佛迷失在升级战中。往往是刚买了一个新手机，还没高兴两天，又一款性价比手机又推出了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>智能眼镜爆发年？今年陆续发布的几款智能眼镜产品</title>
      <link>/ai/2021/011319-aieye/</link>
      <pubDate>Wed, 13 Jan 2021 19:22:02 +0800</pubDate>
      <guid>/ai/2021/011319-aieye/</guid>
      <description>&lt;p&gt;最近陆续接收到多款智能眼镜产品年内发布的信息。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;联想计划推出ThinkReality A3智能眼镜，面向企业用户。配有1080P显示屏，可以通过USB-C电缆连接到用户的PC或手机。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../011319-aieye-03.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>基于Golang的MQTT学习</title>
      <link>/code/2021/010920-mqtt/</link>
      <pubDate>Sat, 09 Jan 2021 20:47:27 +0800</pubDate>
      <guid>/code/2021/010920-mqtt/</guid>
      <description>&lt;p&gt;因为涉及到物联网项目（手环类），学习一下MQTT。&lt;/p&gt;&#xA;&lt;p&gt;MQTT（Message Queuing Telemetry Transport，消息队列遥测传输协议），是一种基于发布/订阅（publish/subscribe）模式的&amp;quot;轻量级&amp;quot;通讯协议，该协议构建于TCP/IP协议上。MQTT最大优点在于，可以以极少的代码和有限的带宽，为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议，使其在物联网、小型设备、移动应用等方面有较广泛的应用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scrcpy--电脑控制手机神器--一键连接</title>
      <link>/it/2021/010717-scrcpy/</link>
      <pubDate>Thu, 07 Jan 2021 17:35:57 +0800</pubDate>
      <guid>/it/2021/010717-scrcpy/</guid>
      <description>&lt;p&gt;之前有文章介绍了&lt;a href=&#34;(http://i.scwy.net/it/2021/010510-scrcpy/)&#34;&gt;Scrcpy的优点和基本使用方法&lt;/a&gt;，不过每次都运行命令行，毕竟不是那么方便。&lt;/p&gt;&#xA;&lt;p&gt;也有网友为它开发过GUI界面，不过我不想搞得那么复杂，于是写了两个脚本来解决问题。然后在系统中设置好热键，轻松连接。&lt;/p&gt;&#xA;&lt;p&gt;如果要再智能一些，就是自动扫描了。（注：文后已实现一键自动连接）&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux下弹窗消息，输入信息</title>
      <link>/code/2021/010716-info/</link>
      <pubDate>Thu, 07 Jan 2021 16:14:43 +0800</pubDate>
      <guid>/code/2021/010716-info/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;notify-send 在系统托盘区显示消息（与pidgin和evolution的提醒一样）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;在Ubuntu中，它是在上方弹出信息，并在通知栏上有显示&lt;/p&gt;&#xA;&lt;p&gt;notify-send [&amp;ldquo;标题&amp;rdquo;] &amp;ldquo;信息&amp;rdquo;   这个是弹出消息&lt;/p&gt;</description>
    </item>
    <item>
      <title>2021年计划</title>
      <link>/other/2021/010715-jh/</link>
      <pubDate>Thu, 07 Jan 2021 15:48:05 +0800</pubDate>
      <guid>/other/2021/010715-jh/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;3个系列课程&lt;/p&gt;&#xA;&lt;p&gt;老人系列、学生系列、办公系列&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;学习：QOR、Godot&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;小程序：量表&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;读书：10本&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Scrcpy--电脑控制手机神器</title>
      <link>/it/2021/010510-scrcpy/</link>
      <pubDate>Tue, 05 Jan 2021 10:40:19 +0800</pubDate>
      <guid>/it/2021/010510-scrcpy/</guid>
      <description>&lt;p&gt;手机的屏幕和操控性比电脑还是差一些。在演示一些手机内容时，你不可能拿着手机让大家挤在一起看，虽然你可以说手机都有投屏功能。另外，对于某些需要控制多台手机的情况，往往是把它们集中在电脑上进行控制。&#xA;Scrcpy&amp;ndash;电脑控制手机神器&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang MP4文件服务器</title>
      <link>/code/2021/010415-mp4/</link>
      <pubDate>Mon, 04 Jan 2021 15:37:01 +0800</pubDate>
      <guid>/code/2021/010415-mp4/</guid>
      <description>&lt;p&gt;我收藏了一些电影，在外面应该如何播放呢？原有的文件服务器是不行。&lt;/p&gt;&#xA;&lt;p&gt;以下使用了GIN框架，偶尔用，总是忘了方法，备一个地址&lt;a href=&#34;https://www.jianshu.com/p/98965b3ff638&#34;&gt;Gin框架中文文档&lt;/a&gt;，&lt;a href=&#34;https://github.com/gin-gonic/gin&#34;&gt;Github Gin&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;模板准备好&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;&#xA;&amp;lt;html&amp;gt;&#xA;&amp;lt;head&amp;gt; &#xA;&amp;lt;meta charset=&amp;#34;utf-8&amp;#34;&amp;gt; &#xA;&amp;lt;title&amp;gt;在线视频播放示例&amp;lt;/title&amp;gt; &#xA;&amp;lt;/head&amp;gt;&#xA;&amp;lt;style&amp;gt;&#xA;*{padding:0px;margin:0px;}&#xA;&amp;lt;/style&amp;gt;&#xA;&amp;lt;body&amp;gt;&#xA;&#xA;&amp;lt;video width=&amp;#34;100%&amp;#34; height=&amp;#34;100%&amp;#34; controls&amp;gt;&#xA;  &amp;lt;source src=&amp;#34;/Movie{{.move_name}}&amp;#34;  type=&amp;#34;video/ogg&amp;#34;&amp;gt;&#xA;&amp;lt;/video&amp;gt;&#xA;&#xA;&amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;使用gin框架的文件下载功能，实现在视频的在线播放，将url嵌入h5等价于h5直接打开本地视频文件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>计划：视频系列教学</title>
      <link>/other/2021/010320-jh/</link>
      <pubDate>Sun, 03 Jan 2021 20:15:20 +0800</pubDate>
      <guid>/other/2021/010320-jh/</guid>
      <description>&lt;p&gt;计划做一系列视频教程：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;老人学电脑、手机&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;小孩子学电脑／手机&lt;/p&gt;&#xA;&lt;p&gt;a. 认识电脑&lt;/p&gt;&#xA;&lt;p&gt;b.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;办公系列（工具/Office）&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;编程：Python Golang&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;单片机: Arduino&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;收集系列：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;PLC&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;技巧&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;SoildWorks&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;一. 老人学电脑、手机&lt;/p&gt;</description>
    </item>
    <item>
      <title>读书：《学习高手》 读完,整理中</title>
      <link>/other/2020/122720-xxgs/</link>
      <pubDate>Sun, 27 Dec 2020 20:34:41 +0800</pubDate>
      <guid>/other/2020/122720-xxgs/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../122720-xxgs-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;作者李柘远，18岁考进耶鲁，22岁入职高盛，25岁考取哈佛，28岁⼊选福布斯30岁以下精英榜、APEC亚太经合组织未来创变者、新浪阅读大使。&lt;/p&gt;</description>
    </item>
    <item>
      <title>体育类创业项目设想</title>
      <link>/other/2020/122421-ty/</link>
      <pubDate>Thu, 24 Dec 2020 21:21:57 +0800</pubDate>
      <guid>/other/2020/122421-ty/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../122421-ty-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;“体育是最接近孩子天性的一项教育，不仅能够增强孩子的体能，所有美好的品质都能在体育课以及体育运动中培养起来。”&lt;/p&gt;&#xA;&lt;p&gt;随着国家对学校体育前所未有的重视，此类型的创业项目将有一定的可行性。而实际环境中，受到大量学习内容的影响，以及过胜的物质、不良的生活作息习惯，体育往往是学生的短板。除了以前的游泳、轮滑、武术、街舞都基本算作体育、健身一类，近期市面上出现了跳绳培训班，青少年减重是早已有之。&lt;/p&gt;</description>
    </item>
    <item>
      <title>内网穿透又一选择zeroTier</title>
      <link>/it/2020/122109-zerotier/</link>
      <pubDate>Mon, 21 Dec 2020 09:20:41 +0800</pubDate>
      <guid>/it/2020/122109-zerotier/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.zerotier.com/wp-content/uploads/2020/08/zerotier_logo_black.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.zerotier.com/&#34;&gt;官网 https://www.zerotier.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;特点：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;内网穿透&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;多平台&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;类似于VPN（这才是我选择的真正原因）&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;“ZeroTier虚拟了一个网段，网段为192.168.196.0/24，公司和家里分别安装ZeroTier客户端，客户端会虚拟出一个网络并加入192.168.196.0/24这个网段，在家即可访问192.168.196.216地址，反之同理。&#xA;”&lt;/p&gt;</description>
    </item>
    <item>
      <title>关注智能眼镜及设想：tooz Devkit 20</title>
      <link>/ai/2020/121922-aieye/</link>
      <pubDate>Sat, 19 Dec 2020 22:30:20 +0800</pubDate>
      <guid>/ai/2020/121922-aieye/</guid>
      <description>&lt;p&gt;从某个角度说，智能眼镜是一个趋势。它可以取代智能手机及众多电子设备的屏幕，通过智能的交互设计，从来抛弃现有电子设备的物理交互方式。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://tooztech.cn/wp-content/uploads/2020/12/tooz-DevKit-20-Home-hero-1-scaled.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;今天看到一款智能眼镜 tooz Devkit 20，由欧洲两大主要公司引领——光学技术公司蔡司（Zeiss）（也叫卡尔蔡司Carl Zeiss）和电信巨头德国电信（Deutsche Telekom）。它尚在开发者预售阶段（也就是开发者都还得等到明年2月才能拿到），预售价是3900，预计售价是4800。&lt;/p&gt;</description>
    </item>
    <item>
      <title>EPS32&#43;VGA输出</title>
      <link>/ai/2020/121817-espvga/</link>
      <pubDate>Fri, 18 Dec 2020 17:40:46 +0800</pubDate>
      <guid>/ai/2020/121817-espvga/</guid>
      <description>&lt;p&gt;找这个资料源于我的眼镜显示器，一直考虑如何能让它便携的显示一些简单内容。便携就意味着要小，要节能。&lt;/p&gt;&#xA;&lt;p&gt;现在考虑的方案应该是ESP32+VGA,VGA转HDMI，HDMI再输出到眼镜显示器。它可以实现通过网络控制显示内容到眼镜显示器上。&lt;/p&gt;</description>
    </item>
    <item>
      <title>发现CCTV上的一些好东西</title>
      <link>/other/2020/121714-xue/</link>
      <pubDate>Thu, 17 Dec 2020 14:06:43 +0800</pubDate>
      <guid>/other/2020/121714-xue/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../121714-xue-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;老师发来一个链接，主要是一个栏目：央视的《跟着书本去旅行》。它用旅行的方式去带着孩子学习课本知识。&lt;/p&gt;&#xA;&lt;p&gt;确实有不少有意思的内容，视频质量也不错。于是我想下载到电脑上，让孩子们以后能够看看。毕竟现在还小，很多内容都还涉及不到 。&lt;/p&gt;</description>
    </item>
    <item>
      <title>QOR： Golang开发的电商系统和CMS工具库－－示例学习（未完待续）</title>
      <link>/code/2020/121621-qor/</link>
      <pubDate>Wed, 16 Dec 2020 21:03:50 +0800</pubDate>
      <guid>/code/2020/121621-qor/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/code/2020/120509-qor/&#34;&gt;QOR： Golang开发的电商系统和CMS工具库－－读官方文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/code/2020/121621-qor/&#34;&gt;QOR： Golang开发的电商系统和CMS工具库－－示例学习&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://getqor.com/source/images/qor-logo.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;基于Go语言开发的电商系统和CMS的SDK，根据网友的说法：QOR可以看作是PHP中的ThinkPHP，Python中的Django。&lt;/p&gt;</description>
    </item>
    <item>
      <title>量表、问卷</title>
      <link>/it/2020/121415-lb/</link>
      <pubDate>Mon, 14 Dec 2020 15:19:50 +0800</pubDate>
      <guid>/it/2020/121415-lb/</guid>
      <description>&lt;p&gt;量表，通过表单的选择，由程序自动判断受试者的行为习惯、健康状况、心理情况等。&lt;/p&gt;&#xA;&lt;p&gt;从宏观上说，医院问诊也适用于量表。区别在于通过医生的经验更能真实的抛开表面现象看到事物本质，便于更准确的诊断。&lt;/p&gt;</description>
    </item>
    <item>
      <title>动态域名服务 开发/学习过程</title>
      <link>/code/2020/121110-dns/</link>
      <pubDate>Fri, 11 Dec 2020 10:47:57 +0800</pubDate>
      <guid>/code/2020/121110-dns/</guid>
      <description>&lt;p&gt;一直在想实现一个可应用的动态域名服务。可以象现在网上某些服务商提供的那样，让只具有动态IP的客户，能把家里的电脑建立为服务器，向互联网开放服务。（这里只需要实现A记录查询即可）&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nginx学习及收集</title>
      <link>/it/2020/121109-nginx/</link>
      <pubDate>Fri, 11 Dec 2020 09:06:51 +0800</pubDate>
      <guid>/it/2020/121109-nginx/</guid>
      <description>&lt;p&gt;nginx大名，继续学习。&lt;/p&gt;&#xA;&lt;h4 id=&#34;nginx实现多语言跳转不同的url&#34;&gt;nginx实现多语言跳转不同的url&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;server {&#xA;        listen       80;&#xA;        server_name www.text.com;&#xA;&#xA;        location / {&#xA;&#xA;            if ($http_accept_language ~* ^zh)       {&#xA;                set $lang zh_CN;&#xA;                rewrite (.*)  https://www.baidu.com$1 permanent;&#xA;                break;&#xA;            }&#xA;&#xA;            if ($http_accept_language ~* ^ko)       {&#xA;                set $lang ko_KR;&#xA;                rewrite (.*)  https://www.aliyun.com$1 permanent;&#xA;                break;&#xA;            }&#xA;            if ($http_accept_language ~* ^en)       {&#xA;                set $lang en_US;&#xA;                rewrite (.*)  https://www.google.com$1 permanent;&#xA;                break;&#xA;            }&#xA;        }&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;测试&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -I http://www.text.com -H &amp;#34;Accept-Language:ko&amp;#34;&#xA;curl -I http://www.text.com -H &amp;#34;Accept-Language:zh&amp;#34;&#xA;curl -I http://www.text.com -H &amp;#34;Accept-Language:en&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;nginx-map使用方法&#34;&gt;nginx map使用方法&lt;/h4&gt;&#xA;&lt;p&gt;map指令使用ngx_http_map_module模块提供的。默认情况下，nginx有加载这个模块&lt;/p&gt;</description>
    </item>
    <item>
      <title>移动开通IPV6，终于有公网IP了</title>
      <link>/it/2020/121022-ipv6/</link>
      <pubDate>Thu, 10 Dec 2020 22:23:07 +0800</pubDate>
      <guid>/it/2020/121022-ipv6/</guid>
      <description>&lt;p&gt;现在所住的地方，是使用的移动网络。进入路由重新设置，开启IPV6支持。&lt;/p&gt;&#xA;&lt;p&gt;然后去dynv6.com注册了一个帐户。&lt;/p&gt;&#xA;&lt;p&gt;域名：wyyyh.dynv6.net&lt;/p&gt;</description>
    </item>
    <item>
      <title>设想：沉浸式深度春节体验</title>
      <link>/other/2020/120916-day/</link>
      <pubDate>Wed, 09 Dec 2020 16:27:06 +0800</pubDate>
      <guid>/other/2020/120916-day/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../120916-day-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;现在的年味越来越淡，特别是越来越现代化的大城市。时代进步了，感觉越来越没有了。我们这一代人只有一些依稀的记忆，还是怀念幼时农村过年的感觉。同时也希望孩子们有一个过年的感觉。&lt;/p&gt;</description>
    </item>
    <item>
      <title>QOR： Golang开发的电商系统和CMS工具库－－读官方文档</title>
      <link>/code/2020/120509-qor/</link>
      <pubDate>Sat, 05 Dec 2020 09:22:47 +0800</pubDate>
      <guid>/code/2020/120509-qor/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/code/2020/120509-qor/&#34;&gt;QOR： Golang开发的电商系统和CMS工具库－－读官方文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/code/2020/121621-qor/&#34;&gt;QOR： Golang开发的电商系统和CMS工具库－－示例学习&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://getqor.com/source/images/qor-logo.svg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;基于Go语言开发的电商系统和CMS的SDK，根据网友的说法：QOR可以看作是PHP中的ThinkPHP，Python中的Django。&lt;/p&gt;</description>
    </item>
    <item>
      <title>台式机／设备远程唤醒：esp-01实现电脑远程物理唤醒</title>
      <link>/ai/2020/120414-pcwakeup/</link>
      <pubDate>Fri, 04 Dec 2020 14:07:36 +0800</pubDate>
      <guid>/ai/2020/120414-pcwakeup/</guid>
      <description>&lt;h4 id=&#34;需求&#34;&gt;需求&lt;/h4&gt;&#xA;&lt;p&gt;关掉电源的电脑实现远程开机。&lt;/p&gt;&#xA;&lt;h4 id=&#34;使用场景&#34;&gt;使用场景&lt;/h4&gt;&#xA;&lt;p&gt;实现在家中就可以打开办公室的电脑。通过电脑上安装远程控制软件，从而实现在家控制公司电脑，实现远程办公。&lt;/p&gt;&#xA;&lt;p&gt;我家的开水器是需要才开，避免反复烧煮。回家之前把它开起，回家喝热水。&lt;/p&gt;</description>
    </item>
    <item>
      <title>读书：《樊登讲论语》（未完待续）</title>
      <link>/other/2020/120220-ly/</link>
      <pubDate>Wed, 02 Dec 2020 20:16:46 +0800</pubDate>
      <guid>/other/2020/120220-ly/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../120220-ly-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;文末附论语全文，有点长。&lt;a href=&#34;https://lunyu.5000yan.com/&#34;&gt;网上有全文，且有翻译&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;我购买是看到他的解释比较与时俱进。很多古人的智慧是值得我们学习的，可能是他们有更多的时间思考（没有电灯，没有汽车，没有手机，没有电脑&amp;hellip;科技在进步的同时，也让我们迷失）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>go库 -- gousb: usb设备库</title>
      <link>/code/2020/120219-gousb/</link>
      <pubDate>Wed, 02 Dec 2020 19:17:03 +0800</pubDate>
      <guid>/code/2020/120219-gousb/</guid>
      <description>&lt;p&gt;Github: &lt;a href=&#34;https://github.com/google/gousb&#34;&gt;https://github.com/google/gousb&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;gousb包尝试将libusb库包装成类似go的绑定。它支持Windows、linux、darwin。&lt;/p&gt;&#xA;&lt;p&gt;运行lsusb中的main.go，将列出连接到您的系统的USB设备，以及关于它们的各种有趣的细节、它们的配置、端点等等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Arduino记录</title>
      <link>/code/2020/120214-arduino/</link>
      <pubDate>Wed, 02 Dec 2020 14:48:27 +0800</pubDate>
      <guid>/code/2020/120214-arduino/</guid>
      <description>&lt;p&gt;最近使用arduino较多，作一个统一的记录。&lt;/p&gt;&#xA;&lt;p&gt;安装esp8266开发板管理网址&#xA;&lt;a href=&#34;https://github.com/esp8266/Arduino/releases/download/2.5.0/package_esp8266com_index.json&#34;&gt;https://github.com/esp8266/Arduino/releases/download/2.5.0/package_esp8266com_index.json&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;安装esp32开发板管理网址&#xA;&lt;a href=&#34;https://dl.espressif.com/dl/package_esp32_index.json&#34;&gt;https://dl.espressif.com/dl/package_esp32_index.json&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Arduino字符串笔记&#xA;&lt;a href=&#34;https://www.cnblogs.com/dapenson/p/12822519.html&#34;&gt;https://www.cnblogs.com/dapenson/p/12822519.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;关于程序太大空间不足&#34;&gt;关于程序太大，空间不足&lt;/h3&gt;&#xA;&lt;p&gt;除了换大空间的芯片以外，esp32在arduino中是有设置的&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESP-01 相关</title>
      <link>/ai/2020/120214-eps01/</link>
      <pubDate>Wed, 02 Dec 2020 14:09:16 +0800</pubDate>
      <guid>/ai/2020/120214-eps01/</guid>
      <description>&lt;p&gt;之前冲动消费了几块ESP-01主板，原本考虑用于arduino芯片的网络化。最近梁总有需求远程开机，考虑给他用起。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../esp-0.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;EPS-01&#xA;在Arduino IDE中选择EPS-12，速率默认115200.&#xA;板载8个接线位分别是(板载天线正面，右方):&#xA;TX (GPIO1)     GND&#xA;CH_PD  GPIO2&#xA;GPIO16 GPIO0&#xA;VCC    RX(GPIO3)&lt;/p&gt;</description>
    </item>
    <item>
      <title>代理工具 mitmproxy</title>
      <link>/it/2020/120207-mitmproxy/</link>
      <pubDate>Wed, 02 Dec 2020 07:47:37 +0800</pubDate>
      <guid>/it/2020/120207-mitmproxy/</guid>
      <description>&lt;p&gt;官方首页: &lt;a href=&#34;https://mitmproxy.org/&#34;&gt;https://mitmproxy.org/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;github地址：&lt;a href=&#34;https://github.com/mitmproxy/mitmproxy/&#34;&gt;https://github.com/mitmproxy/mitmproxy/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;MITM 即中间人攻击（Man-in-the-middle attack）。&lt;/p&gt;&#xA;&lt;p&gt;不同于 fiddler 或 wireshark 等抓包工具，mitmproxy 不仅可以截获请求帮助开发者查看、分析，更可以通过自定义脚本进行二次开发。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Esp32继续学习</title>
      <link>/ai/2020/112810-esp32/</link>
      <pubDate>Sat, 28 Nov 2020 10:33:05 +0800</pubDate>
      <guid>/ai/2020/112810-esp32/</guid>
      <description>&lt;p&gt;最近在继续折腾T-Wristband可编程手环。以下作记录。&lt;/p&gt;&#xA;&lt;p&gt;因为常用系统Ubuntu20.10升级导致显卡驱动未安装，亮度不能调节（真的叫亮瞎狗眼），导致很少进入此系统（笔记本安装系统），而经常使用SSD硬盘上的manjaor。从而更新博客会慢一点。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang websocket 一个语音聊天室</title>
      <link>/code/2020/112016-chat/</link>
      <pubDate>Fri, 20 Nov 2020 16:52:28 +0800</pubDate>
      <guid>/code/2020/112016-chat/</guid>
      <description>&lt;p&gt;原版是这位仁兄的&lt;a href=&#34;https://github.com/99MyCql/chatRoom&#34;&gt;https://github.com/99MyCql/chatRoom&lt;/a&gt;。我添加了图片和语音功能。因为H5的录音功能是需要https的，所以又在源码中添加了https的支持并修改nginx配置。&lt;/p&gt;&#xA;&lt;p&gt;使用简单，输入名字就可以进入。屏幕大小的适配也基本没问题。&lt;/p&gt;&#xA;&lt;p&gt;在PC、安卓和苹果上的Firefox均实现成功语音。华为平板自带的浏览器中不成功，苹果自带的Safari浏览器中成功。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESP32在Arduino IDE中运行Ulp程序</title>
      <link>/ai/2020/111118-ulp/</link>
      <pubDate>Wed, 11 Nov 2020 18:33:18 +0800</pubDate>
      <guid>/ai/2020/111118-ulp/</guid>
      <description>&lt;p&gt;程序还在研究中，先放出来。此程序让ULP控制板载LED闪烁。文章陆续更新&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;官方原生的esp-idf环境是支持通过汇编使用ULP的，但在arduino也不应该浪费这个好东西：它让主板等东西都去休息，只让低功耗处理器ULP做点简单的事。（其实这都是电耗闹的） 这样，也让我减轻点关于使用arduino还是esp-idf的纠结。&lt;/p&gt;</description>
    </item>
    <item>
      <title>go库 -- go-bluetooth: 蓝牙工具库</title>
      <link>/code/2020/111112-bluetooth/</link>
      <pubDate>Wed, 11 Nov 2020 12:49:26 +0800</pubDate>
      <guid>/code/2020/111112-bluetooth/</guid>
      <description>&lt;p&gt;目前主流的蓝牙信标协议就是苹果的iBeacon协议和谷歌的Eddystone协议。&lt;/p&gt;&#xA;&lt;p&gt;Beacons是使用蓝牙4.0（BLE）技术发射信号的小设备&lt;/p&gt;&#xA;&lt;h3 id=&#34;go-bluetoothhttpsgithubcommukago-bluetooth&#34;&gt;&lt;a href=&#34;https://github.com/muka/go-bluetooth&#34;&gt;go-bluetooth&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;基于Linux的Bluez DBus接口的蓝牙API。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESP32蓝牙</title>
      <link>/ai/2020/111021-bluetooth/</link>
      <pubDate>Tue, 10 Nov 2020 21:19:58 +0800</pubDate>
      <guid>/ai/2020/111021-bluetooth/</guid>
      <description>&lt;p&gt;BLE 蓝牙低能耗(Bluetooth Low Energy)&lt;/p&gt;&#xA;&lt;h4 id=&#34;ble发送简单信息&#34;&gt;BLE发送简单信息&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#include &amp;lt;Arduino.h&amp;gt;&#xA;#include &amp;lt;BLEDevice.h&amp;gt;&#xA;#include &amp;lt;BLEServer.h&amp;gt;&#xA;#include &amp;lt;BLEUtils.h&amp;gt;&#xA;#include &amp;lt;BLE2902.h&amp;gt;&#xA;&#xA;BLECharacteristic *pCharacteristic; //创建一个BLE特性pCharacteristic&#xA;bool deviceConnected = false;       //连接否标志位&#xA;uint8_t txValue = 0;                //TX的值&#xA;long lastMsg = 0;                   //存放时间的变量&#xA;String rxload = &amp;#34;BlackWalnutLabs&amp;#34;;  //RX的预置值&#xA;&#xA;#define SERVICE_UUID           &amp;#34;6E400001-B5A3-F393-E0A9-E50E24DCCA9E&amp;#34; // UART service UUID&#xA;#define CHARACTERISTIC_UUID_RX &amp;#34;6E400002-B5A3-F393-E0A9-E50E24DCCA9E&amp;#34;&#xA;#define CHARACTERISTIC_UUID_TX &amp;#34;6E400003-B5A3-F393-E0A9-E50E24DCCA9E&amp;#34;&#xA;&#xA;//服务器回调&#xA;class MyServerCallbacks : public BLEServerCallbacks&#xA;{&#xA;  void onConnect(BLEServer *pServer)&#xA;  {&#xA;    deviceConnected = true;&#xA;  };&#xA;  void onDisconnect(BLEServer *pServer)&#xA;  {&#xA;    deviceConnected = false;&#xA;  }&#xA;};&#xA;&#xA;//特性回调&#xA;class MyCallbacks : public BLECharacteristicCallbacks&#xA;{&#xA;  void onWrite(BLECharacteristic *pCharacteristic)&#xA;  {&#xA;    std::string rxValue = pCharacteristic-&amp;gt;getValue();&#xA;    if (rxValue.length() &amp;gt; 0)&#xA;    {&#xA;      rxload = &amp;#34;&amp;#34;;&#xA;      for (int i = 0; i &amp;lt; rxValue.length(); i++)&#xA;      {&#xA;        rxload += (char)rxValue[i];&#xA;        Serial.print(rxValue[i]);&#xA;      }&#xA;      Serial.println(&amp;#34;&amp;#34;);&#xA;    }&#xA;  }&#xA;};&#xA;&#xA;void setupBLE(String BLEName)&#xA;{&#xA;  const char *ble_name = BLEName.c_str(); //将传入的BLE的名字转换为指针&#xA;  BLEDevice::init(ble_name);              //初始化一个蓝牙设备&#xA;&#xA;  BLEServer *pServer = BLEDevice::createServer(); // 创建一个蓝牙服务器&#xA;  pServer-&amp;gt;setCallbacks(new MyServerCallbacks()); //服务器回调函数设置为MyServerCallbacks&#xA;&#xA;  BLEService *pService = pServer-&amp;gt;createService(SERVICE_UUID); //创建一个BLE服务&#xA;&#xA;  pCharacteristic = pService-&amp;gt;createCharacteristic(CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY); &#xA;//创建一个(读)特征值 类型是通知&#xA;  pCharacteristic-&amp;gt;addDescriptor(new BLE2902());&#xA;//为特征添加一个描述&#xA;&#xA;  BLECharacteristic *pCharacteristic = pService-&amp;gt;createCharacteristic(CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE);&#xA; //创建一个(写)特征 类型是写入&#xA;  pCharacteristic-&amp;gt;setCallbacks(new MyCallbacks());&#xA;//为特征添加一个回调&#xA;&#xA;  pService-&amp;gt;start();                  //开启服务&#xA;  pServer-&amp;gt;getAdvertising()-&amp;gt;start(); //服务器开始广播&#xA;  Serial.println(&amp;#34;Waiting a client connection to notify...&amp;#34;);&#xA;}&#xA;void setup()&#xA;{&#xA;  Serial.begin(115200);&#xA;  setupBLE(&amp;#34;ESP32BLE&amp;#34;); //设置蓝牙名称&#xA;}&#xA;&#xA;void loop()&#xA;{&#xA;  long now = millis(); //记录当前时间&#xA;  if (now - lastMsg &amp;gt; 1000)&#xA;  { //每隔1秒发一次信号&#xA;    if (deviceConnected &amp;amp;&amp;amp; rxload.length() &amp;gt; 0)&#xA;    {&#xA;      String str = rxload;&#xA;      Serial.println(&amp;#34;send&amp;#34;);&#xA;      if (str==&amp;#34;10086&amp;#34;)&#xA;      {&#xA;        Serial.println(&amp;#34;get&amp;#34;);&#xA;        const char *newValue = &amp;#34;OK&amp;#34;; //str.c_str();&#xA;        pCharacteristic-&amp;gt;setValue(newValue);&#xA;        pCharacteristic-&amp;gt;notify();&#xA;      }&#xA;    }&#xA;    lastMsg = now; //刷新上一次发送数据的时间&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#include &amp;lt;BLEDevice.h&amp;gt;&#xA;#include &amp;lt;BLEUtils.h&amp;gt;&#xA;#include &amp;lt;BLEServer.h&amp;gt;&#xA;&#xA;// 访问下述网站生成自己的UUIDs:&#xA;// https://www.uuidgenerator.net/&#xA;&#xA;#define SERVICE_UUID        &amp;#34;b3f48ce7-6322-49e4-ab01-e672744db6fb&amp;#34;&#xA;#define CHARACTERISTIC_UUID &amp;#34;ef6a6b6a-5a46-474c-8b2a-93f05a2179f3&amp;#34;&#xA;&#xA;void setup() {&#xA;  Serial.begin(115200);&#xA;  Serial.println(&amp;#34;BLE开启！&amp;#34;);&#xA;&#xA;  BLEDevice::init(&amp;#34;ESP32-Test&amp;#34;);    //初始化&#xA;  BLEServer *pServer = BLEDevice::createServer();   //创建server&#xA;  BLEService *pService = pServer-&amp;gt;createService(SERVICE_UUID);  //创建Service&#xA;  BLECharacteristic *pCharacteristic = pService-&amp;gt;createCharacteristic( CHARACTERISTIC_UUID,BLECharacteristic::PROPERTY_READ |BLECharacteristic::PROPERTY_WRITE);&#xA;&#xA;  pCharacteristic-&amp;gt;setValue(&amp;#34;Hello World From ESP32&amp;#34;);&#xA;  pService-&amp;gt;start();   //服务开启&#xA;  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();&#xA;  // BLEAdvertising *pAdvertising = pServer-&amp;gt;getAdvertising();  //兼容写法  this still is working for backward compatibility&#xA;  pAdvertising-&amp;gt;addServiceUUID(SERVICE_UUID);   //设置服务UUID&#xA;  pAdvertising-&amp;gt;setScanResponse(true);   //开启扫描响应（？）&#xA;  pAdvertising-&amp;gt;setMinPreferred(0x06);  // 解决ipone手机连接问题，functions that help with iPhone connections issue&#xA;  pAdvertising-&amp;gt;setMinPreferred(0x12);&#xA;  BLEDevice::startAdvertising();   //开始广播&#xA;  Serial.println(&amp;#34;Characteristic（特征）已定义，你可以在手机上查看&amp;#34;);&#xA;}&#xA;&#xA;void loop() {&#xA;  delay(2000);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;不断的扫描蓝牙设备&#34;&gt;不断的扫描蓝牙设备&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#include &amp;lt;BLEDevice.h&amp;gt;&#xA;#include &amp;lt;BLEUtils.h&amp;gt;&#xA;#include &amp;lt;BLEScan.h&amp;gt;&#xA;#include &amp;lt;BLEAdvertisedDevice.h&amp;gt;&#xA;&#xA;int scanTime = 5; //In seconds&#xA;BLEScan* pBLEScan;&#xA;&#xA;class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {&#xA;    void onResult(BLEAdvertisedDevice advertisedDevice) {&#xA;      Serial.printf(&amp;#34;Advertised Device: %s \n&amp;#34;, advertisedDevice.toString().c_str());&#xA;    }&#xA;};&#xA;&#xA;void setup() {&#xA;  Serial.begin(115200);&#xA;  Serial.println(&amp;#34;Scanning...&amp;#34;);&#xA;&#xA;  BLEDevice::init(&amp;#34;&amp;#34;);&#xA;  pBLEScan = BLEDevice::getScan(); //create new scan&#xA;  pBLEScan-&amp;gt;setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());&#xA;  pBLEScan-&amp;gt;setActiveScan(true); //active scan uses more power, but get results faster&#xA;  pBLEScan-&amp;gt;setInterval(100);&#xA;  pBLEScan-&amp;gt;setWindow(99);  // less or equal setInterval value&#xA;}&#xA;&#xA;void loop() {&#xA;  // put your main code here, to run repeatedly:&#xA;  BLEScanResults foundDevices = pBLEScan-&amp;gt;start(scanTime, false);&#xA;  Serial.print(&amp;#34;Devices found: &amp;#34;);&#xA;  Serial.println(foundDevices.getCount());&#xA;  Serial.println(&amp;#34;Scan done!&amp;#34;);&#xA;  pBLEScan-&amp;gt;clearResults();   // delete results fromBLEScan buffer to release memory&#xA;  delay(2000);&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;iBeacon 是苹果公司2013年9月发布的移动设备用OS（iOS7）上配备的新功能。其工作方式是，配备有 低功耗蓝牙（BLE）通信功能的设备使用BLE技术向周围发送自己特有的ID，接收到该ID的应用软件会根据该ID采取一些行动。比如，在店铺里设置iBeacon通信模块的话，便可让iPhone和iPad上运行一资讯告知服务器，或者由服务器向顾客发送折扣券及进店积分。此外，还可以在家电发生故障或停止工作时使用iBeacon向应用软件发送资讯。&lt;/p&gt;</description>
    </item>
    <item>
      <title>TTGO T-Wristband 继续研究　(更新:2021.1.9)</title>
      <link>/ai/2020/110817-t-wristband/</link>
      <pubDate>Sun, 08 Nov 2020 17:32:56 +0800</pubDate>
      <guid>/ai/2020/110817-t-wristband/</guid>
      <description>&lt;p&gt;TTGO手环维修回来，继续研究。其实最想做的还是用多个电池组合成一个手环。 :)　那应该是个风景线。想着无忧无虑使用十天的样子，象个土豪。&lt;/p&gt;&#xA;&lt;p&gt;等我solidwork大法学成，自己3d打印一个。实际就是把表带分成6-10块，每一块都安装电池(例如100mha)，几块连接在一起，形成一个600-1000mha的”超级电池“。虽然看起来丑一些，但一种供电局家属的那种感觉是非常舒适的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>动态域名解析方案 DDNS</title>
      <link>/it/2020/110721-ddns/</link>
      <pubDate>Sat, 07 Nov 2020 21:23:44 +0800</pubDate>
      <guid>/it/2020/110721-ddns/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../110721-ddns-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;想用家里的电脑来建立自己的服务器，一来是方便自己随时处理，再者保存在自己电脑上也保险。现在经常家里都会有升级或闲置的电脑或笔记本，甚至淘汰下的手机也是可以做一个简单服务器的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>go库 -- Ebiten: 2D开源游戏库</title>
      <link>/code/2020/110612-ebiten/</link>
      <pubDate>Fri, 06 Nov 2020 12:30:32 +0800</pubDate>
      <guid>/code/2020/110612-ebiten/</guid>
      <description>&lt;h3 id=&#34;ebiten&#34;&gt;Ebiten&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../110612-ebiten-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/hajimehoshi/ebiten&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://ebiten.org/&#34;&gt;官网有文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://yami.io/ebiten-1/&#34;&gt;网友文章学习一下&lt;/a&gt;，不过看起来有点老了，可能针对1.0版吧。&lt;/p&gt;&#xA;&lt;p&gt;简单跨平台，据说支持Windows(No Cgo!)、macOS、Linux、FreeBSD、Android、iOS、WebAssembly。或许得益于golang本身的跨平台性。不过wasm方式我也没有成功。&lt;/p&gt;</description>
    </item>
    <item>
      <title>go库 -- WasmServe: Wasm的HTTP服务器</title>
      <link>/code/2020/110611-wasmserve/</link>
      <pubDate>Fri, 06 Nov 2020 11:08:52 +0800</pubDate>
      <guid>/code/2020/110611-wasmserve/</guid>
      <description>&lt;p&gt;一个像gopherjs的用于Wasm测试的HTTP服务器&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/hajimehoshi/wasmserve&#34;&gt;github地址&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;示例：&lt;/p&gt;&#xA;&lt;p&gt;运行远程包：wasmserve -tags=example github.com/hajimehoshi/wasmserve/example&lt;/p&gt;&#xA;&lt;p&gt;这里必须要-tags=example，暂时不知何意。打开浏览器http://localhost:8080/可以看到结果。&lt;/p&gt;</description>
    </item>
    <item>
      <title>资金投资记录</title>
      <link>/money/2020/110609-money/</link>
      <pubDate>Fri, 06 Nov 2020 09:49:58 +0800</pubDate>
      <guid>/money/2020/110609-money/</guid>
      <description>&lt;p&gt;这里记录我的资金投资情况，即是总结，也避免与原有资金混乱。&lt;/p&gt;&#xA;&lt;p&gt;2020.11.6&lt;/p&gt;&#xA;&lt;p&gt;其它：&lt;/p&gt;&#xA;&lt;p&gt;原有现金5172&lt;/p&gt;&#xA;&lt;p&gt;将4万临时转入速盈。下午取另外的5万元。速盈年化2.12，只作临时存储，减少闲置损失。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《创业年代》</title>
      <link>/other/2020/110608-chuang/</link>
      <pubDate>Fri, 06 Nov 2020 08:03:09 +0800</pubDate>
      <guid>/other/2020/110608-chuang/</guid>
      <description>&lt;p&gt;《创业年代》&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../110608-chuang-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;“1978年，我国实行改革开放,以邝铭筹、洪雨桥、周定北等为代表的科技工作者，他们顺应改革开放潮流进行艰苦创业，同中关村的成长一起，不断尝试、失败，不断创新、改革，他们终于迎来创业的逐渐成功。邝铭筹、周定北、江城等人的事业迎来蓬勃发展期，项目得以接续并如火如荼展开。而洪雨桥也因郝兵导师组装电脑的事件看到了巨大商机，同郝兵一起组成事业搭档，成立了公司。至此，各种形式的公司如雨后春笋般在白颐路上出现，创业者们在一间间窄小阴暗的陋室中开始了筚路蓝缕的创业之路。”&lt;/p&gt;</description>
    </item>
    <item>
      <title>客户需求整理：商城/分销/智能分析/积分/问卷</title>
      <link>/other/2020/110509-request/</link>
      <pubDate>Thu, 05 Nov 2020 09:17:15 +0800</pubDate>
      <guid>/other/2020/110509-request/</guid>
      <description>&lt;h4 id=&#34;需求者刘雪松&#34;&gt;需求者：刘雪松&lt;/h4&gt;&#xA;&lt;h4 id=&#34;客户需求及分析&#34;&gt;客户需求及分析：&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;商品销售：分级代理＋二级分销&lt;/li&gt;&#xA;&lt;li&gt;用户积分：&#xA;(1). 文章/视频阅读获积分&#xA;(2). 填写问卷积分&#xA;(3). 分享二维码送积分&#xA;(4). 签到送积分&#xA;(5). 步数送积分（小程序才支持获取用户步数）&#xA;(6). 购物积分&#xA;3.引导式的问卷填写(问题自动咨询、处理系统)&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h4 id=&#34;方法&#34;&gt;方法：&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;先使用成品，后期按需求二次开发和扩展&lt;/li&gt;&#xA;&lt;li&gt;没有成品，分期开发&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h4 id=&#34;调查&#34;&gt;调查：&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;微客到：wkdao.com&lt;/p&gt;</description>
    </item>
    <item>
      <title>快速学习一下Shader：《The Book of Shaders》</title>
      <link>/it/2020/110322-shader/</link>
      <pubDate>Tue, 03 Nov 2020 22:35:09 +0800</pubDate>
      <guid>/it/2020/110322-shader/</guid>
      <description>&lt;p&gt;当前阅读位置 &lt;a href=&#34;https://thebookofshaders.com/05/?lan=ch&#34;&gt;https://thebookofshaders.com/05/?lan=ch&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;我使用了 &lt;a href=&#34;https://github.com/patriciogonzalezvivo/glslViewer&#34;&gt;glslViewer&lt;/a&gt; 来查看代码的效果。而 &lt;a href=&#34;https://github.com/patriciogonzalezvivo/glslCanvas&#34;&gt;glslCanvas&lt;/a&gt; 这个Web版的测试没有成功。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/patriciogonzalezvivo/thebookofshaders&#34;&gt;这里也有本书的示例代码下载&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;GLSL 代表 openGL Shading Language，openGL 着色语言&lt;/p&gt;&#xA;&lt;p&gt;来个HelloWorld&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#ifdef GL_ES              // 检查 GL_ES 是否被定义，这个通常用在移动端或浏览器的编译中&#xA;precision mediump float;  // 设定所有的浮点值都是中等精度 precision lowp float; precision highp float;&#xA;#endif&#xA;&#xA;uniform float u_time;&#xA;&#xA;void main() {&#xA;&#x9;gl_FragColor = vec4(1.0,0.0,1.0,1.0);    // gl_FragColor用于呈现的颜色&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;uniform （统一值）&lt;/p&gt;</description>
    </item>
    <item>
      <title>神奇的着色器：Shader</title>
      <link>/it/2020/102811-shader/</link>
      <pubDate>Wed, 28 Oct 2020 11:59:30 +0800</pubDate>
      <guid>/it/2020/102811-shader/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://thebookofshaders.com/?lan=ch&#34;&gt;The Book of Shaders中文版&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;闪电＋玻璃下滑的雨 &lt;a href=&#34;https://www.shadertoy.com/view/ltffzl&#34;&gt;https://www.shadertoy.com/view/ltffzl&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;追月 &lt;a href=&#34;https://www.shadertoy.com/view/ldXXDj&#34;&gt;https://www.shadertoy.com/view/ldXXDj&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;蓝天白云 &lt;a href=&#34;https://www.shadertoy.com/view/4tdSWr&#34;&gt;https://www.shadertoy.com/view/4tdSWr&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;照明弹 &lt;a href=&#34;https://www.shadertoy.com/view/3dGyRc&#34;&gt;https://www.shadertoy.com/view/3dGyRc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;膨胀 &lt;a href=&#34;https://www.shadertoy.com/view/lsySzd&#34;&gt;https://www.shadertoy.com/view/lsySzd&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;极光 &lt;a href=&#34;https://www.shadertoy.com/view/XtGGRt&#34;&gt;https://www.shadertoy.com/view/XtGGRt&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;流体火焰 &lt;a href=&#34;https://www.shadertoy.com/view/3sKczc&#34;&gt;https://www.shadertoy.com/view/3sKczc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;时间穿越 &lt;a href=&#34;https://www.shadertoy.com/view/wdtczM&#34;&gt;https://www.shadertoy.com/view/wdtczM&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;宇宙  &lt;a href=&#34;https://www.shadertoy.com/view/XlfGRj&#34;&gt;https://www.shadertoy.com/view/XlfGRj&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;城市俯看 &lt;a href=&#34;https://www.shadertoy.com/view/wdfGW4&#34;&gt;https://www.shadertoy.com/view/wdfGW4&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;飞越山峰 &lt;a href=&#34;https://www.shadertoy.com/view/4slGD4&#34;&gt;https://www.shadertoy.com/view/4slGD4&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;空中飞行 &lt;a href=&#34;https://www.shadertoy.com/view/XtS3DD&#34;&gt;https://www.shadertoy.com/view/XtS3DD&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;有机玻璃网格 &lt;a href=&#34;https://www.shadertoy.com/view/Mld3Rn&#34;&gt;https://www.shadertoy.com/view/Mld3Rn&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;月色大海 &lt;a href=&#34;https://www.shadertoy.com/view/tdKcWD&#34;&gt;https://www.shadertoy.com/view/tdKcWD&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎: Shader 着色器 代码收集</title>
      <link>/it/2020/102616-shader/</link>
      <pubDate>Mon, 26 Oct 2020 16:13:45 +0800</pubDate>
      <guid>/it/2020/102616-shader/</guid>
      <description>&lt;p&gt;考虑文件大小，GIF作了一定的压缩，效果有一些损失。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-02.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-03.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-04.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-05.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-06.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-07.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-08.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-10.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-11.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-12.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-13.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-14.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-15.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-16.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-17.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-18.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../102616-shader-19.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-2d雾效果&#34;&gt;1. 2D雾效果&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.bilibili.com/video/av55565296/&#34;&gt;B站有讲解的一个效果&lt;/a&gt;，一步一步告诉你如何实现。&lt;/p&gt;&#xA;&lt;p&gt;话说高级程序员靠数学。要想做出好的程序，数学是必不可少的工具。&lt;/p&gt;</description>
    </item>
    <item>
      <title>大众健康类、运动类产品</title>
      <link>/health/2020/102307-play/</link>
      <pubDate>Fri, 23 Oct 2020 07:57:51 +0800</pubDate>
      <guid>/health/2020/102307-play/</guid>
      <description>&lt;p&gt;在市面上，针对大众的运动型健康产品基本没有。&lt;/p&gt;&#xA;&lt;p&gt;五维律动微运动仪着力打造此类型产品。产品主打大众健康，便携，简单易用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎: 数学基础</title>
      <link>/it/2020/102222-godot/</link>
      <pubDate>Thu, 22 Oct 2020 22:06:22 +0800</pubDate>
      <guid>/it/2020/102222-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.jianshu.com/p/e8177e96e877?utm_campaign=maleskine&amp;amp;utm_content=note&amp;amp;utm_medium=seo_notes&amp;amp;utm_source=recommendation&#34;&gt;这里可以补补课：Godot向量数学&lt;/a&gt;。这是为了理解shader的运算。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../101918-shader-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;关于向量，需要考虑的一个重要点是它们仅表示 相对 方向和大小。没有一个向量的位置的概念。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../101918-shader-03.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;向量表示方向和幅度。仅表示幅值的值称为 标量。&lt;/p&gt;&#xA;&lt;h4 id=&#34;向量运算&#34;&gt;向量运算&lt;/h4&gt;&#xA;&lt;p&gt;var c = a + b     #(2,5) + (3,1) = (5,6)&lt;/p&gt;</description>
    </item>
    <item>
      <title>基于个人微信的付费下载</title>
      <link>/it/2020/102109-down/</link>
      <pubDate>Wed, 21 Oct 2020 09:16:13 +0800</pubDate>
      <guid>/it/2020/102109-down/</guid>
      <description>&lt;p&gt;应用场景：&lt;/p&gt;&#xA;&lt;p&gt;本人做了一下原创的工具，考虑到对劳动成果的转换，也为了方便使用时下载，做一个基于个人微信的付费下载工具。&lt;/p&gt;&#xA;&lt;p&gt;流程：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;网友点击链接，进入下载页面。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎: 信号</title>
      <link>/it/2020/102009-godot/</link>
      <pubDate>Tue, 20 Oct 2020 09:08:03 +0800</pubDate>
      <guid>/it/2020/102009-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://indienova.com/groups/post/29674&#34;&gt;原地址见这里&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;一类自定义信号&#34;&gt;一、类自定义信号&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;extends Node&#xA;&#xA;signal custom_signal(para1)  #定义信号&#xA;&#xA;func _ready():&#xA;&#x9;self.connect(&amp;#34;custom_signal&amp;#34;, self, &amp;#34;_on_test_node_custom_signal&amp;#34;, [&amp;#34;ab&amp;#34;,1000])  #连接信号&#xA;&#xA;func _input(event):&#xA;&#x9;if event is InputEventMouseButton:&#xA;&#x9;   if event.button_index == BUTTON_LEFT and event.pressed:&#xA;&#x9;      emit_signal(&amp;#34;custom_signal&amp;#34;,&amp;#34;what&amp;#34;) #发送信号&#xA;&#xA;#信号回调&#xA;func _on_test_node_custom_signal(para1,para2,para3):&#xA;     print(para1,&amp;#34; &amp;#34;,para2,&amp;#34; &amp;#34;,para3)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;上面的代码中，para1 对应&amp;quot;what&amp;quot;,para2对应&amp;quot;ab&amp;quot;,para3对应1000&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎: Shader 着色器</title>
      <link>/it/2020/101918-shader/</link>
      <pubDate>Mon, 19 Oct 2020 18:11:30 +0800</pubDate>
      <guid>/it/2020/101918-shader/</guid>
      <description>&lt;p&gt;着色器是一个神奇的存在。&lt;a href=&#34;https://docs.godotengine.org/zh_CN/latest/tutorials/shading/index.html&#34;&gt;官方资料看这里&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.bilibili.com/video/BV1F4411N7vL?from=search&amp;amp;seid=12445283045710724219&#34;&gt;一个老外的分步视频&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://thebookofshaders.com/?lan=ch&#34;&gt;The Book of Shaders&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Shader，是运行在GPU上的程序，中文称为着色器。它的主要用途是对三维物体进行着色处理，对光与影进行计算，以及控制纹理颜色的呈现等，最终，将游戏引擎中的几何数据转化为屏幕上的模型、场景以及特效。&lt;/p&gt;</description>
    </item>
    <item>
      <title>是自我毁灭还是别人帮助</title>
      <link>/other/2020/101914-ai/</link>
      <pubDate>Mon, 19 Oct 2020 14:50:44 +0800</pubDate>
      <guid>/other/2020/101914-ai/</guid>
      <description>&lt;p&gt;《智能逆袭 Next》&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../101914-ai-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;即使AI只有1个月的智能，只要它学会了自我学习，就意味着离超级人工智能近在咫尺了，离末日也就不远了。“当人类第一次仰望星空的时候,离文明就不远了”&lt;/p&gt;</description>
    </item>
    <item>
      <title>go mod</title>
      <link>/code/2020/101912-mod/</link>
      <pubDate>Mon, 19 Oct 2020 12:03:31 +0800</pubDate>
      <guid>/code/2020/101912-mod/</guid>
      <description>&lt;p&gt;GO111MODULE有三个值：off, on和auto（默认值）。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;GO111MODULE=off，go命令行将不会支持module功能，寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。&#xA;GO111MODULE=on，go命令行会使用modules，而一点也不会去GOPATH目录下查找。&#xA;GO111MODULE=auto，默认值，go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形：&#xA;    当前目录在GOPATH/src之外且该目录包含go.mod文件&#xA;    当前文件在包含go.mod文件的目录下面。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;初始化：go mod init 模块名 (新项目用它就可以了)&lt;/p&gt;</description>
    </item>
    <item>
      <title>回归：字符界面库 Tview</title>
      <link>/code/2020/101908-tview/</link>
      <pubDate>Mon, 19 Oct 2020 08:34:39 +0800</pubDate>
      <guid>/code/2020/101908-tview/</guid>
      <description>&lt;p&gt;字符界面与图形界面只能说各有优势。“老年人”比较喜迎字符界面：简单、轻巧，对电脑要求低，专注于内容。&lt;/p&gt;&#xA;&lt;p&gt;考虑到&lt;a href=&#34;http://i.scwy.net/it/2020/101308-colly/&#34;&gt;爬电影&lt;/a&gt;通过命令行还是比较的反人类，想给它搭个简单的命令行界面。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/rivo/tview&#34;&gt;tview库&lt;/a&gt;是golang下的界面库，完成基本的界面看来不是问题。&lt;/p&gt;&#xA;&lt;p&gt;还是先HelloWorld&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;github.com/rivo/tview&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;box := tview.NewBox().SetBorder(true).SetTitle(&amp;#34;Hello, world!&amp;#34;)&#xA;&#x9;if err := tview.NewApplication().SetRoot(box, true).Run(); err != nil {&#xA;&#x9;&#x9;panic(err)&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;看起来还是比较简单，大致学习了一下，更改了电影爬虫。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Webify 把命令输入／输出作为客户端信息</title>
      <link>/it/2020/101823-webify/</link>
      <pubDate>Sun, 18 Oct 2020 23:19:25 +0800</pubDate>
      <guid>/it/2020/101823-webify/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/beefsack/webify&#34;&gt;https://github.com/beefsack/webify&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;webify是一个非常基本的CGI服务器，它将所有的请求转发给一个脚本。设计的目标是尽可能的零配置。&lt;/p&gt;&#xA;&lt;p&gt;webify调用您的脚本，并将请求主体写入进程的stdin中。然后，Stdout作为HTTP响应体传递回客户机。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot网络信息的加解密</title>
      <link>/it/2020/101716-godot/</link>
      <pubDate>Sat, 17 Oct 2020 16:18:00 +0800</pubDate>
      <guid>/it/2020/101716-godot/</guid>
      <description>&lt;p&gt;暂时没有找到godot原装的解决&lt;strong&gt;网络数据加解密的功能或函数&lt;/strong&gt;，bing也搜了一遍。也还没有研究到如何对godot进入插件开发。&lt;/p&gt;&#xA;&lt;p&gt;于是发挥“抓得住老鼠就是好猫”的思维，先提出解决方案，再在其中选择一个相对可选择。&lt;/p&gt;</description>
    </item>
    <item>
      <title>游戏创意</title>
      <link>/it/2020/101612-game/</link>
      <pubDate>Fri, 16 Oct 2020 12:30:46 +0800</pubDate>
      <guid>/it/2020/101612-game/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;盈利点：唯一角色／武器设计（网友定制角色样子，武器样子）&lt;/li&gt;&#xA;&lt;li&gt;游戏以本地地图为原型，增强认同感。&lt;/li&gt;&#xA;&lt;li&gt;盈利点：与订餐、快递等整合，可以在游戏中订餐、购物等&lt;/li&gt;&#xA;&lt;li&gt;盈利点：产品广告、产品赞助&lt;/li&gt;&#xA;&lt;li&gt;玩点：实物夺宝&lt;/li&gt;&#xA;&lt;li&gt;发展可能：AR实景增强游戏&lt;/li&gt;&#xA;&lt;li&gt;儿童西游：以西游为背景，用学习知识代替打怪升级、组队&lt;/li&gt;&#xA;&lt;li&gt;让玩家也能参与游戏设计&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>加密、解密、对称加密、非对称加密</title>
      <link>/code/2020/101520-code/</link>
      <pubDate>Thu, 15 Oct 2020 20:16:02 +0800</pubDate>
      <guid>/code/2020/101520-code/</guid>
      <description>&lt;p&gt;在网络游戏中，涉及到数据交互，也就涉及到加解密。后台使用golang，暂还不知道GDScript的解密如何做。&lt;/p&gt;&#xA;&lt;p&gt;理论知识就网上看吧，还是有满多的。比如&lt;a href=&#34;https://zhuanlan.zhihu.com/p/123221394&#34;&gt;这个网友&lt;/a&gt;或&lt;a href=&#34;https://www.cnblogs.com/zichliang/p/16653303.html&#34;&gt;这里&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎: 中文聊天（网络通信）</title>
      <link>/it/2020/101516-godot/</link>
      <pubDate>Thu, 15 Oct 2020 16:57:55 +0800</pubDate>
      <guid>/it/2020/101516-godot/</guid>
      <description>&lt;p&gt;之前也简单的&lt;a href=&#34;http://i.scwy.net/it/2020/033116-godot/&#34;&gt;学习了Godot的网络相关内容&lt;/a&gt;，但一直不明白如何收发中文信息。今天在网上“遨游”的时候发现网友的文章&lt;a href=&#34;https://zhuanlan.zhihu.com/p/162182567&#34;&gt;godot游戏引擎实现TCP和UDP（网络联机，多人游戏）&lt;/a&gt; (此网友出了些东西，看过他的B站视频)，发现别人用的根本就不是这个语句。&lt;/p&gt;&#xA;&lt;p&gt;我的界面如下&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../101516-godot-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;代码改为这样，加上一个中转的golang服务器，整个代码很简单。&lt;/p&gt;</description>
    </item>
    <item>
      <title>书站爬虫／喜马拉雅爬虫</title>
      <link>/it/2020/101309-book/</link>
      <pubDate>Tue, 13 Oct 2020 09:36:01 +0800</pubDate>
      <guid>/it/2020/101309-book/</guid>
      <description>&lt;p&gt;记得去年有个兄弟请我做一个书站，也叫小说站：爬取别人的小说内容做个网站。最后不了了之。这次学习爬虫，顺便练练手。&lt;/p&gt;&#xA;&lt;p&gt;至于喜马拉雅，内容丰富，也一直在听。改了一些机制以后，还不知道怎么爬，有机会研究一下。&lt;/p&gt;</description>
    </item>
    <item>
      <title>爬虫Colly应用：查电影链接</title>
      <link>/it/2020/101308-colly/</link>
      <pubDate>Tue, 13 Oct 2020 08:31:41 +0800</pubDate>
      <guid>/it/2020/101308-colly/</guid>
      <description>&lt;p&gt;之前一直在&lt;a href=&#34;https://www.ai66.cc&#34;&gt;此网站&lt;/a&gt;看电影，更新快，内容丰富。但不知道是我的广告插件失效了，还是最近站长丧心病狂：H广告已经导致正式内容无法点击了。虽然理解网站的不容易，但是不能这样本未倒置吧。&lt;/p&gt;&#xA;&lt;p&gt;在试用广告屏蔽无果时，看了看源代码，使用正在学习的爬虫试试。想必我这样一个小站内容，也不至于影响到网站本身。&lt;/p&gt;&#xA;&lt;p&gt;以下代码可以通过三个步骤获取到在线播放地址，而逃过了那些乱七八X的网站。&lt;/p&gt;</description>
    </item>
    <item>
      <title>爬虫 Colly</title>
      <link>/it/2020/101211-colly/</link>
      <pubDate>Mon, 12 Oct 2020 11:48:50 +0800</pubDate>
      <guid>/it/2020/101211-colly/</guid>
      <description>&lt;p&gt;Golang网络爬虫框架gocolly/colly是比较有名的，考虑自做一个获取上市信息的软件，研究一下它。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/majianguo/p/8150060.html&#34;&gt;这位网友讲得更多一些&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;依照着学习一下代码，主要是如何分离有效数据。&lt;/p&gt;</description>
    </item>
    <item>
      <title>虚拟Wifi，Wifi广告机</title>
      <link>/ai/2020/100908-vwifi/</link>
      <pubDate>Fri, 09 Oct 2020 08:36:35 +0800</pubDate>
      <guid>/ai/2020/100908-vwifi/</guid>
      <description>&lt;p&gt;所谓WIFI广告机，就是利用设备虚拟出若干不能连接的wifi名称，当别人查看wifi时，能看到这些名称，达到广告的目的。&lt;/p&gt;&#xA;&lt;p&gt;设备可以是esp8266和esp32都可以，我准备将它集成到手环中，不过似乎程序占用越来越大了。代码还没来得急消化，另外也需要添加网络配置功能，但核心就是以下的了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pi拍照、视频及流媒体</title>
      <link>/it/2020/100615-pi/</link>
      <pubDate>Tue, 06 Oct 2020 15:48:58 +0800</pubDate>
      <guid>/it/2020/100615-pi/</guid>
      <description>&lt;h4 id=&#34;摄像头的基本使用&#34;&gt;摄像头的基本使用&lt;/h4&gt;&#xA;&lt;p&gt;raspistill -o image.jpg&lt;/p&gt;&#xA;&lt;p&gt;sudo raspistill -o image%d.jpg -rot 180 -w 1024 -h 768 -t 20000 -tl 5000 -v&lt;/p&gt;&#xA;&lt;p&gt;-v：调试信息查看&lt;/p&gt;&#xA;&lt;p&gt;-rot：图像旋转角度，只支持 0、90、180、270 度&lt;/p&gt;&#xA;&lt;p&gt;-o：图像输出地址，例如image.jpg，如果文件名为“-”，将输出发送至标准输出设备&lt;/p&gt;</description>
    </item>
    <item>
      <title>Yacy 开源的对等 Web 搜索引擎，最好淘汰百度</title>
      <link>/it/2020/100521-yacy/</link>
      <pubDate>Mon, 05 Oct 2020 21:34:24 +0800</pubDate>
      <guid>/it/2020/100521-yacy/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://www.yacy.net/img/YaCyLogo2011_60.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;官网：&lt;a href=&#34;https://www.yacy.net&#34;&gt;https://www.yacy.net&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;网上一搜，至少2010年就有人提到了。国内受够了百度，插件的解决方案也不少。如果有良心一点的搜索，百度的现状可想而知。而谷歌之类的搜索因为不听政府的号召（关于安全，关于隐私等）不翻墙又看不到，作为IT从业人员，是多么希望谷歌的回归。奈何&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESP32控制I2S的OLED显示屏</title>
      <link>/ai/2020/093020-eps_tft/</link>
      <pubDate>Wed, 30 Sep 2020 20:09:32 +0800</pubDate>
      <guid>/ai/2020/093020-eps_tft/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../093020-eps_tft_01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;购买的OLED&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;芯片：SS1306&#xA;接口：I2C&#xA;分辨率：128x32&#xA;尺寸：0.91&#xA;管脚：4针&#xA;电压：3.3V&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../093020-eps_tft_02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;接口定义：&#xA;ＧＮＤ&#xA;ＶＣＣ&#xA;ＳＣＫ　　　串行时钟输入&#xA;ＳＤＡ　　　串行数据&lt;/p&gt;</description>
    </item>
    <item>
      <title>共享设备MAC？</title>
      <link>/it/2020/092623-mac/</link>
      <pubDate>Sat, 26 Sep 2020 23:57:52 +0800</pubDate>
      <guid>/it/2020/092623-mac/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../092623-mac-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;首先，这里的MAC与苹果电脑没有任何关系。&lt;/p&gt;&#xA;&lt;p&gt;“&#xA;MAC(Media Access Control或者Medium Access Control)地址，意译为媒体访问控制，或称为物理地址、硬件地址，用来定义网络设备的位置。在OSI模型中，第三层网络层负责 IP地址，第二层数据链路层则负责 MAC地址。因此一个主机会有一个MAC地址，而每个网络位置会有一个专属于它的IP地址。&#xA;”&lt;/p&gt;</description>
    </item>
    <item>
      <title>Esp-Now Smartconfig Airkiss</title>
      <link>/it/2020/092618-espnow/</link>
      <pubDate>Sat, 26 Sep 2020 18:39:02 +0800</pubDate>
      <guid>/it/2020/092618-espnow/</guid>
      <description>&lt;p&gt;最近接触eps32，遇到一些协议。&lt;/p&gt;&#xA;&lt;p&gt;smartconfig和&lt;a href=&#34;https://iot.weixin.qq.com/wiki/new/index.html?page=4-1-2&#34;&gt;airkiss&lt;/a&gt;都是用于配置网络，在连接网络之前，使用协议进行网络配置：加入某某wifi网络。前者是乐鑫提出的协议，后者是腾讯的。esp32在低层上都提供了函数进行支持。smartconfig需要专用的程序来完成功能，而airkiss则嵌入了微信中，占据了一些优势，毕竟手机中微信安装率是非常高的，至少国内。&lt;/p&gt;&#xA;&lt;p&gt;（airkiss这个词是谁想出来的？）其实原理都是一样，手机发出广播，这广播里面有Wifi的名字和密码。&lt;/p&gt;</description>
    </item>
    <item>
      <title>时间都去哪儿了，我们的教育怎么了</title>
      <link>/teach/2020/092617-time/</link>
      <pubDate>Sat, 26 Sep 2020 17:20:41 +0800</pubDate>
      <guid>/teach/2020/092617-time/</guid>
      <description>&lt;h2 id=&#34;未完未整理先作记录&#34;&gt;未完，未整理，先作记录。&lt;/h2&gt;&#xA;&lt;h3 id=&#34;声明&#34;&gt;声明：&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;个人观点，难免有所偏见。每个人只能对自己的获取到的信息进行加工和处理，但他获取信息是有限的。这是个人的局限性。&lt;/li&gt;&#xA;&lt;li&gt;不想被约谈，不想被吐槽，可是作为在教育路上的个人反思。&lt;/li&gt;&#xA;&lt;li&gt;一家之言，改变不了教育，只是试图改变自己的做法，尽可能的让孩子小受影响。&lt;/li&gt;&#xA;&lt;li&gt;设为扫码付费查看，主要是把一些不太适合社会媒体的话，放在隐藏那部份，避免被机器“爬”（爬虫）。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../092617-time-02.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>esp32 Sniffer: 人流量检测，MAC探针</title>
      <link>/it/2020/092418-sniffer/</link>
      <pubDate>Thu, 24 Sep 2020 18:54:13 +0800</pubDate>
      <guid>/it/2020/092418-sniffer/</guid>
      <description>&lt;p&gt;具体的东西有&lt;a href=&#34;https://www.pianshen.com/article/2657291153/&#34;&gt;网文可以查看&lt;/a&gt;。这个东西网上已经出来比较久了，今天只是偶然看到，代码总体比较简单。&lt;/p&gt;&#xA;&lt;p&gt;ESP32实现设备的MAC地址获取，输出到串口。使用其它设备（PC或另一块ESP32）来处理获取到的信息，比如MAC对应的公司或人。当然，也可以加个TF卡，白天扫，晚上来处理数据。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESP32 ULP 示例 blink</title>
      <link>/ai/2020/092320-ulp_blink/</link>
      <pubDate>Wed, 23 Sep 2020 20:28:49 +0800</pubDate>
      <guid>/ai/2020/092320-ulp_blink/</guid>
      <description>&lt;p&gt;这是一个利用ULP来实现的指示灯闪烁。代码主体是网上的，但是通过官方编译是自己动的手。&lt;/p&gt;&#xA;&lt;p&gt;ulp/bink.S&lt;/p&gt;&#xA;&lt;p&gt;实现了亮100ms,熄500ms&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#include &amp;#34;soc/soc_ulp.h&amp;#34;     // for WRITE_RTC_REG&#xA;#include &amp;#34;soc/rtc_io_reg.h&amp;#34;  // for RTC_GPIO_*&#xA;&#xA;&#xA;.global entry                // 定义全局入口地址&#xA;.set gpio_2, 12              // 定义一个端口&#xA;.text                        // 正文开始&#xA;&#xA;entry:&#xA;  // use digital function, not rtc function &#xA;  // WRITE_RTC_REG(RTC_IO_TOUCH_PAD2_REG, RTC_IO_TOUCH_PAD2_MUX_SEL_S, 1, 1)&#xA;&#xA;  // 写RTC寄存器，定义GPIO2为输出&#xA;  WRITE_RTC_REG(RTC_GPIO_OUT_REG, RTC_GPIO_OUT_DATA_S + gpio_2, 1, 1)&#xA;&#xA;on:&#xA;  // GPIO输出电平点亮&#xA;  WRITE_RTC_REG(RTC_GPIO_ENABLE_W1TS_REG, RTC_GPIO_ENABLE_W1TS_S + gpio_2, 1, 1)&#xA;  // 循环&#xA;  move  r1, 100           // wait in ms&#xA;  move  r2, off           // return address&#xA;  jump  delay             // call subroutine&#xA;&#xA;off:&#xA;  // 输出电平熄灭&#xA;  WRITE_RTC_REG(RTC_GPIO_ENABLE_W1TC_REG, RTC_GPIO_ENABLE_W1TC_S + gpio_2, 1, 1)&#xA;&#xA;  move  r1, 500           // wait in ms&#xA;  move  r2, on            // return address&#xA;  jump  delay             // call subroutine&#xA;&#xA;delay:&#xA;  wait  8000              // wait 8000 clock ticks at 8MHz -&amp;gt; 1ms&#xA;  sub   r1, r1, 1         // decrement ms count&#xA;  jump  r2, eq            // if ms count is zero then return to caller&#xA;  jump  delay             // else continue to wait&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;main.c&lt;/p&gt;</description>
    </item>
    <item>
      <title>EPS32之Ulp学习摘要</title>
      <link>/ai/2020/092310-ulp/</link>
      <pubDate>Wed, 23 Sep 2020 10:00:56 +0800</pubDate>
      <guid>/ai/2020/092310-ulp/</guid>
      <description>&lt;p&gt;ULP（Ultra Low Power 超低功耗）协处理器可以在主处理器处于深度睡眠模式时，使用 ADC、温度传感器和外部 I2C 传感器执行测量操作。ULP 协处理器可以访问 RTC_SLOW_MEM 内存区域及 RTC_CNTL、RTC_IO、SARADC 等外设寄存器。ULP 协处理器使用 32 位固定宽度的指令，32 位内存寻址，配备 4 个 16 位通用寄存器。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESP-IDF编程　环境搭建</title>
      <link>/ai/2020/092210-esp/</link>
      <pubDate>Tue, 22 Sep 2020 10:15:17 +0800</pubDate>
      <guid>/ai/2020/092210-esp/</guid>
      <description>&lt;p&gt;这是一篇摘录。&lt;a href=&#34;https://docs.espressif.com/projects/esp-idf/zh_CN/latest/esp32/get-started/index.html&#34;&gt;官方这里&lt;/a&gt;有更详细的步骤和说明。&lt;/p&gt;&#xA;&lt;p&gt;我的使用环境为Ubuntu。&lt;/p&gt;&#xA;&lt;ol start=&#34;0&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;准备工作　&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;建个目录克隆项目　git clone &amp;ndash;recursive &lt;a href=&#34;https://github.com/espressif/esp-idf.git&#34;&gt;https://github.com/espressif/esp-idf.git&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;进入目录安装　./install.sh　（我并没有自定义安装目录）&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;设置环境变量，让它随处可用：　. $HOME/esp/esp-idf/export.sh&lt;/p&gt;</description>
    </item>
    <item>
      <title>无人景区景更美</title>
      <link>/other/2020/092110-baiscenery/</link>
      <pubDate>Mon, 21 Sep 2020 10:19:14 +0800</pubDate>
      <guid>/other/2020/092110-baiscenery/</guid>
      <description>&lt;p&gt;旅游就是应该淡季去，看景而非看人。&lt;/p&gt;&#xA;&lt;p&gt;又到国庆了，大长假却哪儿也不敢去，看何时能随心自架。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../092110-baiscenery-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../092110-baiscenery-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../092110-baiscenery-06.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;山上阴晴不定，也造就了一天各自的风景&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../092110-baiscenery-03.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../092110-baiscenery-04.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../092110-baiscenery-05.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;先是看到了单彩虹，晚一些又看到双彩虹，还是比较难得的。适合专业相机拍摄。我这手机也就将就感受一下。&lt;/p&gt;</description>
    </item>
    <item>
      <title>智能眼镜设想</title>
      <link>/ai/2020/091908-eyeglass/</link>
      <pubDate>Sat, 19 Sep 2020 08:27:10 +0800</pubDate>
      <guid>/ai/2020/091908-eyeglass/</guid>
      <description>&lt;p&gt;网上有一种ＶＲ眼镜，样子是这样的：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../091908-eyeglass-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../091908-eyeglass-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;它的设计是把手机放在头部，据此我作了一些改变。&lt;/p&gt;&#xA;&lt;p&gt;以实用、成品容易为原则，以显示提示信息、图片为主，不追求电影类的实时显示。&lt;/p&gt;</description>
    </item>
    <item>
      <title>追求低功耗：ESP32 ULP 协处理器</title>
      <link>/ai/2020/091811-ulp/</link>
      <pubDate>Fri, 18 Sep 2020 11:22:01 +0800</pubDate>
      <guid>/ai/2020/091811-ulp/</guid>
      <description>&lt;p&gt;所有的电子设备都存在一个痛点：电，电，电。追求低功耗更是随身设备的必备技能。看看ESP32的低功耗解决ULP。&lt;/p&gt;&#xA;&lt;p&gt;看看官方关于ULP的介绍：&lt;a href=&#34;https://github.com/espressif/esp-iot-solution/blob/master/documents/low_power_solution/esp32_ulp_co-processor_and_assembly_environment_setup_cn.md&#34;&gt;ESP32 的 ULP 协处理器简介和汇编编译环境设置&lt;/a&gt;。说人话就是：ULP 协处理器是一个超低功耗协处理器。&lt;/p&gt;</description>
    </item>
    <item>
      <title>微信个人收款的自动化解决方案</title>
      <link>/it/2020/091717-wxpay/</link>
      <pubDate>Thu, 17 Sep 2020 17:12:13 +0800</pubDate>
      <guid>/it/2020/091717-wxpay/</guid>
      <description>&lt;p&gt;还是因为&lt;a href=&#34;http://i.scwy.net/go/2020/091108-ocr/&#34;&gt;微信网页协议最近老是出现问题（半夜三更强制退出）&lt;/a&gt;,导致收款判断不准确、不及时，以前的方案需要找到更好的替代。&lt;/p&gt;&#xA;&lt;p&gt;今天用易安卓写了客户端，用于解决手机上的截图，并发送到指定服务器。还存在些小问题，比如后台可能被”杀“，随机性的断开连接，如何长驻后台等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESP32可编程手环TFT屏显示汉字</title>
      <link>/ai/2020/091614-tft/</link>
      <pubDate>Wed, 16 Sep 2020 14:39:39 +0800</pubDate>
      <guid>/ai/2020/091614-tft/</guid>
      <description>&lt;p&gt;话说前些天败了一个&lt;a href=&#34;http://i.scwy.net/it/2020/090908-esp32/&#34;&gt;可编程手环&lt;/a&gt;，这几天废寝忘食的玩的几天。&lt;/p&gt;&#xA;&lt;p&gt;最近添加了显示天气的功能。不过对于英文不咋地的我，还是显示中文吧。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.jianshu.com/p/ea8b6f3a442a&#34;&gt;网友关于TFT_eSPI库如何显示汉字&lt;/a&gt;，添加汉字字库。其实都是画点嘛，这是使用某字体的16x16点阵字库，以前老的文字编辑系统就用各个大点的点阵字库。&lt;/p&gt;&#xA;&lt;p&gt;在线获取点阵字库 &lt;a href=&#34;https://www.23bei.com/tool-223.html&#34;&gt;https://www.23bei.com/tool-223.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;遇到需要解决的问题：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;显示在线图片&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;显示在线汉字 （可用于显示一些信息在手表上）&lt;/p&gt;</description>
    </item>
    <item>
      <title>疫情下的医院诊量：换个角度看健康管理</title>
      <link>/health/2020/091514-hospital/</link>
      <pubDate>Tue, 15 Sep 2020 14:33:14 +0800</pubDate>
      <guid>/health/2020/091514-hospital/</guid>
      <description>&lt;p&gt;疫情之下，可以感知到的医院接诊量大幅度缩水。人从“群居”变为“独居”后，确实会减少去医院的概率。&lt;/p&gt;&#xA;&lt;p&gt;2020年4月17日，国家卫健委《2020年1-2月全国医疗服务情况》显示：全国医院诊疗量缩水四分之一，收入大幅下降。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如果，外星人正在赶来的路上...</title>
      <link>/other/2020/091409-ufo/</link>
      <pubDate>Mon, 14 Sep 2020 09:52:37 +0800</pubDate>
      <guid>/other/2020/091409-ufo/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../091409-ufo-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;如标题所说，如果外星人正在赶来地球的路上。我们要用这两百年如何保护这个生存的家园？&lt;/p&gt;&#xA;&lt;p&gt;“构建人类命运共同体”？习大的口号在这里似乎非常实用。为什么总是类似特郎普这种只顾眼光利益的小人呢。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang在Linux下实现实现图片中文识别</title>
      <link>/code/2020/091108-ocr/</link>
      <pubDate>Fri, 11 Sep 2020 08:00:05 +0800</pubDate>
      <guid>/code/2020/091108-ocr/</guid>
      <description>&lt;p&gt;因为&lt;a href=&#34;/it/2020/042013-wxpay/&#34;&gt;微信网页协议最近老是出现问题（半夜三更强制退出）&lt;/a&gt;，导致付费文章判断不到。考虑通过图片文字识别来解决，可以不需要微信在PC上登陆，改为占用一台物理手机。准备用一台淘汰手机来完成此工作。&lt;/p&gt;&#xA;&lt;p&gt;这里的方案是离开OCR，使用Tesseract。感觉上识别率可用。&lt;/p&gt;&#xA;&lt;p&gt;安装&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo apt install tesseract-ocr&#xA;sudo apt install libtesseract-dev&#xA;sudo apt install tesseract-ocr-chi-sim&#xA;&#xA;//可以查看包含的语言包&#xA;tesseract --list-langs&#xA;&#xA;go get github.com/otiai10/gosseract&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;go代码&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;fmt&amp;#34;&#xA;    &amp;#34;github.com/otiai10/gosseract&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;    client := gosseract.NewClient()&#xA;    defer client.Close()&#xA;    client.SetImage(&amp;#34;/mnt/h/2.jpg&amp;#34;)&#xA;    client.SetLanguage(&amp;#34;chi_sim&amp;#34;)&#xA;    text, _ := client.Text()&#xA;    fmt.Println(text)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://github.com/tesseract-ocr/tesseract/wiki&#34;&gt;这里讲了关于tesseract-ocr的安装&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>LILYGO T-Wristband 可编程的手环</title>
      <link>/ai/2020/090908-esp32/</link>
      <pubDate>Wed, 09 Sep 2020 08:31:11 +0800</pubDate>
      <guid>/ai/2020/090908-esp32/</guid>
      <description>&lt;p&gt;因为最近开发一款大众化的健康产品，购买了一款可以自己编程的手环。其实现在销售的众多手环就是这样的，只是没有开放出来大家编程而已。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../090908-esp32-04.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;“&#xA;智能手环T-Wristband主芯片采用乐鑫ESP32-PICO-D4，Tensilica LX6双核处理器，主频为240MHz，计算能力高达600DMIPS，芯片内置520 KB SRAM， 802.11 b / g / N HT40 Wi-Fi收发器，基带，协议栈和LWIP，集成双模蓝牙（传统蓝牙和BLE低功耗蓝牙）。另外还带有MPU9250九轴MEMS传感器，可以进行姿态检测。搭载一块0.96英寸的IPS炫彩屏幕，触摸按键芯片使用的是：TTP223芯片。&#xA;”&lt;/p&gt;</description>
    </item>
    <item>
      <title>孩子日记</title>
      <link>/teach/2020/090721-riji/</link>
      <pubDate>Mon, 07 Sep 2020 21:49:16 +0800</pubDate>
      <guid>/teach/2020/090721-riji/</guid>
      <description>&lt;p&gt;这是孩子近期打卡(每晚总结的记录)。第6项是总结当天的收获和不足，以及有什么需要爸爸妈妈帮助。和爸爸一起做总结的字就比较少。&lt;/p&gt;&#xA;&lt;p&gt;内容陆续不定时添加。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI视觉系统</title>
      <link>/other/2020/090719-other/</link>
      <pubDate>Mon, 07 Sep 2020 19:20:37 +0800</pubDate>
      <guid>/other/2020/090719-other/</guid>
      <description>&lt;p&gt;这是一种人工智能的视觉系统新思路：&lt;/p&gt;&#xA;&lt;p&gt;在需要检测端安装拍摄设备及网络，发送到各个终端。终端由人工进行智能视觉识别。&lt;/p&gt;&#xA;&lt;p&gt;优势：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;前端系统通过5G及系统高速匹配，发送到后端。&lt;/p&gt;</description>
    </item>
    <item>
      <title>百万理财计划</title>
      <link>/money/2020/082522-100w/</link>
      <pubDate>Tue, 25 Aug 2020 22:09:53 +0800</pubDate>
      <guid>/money/2020/082522-100w/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../082522-100w-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最近在考虑将一处住宅抵押出去，盘活资产。这里为将要到来的资金做一个计划。&lt;/p&gt;&#xA;&lt;p&gt;金额预计为100万和200万，其中抵押为100万，售出房产预计100万。加上手上已有的资金，总共预计可达250万。&lt;/p&gt;</description>
    </item>
    <item>
      <title>读书：《一定要告诉孩子的18堂商业思维课》</title>
      <link>/teach/2020/082519-18/</link>
      <pubDate>Tue, 25 Aug 2020 19:14:39 +0800</pubDate>
      <guid>/teach/2020/082519-18/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../082519-18-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;为孩子的未来创造更多可能性，培养他们能够自由掌握财富的能力。&lt;/p&gt;&#xA;&lt;p&gt;在书店初读觉得挺有意思，也觉得财商是孩子必须尽早学习的技能。书已购回，阅读后摘录并附心得。&lt;/p&gt;</description>
    </item>
    <item>
      <title>e4a 易安卓</title>
      <link>/it/2020/082116-e4a/</link>
      <pubDate>Fri, 21 Aug 2020 16:29:59 +0800</pubDate>
      <guid>/it/2020/082116-e4a/</guid>
      <description>&lt;p&gt;几年以前简单的学过安卓开发，基本没实际用过。偶然看到e4a，即易安卓，作了些简单的学习。&lt;/p&gt;&#xA;&lt;p&gt;e4a上手还是很简单的，毕竟是中文。看起来简单的东西还是能做的，购买也不算贵，例程也比较多。&lt;/p&gt;</description>
    </item>
    <item>
      <title>设想：儿童游戏：学中玩，玩中学，会玩一定会成长</title>
      <link>/other/2020/082016-game/</link>
      <pubDate>Thu, 20 Aug 2020 16:11:50 +0800</pubDate>
      <guid>/other/2020/082016-game/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../082016-game-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;儿童的天性就是喜欢游戏，而现在的教学其实更“死”一些。形象生动的教学自然是更受小朋友喜欢的。&lt;/p&gt;&#xA;&lt;p&gt;如果有一款按不同年龄、知识阶段针对儿童的(电脑/平板)游戏，想必会深受孩子们的喜欢。&lt;/p&gt;</description>
    </item>
    <item>
      <title>没戴口罩出行，就象裸体一般</title>
      <link>/other/2020/081900-kou/</link>
      <pubDate>Wed, 19 Aug 2020 00:03:27 +0800</pubDate>
      <guid>/other/2020/081900-kou/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../081900-kou-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最近国内的疫情还是控制得很好了，我们这里外出，好多也不带口罩了。不过公共交通、一些公共场所还是有要求的。&lt;/p&gt;&#xA;&lt;p&gt;前两天外出办事，考虑到绿色出行，以及进城不开车，开车不进城的原则，选择了地铁。&lt;/p&gt;</description>
    </item>
    <item>
      <title>百信供求: 发现</title>
      <link>/other/2020/081823-baixin/</link>
      <pubDate>Tue, 18 Aug 2020 23:30:57 +0800</pubDate>
      <guid>/other/2020/081823-baixin/</guid>
      <description>&lt;p&gt;百信供求助手：基于手机端的大众供求平台&lt;/p&gt;&#xA;&lt;p&gt;命名为：发现，发现自己的优点／资源，发现别人的优势&lt;/p&gt;&#xA;&lt;h3 id=&#34;拾零&#34;&gt;拾零&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;首先开发微信端&lt;/p&gt;&#xA;&lt;p&gt;任何微信授权用户均可发布&lt;/p&gt;&#xA;&lt;p&gt;小程序&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;简易的发布和查询&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;可以发语音供求信息&lt;/p&gt;</description>
    </item>
    <item>
      <title>345工作室：为30、40、50创造一个工作</title>
      <link>/other/2020/081808-304050/</link>
      <pubDate>Tue, 18 Aug 2020 08:24:06 +0800</pubDate>
      <guid>/other/2020/081808-304050/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../081808-304050-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;现在招聘市场上存在一种现象，普遍不招收年龄偏大的就业者，甚至从30开始。特别是IT行业，都说IT行业是年青人的职业。我以前只认为“小姐姐”是吃青春饭的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎 (十三、杂七杂八)</title>
      <link>/it/2020/081321-godot/</link>
      <pubDate>Thu, 13 Aug 2020 21:17:20 +0800</pubDate>
      <guid>/it/2020/081321-godot/</guid>
      <description>&lt;p&gt;这是一些不知来由的东西，以备后用。&lt;/p&gt;&#xA;&lt;h3 id=&#34;hit触发信号&#34;&gt;hit触发信号&lt;/h3&gt;&#xA;&lt;p&gt;emit_signal(&amp;ldquo;hit&amp;rdquo;)&lt;/p&gt;&#xA;&lt;h3 id=&#34;播放某个随机动画&#34;&gt;播放某个随机动画&lt;/h3&gt;&#xA;&lt;p&gt;var mob_types = [&amp;ldquo;walk&amp;rdquo;, &amp;ldquo;swim&amp;rdquo;, &amp;ldquo;fly&amp;rdquo;]&lt;/p&gt;&#xA;&lt;p&gt;$AnimatedSprite.animation = mob_types[randi() % mob_types.size()]&lt;/p&gt;&#xA;&lt;h3 id=&#34;删除&#34;&gt;删除&lt;/h3&gt;&#xA;&lt;p&gt;queue_free()&lt;/p&gt;&#xA;&lt;h3 id=&#34;随机&#34;&gt;随机&lt;/h3&gt;&#xA;&lt;p&gt;randomize()&lt;/p&gt;&#xA;&lt;p&gt;rand_range(1,4)&lt;/p&gt;&#xA;&lt;h3 id=&#34;实例化&#34;&gt;实例化&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var mob = Mob.instance()  &#xA;add_child(mob)  &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;触发信号&#34;&gt;触发信号&lt;/h3&gt;&#xA;&lt;p&gt;emit_signal(&amp;ldquo;start_game&amp;rdquo;)&lt;/p&gt;&#xA;&lt;h3 id=&#34;播放视频&#34;&gt;播放视频&lt;/h3&gt;&#xA;&lt;p&gt;godot本身支持WebM,Ogg.若要支持其它，需要使用插件，例如：&lt;a href=&#34;https://github.com/KidRigger/godot-videodecoder&#34;&gt;godot-videodecoder&lt;/a&gt;，它可以使用FFmpeg解码。&lt;/p&gt;</description>
    </item>
    <item>
      <title>电影资源</title>
      <link>/other/2020/080808-movie/</link>
      <pubDate>Sat, 08 Aug 2020 08:51:29 +0800</pubDate>
      <guid>/other/2020/080808-movie/</guid>
      <description>&lt;p&gt;这是一些自己下载看的电影，以科幻居多。&lt;/p&gt;&#xA;&lt;p&gt;画质一般，大部份不是4K，也就看内容而已。毕竟只是一个３Ｔ的硬盘。&lt;/p&gt;&#xA;&lt;p&gt;不定期更新、整理，经典的会留下。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/money/2019/080120-dianyin-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/money/2019/080120-dianyin-04.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/money/2019/080120-dianyin-05.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;/money/2019/080120-dianyin-06.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;侏罗纪世界2_4k.mkv*&#xA;心花路放.mkv*&#xA;王者少年.mkv*&#xA;灵犬雪莉.mkv*&#xA;皮肤.mkv*&#xA;安德的游戏.mkv*&#xA;他是龙.mkv*&#xA;美梦成真1998.mkv*&#xA;雷米奇遇记.mkv*&#xA;疯狂的麦克斯4_狂暴之路.mkv*&#xA;在劫难逃.mkv*&#xA;戴夫号飞船.mkv*&#xA;唐顿庄园.mkv*&#xA;绝命毒师_续命之徒.mp4*&#xA;侠盗联盟.mkv*&#xA;这个男人来自地球2_全新纪.mkv*&#xA;星球大战9：天行者崛起 .mp4*&#xA;环太平洋2.mp4*&#xA;空天猎.mp4*&#xA;加勒比海盗5-死无对证.mkv*&#xA;极速车王.mp4*&#xA;铁甲战神.mkv*&#xA;小丑回魂.mp4*&#xA;比悲伤更悲伤的故事4k.mp4*&#xA;天使陷落.mkv*&#xA;双子杀手.mp4*&#xA;毁灭状态.mp4*&#xA;追龙2.mp4*&#xA;为家而战.mkv*&#xA;太空救援.mp4*&#xA;哥斯拉2_怪兽之王.mp4*&#xA;科洛弗悖论.mp4*&#xA;沉睡魔咒2.mp4*&#xA;宝莱坞双雄之战.mp4*&#xA;掠食城市.mp4*&#xA;小丑.mp4*&#xA;阿拉丁真人版.mp4*&#xA;罗宾汉.mp4*&#xA;返老还童.mp4*&#xA;太空生活.mp4*&#xA;孟买酒店.mp4*&#xA;未来世界.mkv*&#xA;无双.mkv*&#xA;黑衣人_全球追缉.mp4*&#xA;一出好戏.mp4*&#xA;地狱男爵_血皇后崛起.mp4*&#xA;勇敢者的游戏_决战丛林.mkv*&#xA;克隆人.mkv*&#xA;遗落战境.mp4*&#xA;雷霆沙赞.mp4*&#xA;性感女特工.mp4*&#xA;密室逃生.mkv*&#xA;喋血战士.mp4*&#xA;烈火英雄.mp4*&#xA;胡桃夹子与四个王国.mp4*&#xA;8号警报.mp4*&#xA;阿特米斯的奇幻历险.mp4*&#xA;钢铁苍穹2.mp4*&#xA;魔发精灵2.mp4*&#xA;性感女特工2.mp4*&#xA;前哨基地.mp4*&#xA;史酷比狗.mp4*&#xA;囧妈.mp4*&#xA;无问西东.mp4*&#xA;星尘.mp4*&#xA;牛仔和外星人.mp4*&#xA;雪国列车.mp4*&#xA;影.mp4*&#xA;铁甲钢拳.mp4*&#xA;美少女特攻队.mp4*&#xA;太阳之泪.mp4*&#xA;鼠胆英雄.mp4*&#xA;无畏警官3.mp4*&#xA;无名之辈.mp4*&#xA;铤而走险.mp4*&#xA;钢铁苍穹.mp4*&#xA;深夜食堂.mp4*&#xA;使徒行者2_谍影行动.mp4*&#xA;大师兄.mp4*&#xA;野性的呼唤.mp4*&#xA;邪不压正.mp4*&#xA;金蝉脱壳.mp4*&#xA;地狱男爵2.mp4*&#xA;来电狂响.mp4*&#xA;送我上青云.mp4*&#xA;建国大业.mp4*&#xA;机器猛犬.mp4*&#xA;神探浦松林.mp4*&#xA;蝎子王5灵魂之书.mp4*&#xA;超级战舰.mp4*&#xA;七十七天.mp4*&#xA;朋友也上床.mp4*&#xA;产科男生.mp4*&#xA;海市蜃楼.mp4*&#xA;武林怪兽.mp4*&#xA;天下第一镖局.mp4*&#xA;猛虫过江.mp4*&#xA;特工绍特加长版.mp4*&#xA;垂直极限.mp4*&#xA;泰坦.mp4*&#xA;勇敢者游戏2_再战巅峰.mp4*&#xA;王牌保镖.mkv*&#xA;沉睡魔咒.mp4*&#xA;多力特的奇幻冒险.mp4*&#xA;世界大战.mp4*&#xA;前任3.mp4*&#xA;救火英雄.mp4*&#xA;梦幻岛.mp4*&#xA;我的间谍前男友.mp4*&#xA;月影杀痕.mp4*&#xA;两只老虎.mp4*&#xA;最长一枪.mp4*&#xA;末世指令.mp4*&#xA;龙之心_致命复仇.mp4*&#xA;摘金奇缘.mp4*&#xA;逃出生天.mp4*&#xA;功夫小镇.mp4*&#xA;舞出我人生之舞所不能.mp4*&#xA;灰猴.mp4*&#xA;疯狂愚蠢的爱.mp4*&#xA;终极失忆.mp4*&#xA;心愿房间.mp4*&#xA;天际浩劫.mp4*&#xA;最后的勇士.mp4*&#xA;星球大对决.mkv*&#xA;海蒂和爷爷.mp4*&#xA;我的宠物是大象.mkv*&#xA;滴答屋.mp4*&#xA;小美人鱼.mp4*&#xA;解放_终局营救.mp4*&#xA;黑暗正义联盟_天启星战争.mp4*&#xA;少林寺十八罗汉.mp4*&#xA;占领.mkv*&#xA;拯救列宁格勒.mp4*&#xA;侏罗纪世界2.mp4*&#xA;大赢家.mp4*&#xA;红场飞龙.mp4*&#xA;永恒代码.mp4*&#xA;我们的四十年.mp4*&#xA;神探狗笨吉.mp4*&#xA;保姆奇遇记.mp4*&#xA;猫.mkv*&#xA;疾速备战.mp4*&#xA;星际探索.mp4*&#xA;威洛比家的孩子们.mp4*&#xA;斯塔比中士_一个美国英雄.mp4*&#xA;天剑修仙传.mp4*&#xA;同族.mp4*&#xA;天蓬归来.mkv*&#xA;大雪怪.mp4*&#xA;催眠裁決.mp4*&#xA;真实犯罪.mkv*&#xA;大地震.mp4*&#xA;学区房72小时.mp4*&#xA;野王.mp4*&#xA;城市猎人.mp4*&#xA;昨天见.mp4*&#xA;神笔奇侠传.mp4*&#xA;侏罗纪星系.mp4*&#xA;受益人.mp4*&#xA;市长夫人的秘密.mp4*&#xA;天气预爆.mp4*&#xA;奇点.mp4*&#xA;热搜.mp4*&#xA;幕后玩家.mp4*&#xA;冷恋时代.mp4*&#xA;龙虾刑警.mp4*&#xA;吾乃母亲.mp4*&#xA;红河.mp4*&#xA;特种兵归来3：绝密战场.mp4*&#xA;热力营救.mp4*&#xA;迫日营救.mp4*&#xA;第一缕曙光.mp4*&#xA;生命之书.mp4*&#xA;机器生活.mp4*&#xA;别告诉她.mp4*&#xA;小妇人.mp4*&#xA;记忆码.mp4*&#xA;哈利波特/&#xA;终结者/&#xA;速度与激情/&#xA;难道不浪漫/&#xA;全球风暴/&#xA;升级/&#xA;呼吸/&#xA;大玩家/&#xA;战斗天使阿丽塔/&#xA;摩天营救/&#xA;时间怪客/&#xA;时间陷阱/&#xA;暴雪将至/&#xA;极限特工3/&#xA;神奇动物/&#xA;窃听风云/&#xA;纳尼亚传奇/&#xA;英伦对决/&#xA;跨越星际/&#xA;霹雳娇娃/&#xA;黑衣人/&#xA;&#xA;狮子王真人版.mp4*&#xA;公牛历险记.mkv*&#xA;玩具总动员4.mkv*&#xA;明月守护者.mkv*&#xA;抢劫坚果店2.mkv*&#xA;生命之书.mkv*&#xA;蜘蛛侠_平行宇宙.mp4*&#xA;蝙蝠侠.缄默.mp4*&#xA;未来机器城.mkv*&#xA;马达加斯加3.mkv*&#xA;未来机器城.mp4*&#xA;大侦探皮卡丘.mp4*&#xA;驯龙高手2.mp4*&#xA;雪人奇缘.mp4*&#xA;千与千寻.国粤日三语.mp4*&#xA;遗失的环节.mkv*&#xA;我的爸爸是森林之王.mkv*&#xA;小海龟大历险.mp4*&#xA;乐高大电影2.mkv*&#xA;爱探险的朵拉_消失的黄金城.mp4*&#xA;超级英雄总动员2.mp4*&#xA;哆啦A梦_大雄的月球探险记.mp4*&#xA;内裤队长.mp4*&#xA;驯龙高手3.mp4*&#xA;神奇乐园历险记.mp4*&#xA;哪吒之魔童降世.mp4*&#xA;红鞋子和七个小矮人.mp4*&#xA;欢乐好声音.mkv*&#xA;纯种狼.mp4*&#xA;亚当斯一家.mp4*&#xA;精灵怪物.mp4*&#xA;精灵怪物_疯狂之旅.mp4*&#xA;遗失的环节.mp4*&#xA;超能战队.mp4*&#xA;料理鼠王.mkv*&#xA;飞屋环游记.mkv*&#xA;玛雅蜜蜂历险记.mp4*&#xA;玩具总动员4.mp4*&#xA;深海历险记.mp4*&#xA;哆啦A梦_大雄的金银岛.mkv*&#xA;罗小黑战记大电影.mp4*&#xA;企鹅公路.mp4*&#xA;蓝精灵_寻找神秘村.mp4*&#xA;海洋奇缘HD1280高清国语配音中字.mp4*&#xA;哈尔的移动城堡.mp4*&#xA;犬之岛.mp4*&#xA;玛雅蜜蜂历险记2.mp4*&#xA;早期人类.mp4*&#xA;冰雪奇缘2.mp4*&#xA;虫林大作战.mp4*&#xA;怪物岛.mkv*&#xA;绿毛怪格林奇.mp4*&#xA;神奇马戏团之动物饼干.mkv*&#xA;变身特工.mp4*&#xA;阿唐奇遇HD1280高清国语中字.mp4*&#xA;无敌原始人.mp4*&#xA;冰雪女王4_魔镜世界.mp4*&#xA;动物特工局.mp4*&#xA;森林奇缘.mp4*&#xA;精灵旅社3.mp4*&#xA;神宠鲁弗斯大冒险.mp4*&#xA;精灵怪物＿疯狂之旅..mkv*&#xA;精灵旅社1.mp4*&#xA;超人总动画2.mp4*&#xA;赛尔号大电影7_疯狂机器城.mp4*&#xA;哆啦A梦：新·大雄的日本诞生.mkv*&#xA;盗梦特攻队.mp4*&#xA;三傻闹地球.mp4*&#xA;来了只发火龙.mp4*&#xA;小企鹅大长征2.mp4*&#xA;提托与鸟儿们.mp4*&#xA;魔法总动员.mp4*&#xA;神秘世界历险记4.mp4*&#xA;动物保卫战2.mp4*&#xA;神奇女侠_血脉.mp4*&#xA;妈妈咪鸭.mp4*&#xA;潜艇总动员_海底两万里.mp4*&#xA;小鸟总动员.mp4*&#xA;精灵旅社2.mp4*&#xA;许愿树.mp4*&#xA;玛雅蜜蜂历险记2蜜糖游戏.mp4*&#xA;冰雪大作战2.mp4*&#xA;西葫芦的生活.mp4*&#xA;一飞冲天.mp4*&#xA;帝企鹅日记_超清.mp4*&#xA;大坏狐狸的故事.mp4*&#xA;闪闪小超人.mp4*&#xA;地球母亲.mkv*&#xA;龙族：救援骑士寻找黄金龙&#xA;精灵小王子.mp4*&#xA;小羊肖恩2.mp4*&#xA;正义联盟大战致使五人组.mp4*&#xA;旅行吧_井底之蛙.mp4*&#xA;企鹅联盟.mp4*&#xA;鲁滨逊漂流记.mkv*&#xA;寻梦环游记.mp4*&#xA;蜡笔总动员.mp4*&#xA;迈克尔·杰克逊的万圣节.mp4*&#xA;驯龙高手_归家.mp4*&#xA;聪明的一休/&#xA;西游记的故事/&#xA;小世界-法国动画片/&#xA;康斯坦丁_恶魔之城/&#xA;神偷奶爸3/&#xA;葫芦兄弟/&#xA;阿凡提的故事(14集全)/&#xA;雪怪大冒险/&#xA;小小爱因斯坦/&#xA;狮子王/&#xA;&#xA;&#xA;攀登者.4K.HD国语中字.mp4*&#xA;流浪地球4K.mp4*&#xA;中国机长.mp4*&#xA;扫毒2_天地对决.mp4*&#xA;我和我的祖国.mp4*&#xA;银河补习班.mp4*&#xA;红海行动.mp4*&#xA;西虹市首富.mp4*&#xA;哪吒之魔童降世.mp4*&#xA;我不是药神.mp4*&#xA;战狼2.mp4*&#xA;飞驰人生.mp4*&#xA;扫毒.mp4*&#xA;疯狂外星人.mp4*&#xA;钟馗诛妖传.mp4*&#xA;中国推销员.mp4*&#xA;反贪风暴4.mp4*&#xA;叶问4.mp4*&#xA;反贪风暴3.mkv*&#xA;&#xA;&#xA;攻壳机动队.mkv*&#xA;楚门的世界.mkv*&#xA;超体.mkv*&#xA;猩球崛起3-终极之战.mkv*&#xA;星际特工-千星之城.mkv*&#xA;肖申克的救赎.mp4*&#xA;护垫侠.mp4*&#xA;掠食城市.mp4*&#xA;游侠索罗_星球大战外传.mp4*&#xA;咯咯老师.mp4*&#xA;星球大战8-最后的绝地武士.mp4*&#xA;缩小人生.mp4*&#xA;我是传奇2007.mp4*&#xA;决战中途岛.mp4*&#xA;机械师2_复活.rmvb*&#xA;&#xA;&#xA;黄石国家公园的瀑布4K.mkv*&#xA;70周年大阅兵.mp4*&#xA;地球_神奇的一天.mp4*&#xA;人类纪.mp4*&#xA;行星03.mp4*&#xA;奇遇人生01.mp4*&#xA;维多利亚的秘密2018时装秀.mp4*&#xA;幻想工程故事.The.Imagineering.Story.S01E02.WEB-HR.720p.Chs.Eng-Deefun迪幻字幕组.mp4&#xA;行星01.mkv*&#xA;微观世界_超清.mp4*&#xA;行星02.mkv*&#xA;[4K123]川菜美食h265版.mp4*&#xA;中国美食之旅.Exploring.China.A.Culinary.Adventure.S01E01.Chi_Eng.HDTVrip.720X404-YY&#xA;中国美食之旅.Exploring.China.S01E04.Chi_Eng.DVDRip.624X352-YYeTs人人影视.mp4*&#xA;中国美食之旅.Exploring.China.S01E02.Chi_Eng.DVDRip.624X352-YYeTs人人影视.mp4*&#xA;美丽中国BD中英双字1280高清CD1_超清.mp4*&#xA;小小爱因斯坦/&#xA;科学小子席德中文版（央视播出版）/&#xA;BBC/&#xA;七个世界，一个星球/&#xA;世界豪宅大赏/&#xA;儿童古典音乐欣赏/&#xA;地球的夜晚/&#xA;宇宙时空之旅/&#xA;弟子规系列/&#xA;我们的星球/&#xA;我们的星球2019/&#xA;本书语音视频教学/&#xA;王朝/&#xA;程小奔微课堂/&#xA;行星/&#xA;詹姆斯·卡梅隆的科幻故事/&#xA;贝瓦三字经【高清MP4+MP3合辑】/&#xA;造物小百科/&#xA;阳光稚乐园/&#xA;上学路/&#xA;亲子教育读书节目《子午书简》/&#xA;航拍中国/&#xA;&#xA;&#xA;&#xA;逐星女*&#xA;完_神盾局特工/&#xA;完_明日传奇/&#xA;完_地球百子/&#xA;古战场传奇/&#xA;完_旅行者/&#xA;完_安家/&#xA;完_少年派/&#xA;完_幸福一家人/&#xA;圣女魔咒/&#xA;季完_庆余年/&#xA;完_上帝加我好友/&#xA;完_天赋异禀/&#xA;完_奥维尔号/&#xA;完_星际迷航/&#xA;完_美版真实人类/&#xA;完_西部世界/&#xA;完_都挺好/&#xA;完_高玩救未来/&#xA;完_黑镜/&#xA;怪奇物语/&#xA;遇见幸福/&#xA;三十而已/&#xA;上载新生/&#xA;全知/&#xA;前哨/&#xA;副本/&#xA;图书管理员/&#xA;大群/&#xA;季完_无垠的太空/&#xA;季完_诸神的黄昏/&#xA;完_外星生命/&#xA;完_大道五号/&#xA;完_家有超能迪翁/&#xA;完_急速蕾恩/&#xA;完_怪异都市/&#xA;完_曼达洛人/&#xA;完_末日之旅/&#xA;完_末日巡逻队/&#xA;完_氪星/&#xA;完_汉娜/&#xA;完_泰坦/&#xA;完_爱死亡与机器人/&#xA;完_猎魔人/&#xA;完_环形物语/&#xA;完_童年的终结/&#xA;完_美丽新世界/&#xA;完_美国众神/&#xA;完_触摸未来/&#xA;完_超凡女仆/&#xA;完_迷失太空/&#xA;完_逐星女/&#xA;完_重金属编年史/&#xA;完_阴阳魔界/&#xA;完_黑暗物质/&#xA;少年正义联盟/&#xA;开拓者/&#xA;新圣女魔咒/&#xA;星际迷航：皮卡德/&#xA;潘多拉/&#xA;相对宇宙/&#xA;神秘博士/&#xA;脉冲/&#xA;表面之下/&#xA;超女/&#xA;超能陆战队/&#xA;重生/&#xA;魔法师/&#xA;世界战争/&#xA;百分之三/&#xA;看见/&#xA;&#xA;&#xA;毒液_致命守护者_3D.mkv*&#xA;海王（大陆公映国英双语）4K.mkv*&#xA;死侍2.mp4*&#xA;大黄蜂2018.mp4*&#xA;黑豹.mp4*&#xA;毒液.mp4*&#xA;X战警_黑凤凰.mp4*&#xA;惊奇队长.美版.mp4*&#xA;奇异博士.mp4*&#xA;海王.mp4*&#xA;死侍.mkv*&#xA;正义者联盟/&#xA;金刚狼3-殊死一战/&#xA;复仇者联盟/&#xA;美国队长/&#xA;蚁人2/&#xA;蜘蛛侠/&#xA;钢铁侠/&#xA;雷神/&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;不要在线看，下载吧。家里的宽带受不了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lua中文版</title>
      <link>/code/2020/080218-lua/</link>
      <pubDate>Sun, 02 Aug 2020 18:22:25 +0800</pubDate>
      <guid>/code/2020/080218-lua/</guid>
      <description>&lt;p&gt;最近&lt;a href=&#34;http://i.scwy.net/code/2020/073123-lua/&#34;&gt;简单学习一下lua&lt;/a&gt;，看到了网友的&lt;a href=&#34;https://gitee.com/lyzavng/lua&#34;&gt;5.4中文版&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;拉回本地 make linux，make local。你就可以使用中文编程了。&lt;/p&gt;&#xA;&lt;p&gt;所有关键词及文件名都支持中文，它修改的关键词不太符合我的习惯，做一些修改。当然它依然支持原来的英文关键字。&lt;/p&gt;</description>
    </item>
    <item>
      <title>简单学习Lua</title>
      <link>/code/2020/073123-lua/</link>
      <pubDate>Fri, 31 Jul 2020 23:07:16 +0800</pubDate>
      <guid>/code/2020/073123-lua/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../073123-lua-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;非常小巧的语言，在单片机、go相关库、游戏脚本等都遇到过。快速学习一下。&lt;/p&gt;&#xA;&lt;p&gt;最新版本5.4，&lt;a href=&#34;http://www.lua.org/download.html&#34;&gt;源代码相当小&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;在ubuntu下编译: make linux test 然后安装　make install&lt;/p&gt;&#xA;&lt;p&gt;直接运行lua则在窗口中即时运行，也可以lua xx.lua运行代码。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Algernon全功能Web服务器</title>
      <link>/code/2020/073117-algernon/</link>
      <pubDate>Fri, 31 Jul 2020 17:32:35 +0800</pubDate>
      <guid>/code/2020/073117-algernon/</guid>
      <description>&lt;p&gt;Pi上挂载了四个Web服务器，其中三个是自己做的，想把它合并，做简单一些。另外，希望Web能支持Markdown文件。于是网上搜到了&lt;a href=&#34;https://github.com/xyproto/algernon&#34;&gt;Algernon&lt;/a&gt;，它是支持Markdown的，试试看。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../073117-algernon-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;拉回代码可以自己交叉编译，arm上运行没问题。而且，它是单一文件运行。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Github加速(持续更新)</title>
      <link>/it/2020/073114-git/</link>
      <pubDate>Fri, 31 Jul 2020 14:51:12 +0800</pubDate>
      <guid>/it/2020/073114-git/</guid>
      <description>&lt;p&gt;2020.7.31&lt;/p&gt;&#xA;&lt;p&gt;github慢得怀疑人生，发现一个加速的方法，测试上了ＭＢ的速度。&lt;/p&gt;&#xA;&lt;p&gt;git clone时把 github.com替换成github.com.cnpmjs.org，如下&#xA;git clone &lt;a href=&#34;https://github.com.cnpmjs.org/&#34;&gt;https://github.com.cnpmjs.org/&lt;/a&gt;*&lt;/p&gt;</description>
    </item>
    <item>
      <title>我理想中的房车(持续更新)</title>
      <link>/other/2020/073109-fangche/</link>
      <pubDate>Fri, 31 Jul 2020 09:59:10 +0800</pubDate>
      <guid>/other/2020/073109-fangche/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;/other/2019/080422-fangche-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;柴油动力（动力强劲）3.0 后双胎&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;柴油灶（统一用柴油，不用再买气罐）户外＋户内&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;智能系统：所有报警均可向手机发送，有手机终端查看和控制。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;　　安防，物体接近提醒&lt;/p&gt;</description>
    </item>
    <item>
      <title>充分挖掘时间利用率，提高效能，是IT和AT的终极目标</title>
      <link>/it/2020/072713-time/</link>
      <pubDate>Mon, 27 Jul 2020 13:10:02 +0800</pubDate>
      <guid>/it/2020/072713-time/</guid>
      <description>&lt;p&gt;如题所言，所有ＩＴ和ＡＴ技术的应用，终极目标均是为了：充分利用时间，提高效能。&lt;/p&gt;&#xA;&lt;p&gt;如何让客户零等待，让员工零等待，解决客户效果与员工时间的矛盾。&lt;/p&gt;&#xA;&lt;p&gt;IT支持就是：工具多，没有工具能创造工具。可提供多个可行方案。&lt;/p&gt;</description>
    </item>
    <item>
      <title>个人DNS: coredns</title>
      <link>/it/2020/072712-dns/</link>
      <pubDate>Mon, 27 Jul 2020 12:47:19 +0800</pubDate>
      <guid>/it/2020/072712-dns/</guid>
      <description>&lt;p&gt;基于之前在思考&lt;a href=&#34;http://i.scwy.net/it/2020/072710-domain/&#34;&gt;“解决越来越难申请好域名的问题”&lt;/a&gt;，对ＤＮＳ相关进行更多的了解了测试。&lt;/p&gt;&#xA;&lt;p&gt;在Ubuntu20中，系统有带DNS服务，也不知道它是做啥用的，暂且不表&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo lsof -i :53&#xA;&#xA;COMMAND     PID            USER   FD   TYPE DEVICE SIZE/OFF NODE NAME&#xA;systemd-r 16944 systemd-resolve   12u  IPv4 254690      0t0  UDP localhost:domain &#xA;systemd-r 16944 systemd-resolve   13u  IPv4 254691      0t0  TCP localhost:domain (LISTEN)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;将它暂时停掉：　sudo service systemd-resolved stop&lt;/p&gt;</description>
    </item>
    <item>
      <title>微客服系统：开发计划与最新进展</title>
      <link>/it/2020/072712-server/</link>
      <pubDate>Mon, 27 Jul 2020 12:20:57 +0800</pubDate>
      <guid>/it/2020/072712-server/</guid>
      <description>&lt;p&gt;我们计划将此系统作为一个长期项目，不断适应客户需要，以及引入更为领先的ＩＴ前沿技术&lt;/p&gt;&#xA;&lt;h3 id=&#34;进展&#34;&gt;进展&lt;/h3&gt;&#xA;&lt;h3 id=&#34;计划&#34;&gt;计划&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;语音客服功能（包括文字生成语音）&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;可视客服&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;可视虚拟客服&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>思考解决越来越难申请好域名的问题</title>
      <link>/it/2020/072710-domain/</link>
      <pubDate>Mon, 27 Jul 2020 10:42:58 +0800</pubDate>
      <guid>/it/2020/072710-domain/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../072710-domain-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;现在好的域名越来越少，想要做点事越来越难。公司为了找个有意义的域名真是抓破头。要么，就花高价买。虽然大公司说，好域名是造创造的，品牌有了，再难的域名都好记。那是先有鸡还是先有蛋呢？&lt;/p&gt;</description>
    </item>
    <item>
      <title> Golang之GUI: go-Sciter</title>
      <link>/code/2020/072608-sciter/</link>
      <pubDate>Sun, 26 Jul 2020 08:25:52 +0800</pubDate>
      <guid>/code/2020/072608-sciter/</guid>
      <description>&lt;p&gt;又开始了寻gui库之旅，这次是go-sciter。不过，最终&lt;strong&gt;在我的Ubuntu下，依然不能输入中文&lt;/strong&gt;，属于从测试到放弃的一类。&lt;/p&gt;&#xA;&lt;p&gt;Sciter 是一个嵌入式的 HTML/CSS 脚本引擎，旨在为桌面应用创建一个 UI 框架层。所以原则上的它的兼容性比较强。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang之GUI: gotk3 续二</title>
      <link>/code/2020/072215-gotk3/</link>
      <pubDate>Wed, 22 Jul 2020 15:42:34 +0800</pubDate>
      <guid>/code/2020/072215-gotk3/</guid>
      <description>&lt;p&gt;界面左方需要一个树形列表，用于目录显示。如何遍历所有节点，以及获取上级节点？一直在这里卡着，翻遍bing也没以有。github找到的示例也过于简单。&lt;/p&gt;</description>
    </item>
    <item>
      <title>树莓派与机器人</title>
      <link>/it/2020/071819-pi/</link>
      <pubDate>Sat, 18 Jul 2020 19:00:25 +0800</pubDate>
      <guid>/it/2020/071819-pi/</guid>
      <description>&lt;p&gt;家里的几个初代树莓派都是闲置中的，我一直在想如何把它利用起来。&lt;/p&gt;&#xA;&lt;p&gt;之前考虑过将Pi0置于孩子的越野车上。车子很灵敏，速度也还比较快，但控制精度是不够的。不过考虑做这底坐也应该够用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>accept4: too many open file</title>
      <link>/it/2020/071307-ulimit/</link>
      <pubDate>Mon, 13 Jul 2020 07:04:59 +0800</pubDate>
      <guid>/it/2020/071307-ulimit/</guid>
      <description>&lt;p&gt;[HTTP] http: Accept error: accept tcp [::]:7373: accept4: too many open file&lt;/p&gt;&#xA;&lt;p&gt;出现这个问题是因为服务的文件句柄超出系统限制。当Go服务程序出现这个问题，首先应该看系统设置，然后再看程序本身。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pylist.com/t/1581940902&#34;&gt;网友原文&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;首先查看系统：  ulimit -n&lt;/p&gt;</description>
    </item>
    <item>
      <title>富人身上的三个致富逻辑</title>
      <link>/money/2020/071114-fu/</link>
      <pubDate>Sat, 11 Jul 2020 14:43:28 +0800</pubDate>
      <guid>/money/2020/071114-fu/</guid>
      <description>&lt;p&gt;原文地址：&lt;a href=&#34;https://www.sohu.com/a/404361754_120468270?_trans_=010005_pcwzywxewmsm&#34;&gt;https://www.sohu.com/a/404361754_120468270?&lt;em&gt;trans&lt;/em&gt;=010005_pcwzywxewmsm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;“富人恒福，穷人恒穷”的时代，正在加快步伐向我们跑来。&lt;/p&gt;&#xA;&lt;p&gt;富有的人能够轻易利用他们所拥有的财富和特权，得到内幕消息和潜在的市场需求。&lt;/p&gt;&#xA;&lt;p&gt;每个玩家都在公平的游戏环境中开始游戏。可一旦有玩家积攒下了地产，一切就都变了。&lt;/p&gt;</description>
    </item>
    <item>
      <title> Golang之GUI: gotk3 续一</title>
      <link>/code/2020/071111-gotk3/</link>
      <pubDate>Sat, 11 Jul 2020 11:06:20 +0800</pubDate>
      <guid>/code/2020/071111-gotk3/</guid>
      <description>&lt;p&gt;感觉gotk3功能较为丰富，且暂时没有发现已知的问题（中文显示及输入），于是继续深入学习一下。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;按钮--------------------------------------------------------------&#xA;&#xA;button1.SetSensitive(false)   //按钮变灰色，不能按&#xA;&#xA;font := pango.FontDescriptionFromString(&amp;#34;Sans&amp;#34;)&#xA;font.SetSize(30 * pango.SCALE)&#xA;font.Free()&#xA;fmt.Println(&amp;#34;button1&amp;#34;, reflect.TypeOf(button1.Widget))&#xA;font.GetWeight()&#xA;font.SetWeight(button1.wid)&#xA;&#xA;//获取按钮2的大小&#xA;w, h := button2.GetSizeRequest()&#xA;fmt.Println(w, h)&#xA;&#xA;// 设置图标&#xA;//创建pixbuf&#xA;//pixbuf, err := gdk.PixbufNewFromFile(&amp;#34;images/icons8-youtube.png&amp;#34;)&#xA;pixbuf, err := gdk.PixbufNewFromFileAtScale(&amp;#34;images/icons8-youtube.png&amp;#34;, w-10, h-10, false)&#xA;if err != nil {&#xA;&#x9;log.Fatal(err)&#xA;}&#xA;//通过pixbuf新建image&#xA;image, _ := gtk.ImageNewFromPixbuf(pixbuf)&#xA;//释放pixbuf资源&#xA;pixbuf.Unref()&#xA;//按钮设置image&#xA;button2.SetImage(image)&#xA;// 取消焦距&#xA;button2.SetCanFocus(false)&#xA;&#xA;//按钮信号处理&#xA;_, _ = button2.Connect(&amp;#34;clicked&amp;#34;, func() {&#xA;&#x9;fmt.Println(&amp;#34;按钮2被按下&amp;#34;)&#xA;})&#xA;&#xA;行编辑 ----------------------------------------------&#xA;&#xA;entry2.SetEditable(false)  //只读，不可编辑&#xA;entry2.SetSensitive(false) //变灰色，不能编辑&#xA;&#xA;entry3.SetVisibility(false) //设置不可见字符，即密码模式&#xA;&#xA;//信号处理，当用户在文本输入控件内部按回车键时引发activate信号&#xA;_, _ = entry1.Connect(&amp;#34;activate&amp;#34;, func() {&#xA;&#x9;entry1Text, _ := entry1.GetText()&#xA;&#x9;fmt.Println(&amp;#34;entry text = &amp;#34;, entry1Text) //获取内容&#xA;})&#xA;&#xA;水平布局-------------------------------------------------&#xA;&#xA;//获取hbox控件&#xA;hboxObj, err := builder.GetObject(&amp;#34;box2&amp;#34;)&#xA;if err != nil {&#xA;&#x9;log.Fatal(err)&#xA;}&#xA;fmt.Println(&amp;#34;hboxObj&amp;#34;, reflect.TypeOf(hboxObj))&#xA;&#xA;hbox := hboxObj.(*gtk.Box)&#xA;//gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 3)&#xA;button, _ := gtk.ButtonNewWithLabel(&amp;#34;新按钮&amp;#34;) //新建按钮&#xA;hbox.Add(button)                           //按钮添加到布局中&#xA;&#xA;垂直布局----------------------------------------------------------&#xA;&#xA;//获取vbox控件&#xA;vboxObj, err := builder.GetObject(&amp;#34;box1&amp;#34;)&#xA;if err != nil {&#xA;&#x9;log.Fatal(err)&#xA;}&#xA;fmt.Println(&amp;#34;vboxObj&amp;#34;, reflect.TypeOf(vboxObj))&#xA;&#xA;vbox := vboxObj.(*gtk.Box)&#xA;//gtk.BoxNew(gtk.ORIENTATION_HORIZONTAL, 3)&#xA;button, _ := gtk.ButtonNewWithLabel(&amp;#34;新按钮&amp;#34;) //新建按钮&#xA;vbox.Add(button)                           //按钮添加到布局中&#xA;&#xA;grid布局------------------------------------------------------------&#xA;&#xA;tableObj, err := builder.GetObject(&amp;#34;grid1&amp;#34;)&#xA;if err != nil {&#xA;&#x9;log.Fatal(err)&#xA;}&#xA;fmt.Println(&amp;#34;tableObj&amp;#34;, reflect.TypeOf(tableObj))&#xA;table := tableObj.(*gtk.Grid)&#xA;&#xA;button, _ := gtk.ButtonNewWithLabel(&amp;#34;新按钮&amp;#34;)  //新建按钮&#xA;table.Attach(button, 2, 3, 2, 3)//指定位置添加控件 - 失败&#xA;&#xA;对话框--------------------------------------------------------&#xA;&#xA;_, _ = button1.Connect(&amp;#34;clicked&amp;#34;, func() {&#xA;&#x9;//新建消息对话框，选择对话框&#xA;&#x9;dialog := gtk.MessageDialogNew(&#xA;&#x9;&#x9;window, //指定父窗口&#xA;&#x9;&#x9;gtk.DIALOG_MODAL,              //模态对话框&#xA;&#x9;&#x9;gtk.MESSAGE_QUESTION,          //指定对话框类型&#xA;&#x9;&#x9;gtk.BUTTONS_YES_NO,            //默认按钮&#xA;&#x9;&#x9;&amp;#34;Are u ok?&amp;#34;) //设置内容&#xA;&#xA;&#x9;dialog.SetTitle(&amp;#34;问题对话框&amp;#34;) //对话框设置标题&#xA;&#xA;&#x9;flag := dialog.Run() //运行对话框&#xA;&#x9;if flag == gtk.RESPONSE_YES {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;按下yes&amp;#34;)&#xA;&#x9;} else if flag == gtk.RESPONSE_NO {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;按下no&amp;#34;)&#xA;&#x9;} else {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;按下关闭按钮&amp;#34;)&#xA;&#x9;}&#xA;&#xA;&#x9;dialog.Destroy() //销毁对话框&#xA;})&#xA;&#xA;_, _ = button2.Connect(&amp;#34;clicked&amp;#34;, func() {&#xA;&#x9;dialog := gtk.MessageDialogNew(&#xA;&#x9;&#x9;window,           //指定父窗口&#xA;&#x9;&#x9;gtk.DIALOG_MODAL, //模态对话框&#xA;&#x9;&#x9;gtk.MESSAGE_INFO, //info类型&#xA;&#x9;&#x9;gtk.BUTTONS_OK,   //默认按钮&#xA;&#x9;&#x9;&amp;#34;结束了&amp;#34;) //设置内容&#xA;&#xA;&#x9;dialog.Run()     //运行对话框&#xA;&#x9;dialog.Destroy() //销毁对话框&#xA;})&#xA;&#xA;定时器--------------------------------------------------------------&#xA;&#xA;//启动定时器, 500毫秒为时间间隔，回调函数为匿名函数&#xA;//定时器id&#xA;id, _ := glib.TimeoutAdd(500, func() bool {&#xA;&#x9;num++&#xA;&#x9;label.SetText(strconv.Itoa(num)) //给标签设置内容&#xA;&#x9;if flag {&#xA;&#x9;&#x9;return true                      //只要定时器没有停止，时间到自动调用回调函数&#xA;&#x9;}else {&#xA;&#x9;&#x9;return false&#xA;&#x9;}&#xA;})&#xA;fmt.Println(&amp;#34;id&amp;#34;, reflect.TypeOf(id), id)&#xA;&#xA;窗口-----------------------------------------------------&#xA;&#xA;//大小改变事件，改变窗口大小，自动触发此事件&#xA;_, _ = window.Connect(&amp;#34;configure_event&amp;#34;, func() {&#xA;&#x9;//获取窗口尺寸&#xA;&#x9;w, h := window.GetSize()&#xA;&#x9;fmt.Println(w, h)&#xA;})&#xA;&#xA;&#xA;window, _ := gtk.WindowNew(gtk.WINDOW_POPUP) //新建窗口，弹出类型，即为无边框窗口&#xA;application.AddWindow(window)&#xA;&#xA;// 鼠标按下事件&#xA;window.SetEvents(int(gdk.BUTTON_PRESS_MASK | gdk.BUTTON1_MOTION_MASK))&#xA;&#xA;//鼠标按下事件处理&#xA;_, _ = window.Connect(&amp;#34;button-press-event&amp;#34;, func(widget *gtk.Window, ctx *gdk.Event) {&#xA;&#x9;//获取鼠键按下属性结构体变量，系统内部的变量，不是用户传参变量&#xA;&#x9;event := *(*gdk.EventButton)(unsafe.Pointer(&amp;amp;ctx))&#xA;&#x9;//x, y = int(event.X()), int(event.Y())&#xA;&#xA;&#x9;if event.Button() == 1 { //左键&#xA;&#x9;&#x9;x, y = int(event.X()), int(event.Y()) //保存点击的起点坐标&#xA;&#x9;} else if event.Button() == 3 { //右键&#xA;&#x9;&#x9;//右键，关闭窗口&#xA;&#x9;&#x9;//gtk.MainQuit()&#xA;&#x9;&#x9;application.Quit()&#xA;&#x9;}&#xA;})&#xA;&#xA;//鼠标移动事件处理&#xA;_, _ = window.Connect(&amp;#34;motion-notify-event&amp;#34;, func(widget *gtk.Window, ctx *gdk.Event) {&#xA;&#x9;//获取鼠标移动属性结构体变量，系统内部的变量，不是用户传参变量&#xA;&#x9;event := *(*gdk.EventButton)(unsafe.Pointer(&amp;amp;ctx))&#xA;&#x9;//fmt.Println(x, int(event.XRoot())-x, y,int(event.YRoot())-y)&#xA;&#x9;window.Move(int(event.XRoot())-x, int(event.YRoot())-y)&#xA;})&#xA;&#xA;键盘------------------------------------------------------&#xA;&#xA;callbackFunc := func(widget *gtk.Window, ctx *gdk.Event) {&#xA;&#x9;event := *(*gdk.EventKey)(unsafe.Pointer(&amp;amp;ctx))&#xA;&#xA;&#x9;fmt.Println(event.KeyVal())&#xA;&#xA;&#x9;//event.Keyval：获取按下(释放)键盘键值，每个键值对于一个ASCII码&#xA;&#x9;key := event.KeyVal()&#xA;&#x9;if gdk.KEY_Up == key {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;上&amp;#34;)&#xA;&#x9;} else if gdk.KEY_Down == key {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;下&amp;#34;)&#xA;&#x9;} else if gdk.KEY_Left == key {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;左&amp;#34;)&#xA;&#x9;} else if gdk.KEY_Right == key {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;右&amp;#34;)&#xA;&#x9;}&#xA;&#xA;&#x9;fmt.Println(&amp;#34;key = &amp;#34;, event.KeyVal())&#xA;}&#xA;&#xA;//键盘按下事件处理&#xA;window.Connect(&amp;#34;key-press-event&amp;#34;, callbackFunc)&#xA;&#xA;鼠标------------------------------------------------------&#xA;&#xA;//添加鼠标按下事件&#xA;//BUTTON_PRESS_MASK: 鼠标按下，触发信号&amp;#34;button-press-event&amp;#34;&#xA;//BUTTON_RELEASE_MASK：鼠标抬起，触发&amp;#34;button-release-event&amp;#34;&#xA;//鼠标移动都是触发&amp;#34;motion-notify-event&amp;#34;&#xA;//BUTTON_MOTION_MASK: 鼠标移动，按下任何键移动都可以&#xA;//BUTTON1_MOTION_MASK：鼠标移动，按住左键移动才触发&#xA;//BUTTON2_MOTION_MASK：鼠标移动，按住中间键移动才触发&#xA;//BUTTON3_MOTION_MASK：鼠标移动，按住右键移动才触发&#xA;//window.SetEvents(int(gdk.BUTTON_PRESS_MASK | gdk.BUTTON1_MOTION_MASK))&#xA;&#xA;window.SetEvents(int(gdk.BUTTON_PRESS_MASK))&#xA;&#xA;callbackFunc := func(widget *gtk.Window, ctx *gdk.Event) {&#xA;    //fmt.Println(ctx, *ctx, &amp;amp;ctx, unsafe.Pointer(ctx))&#xA;    event := *(*gdk.EventButton)(unsafe.Pointer(&amp;amp;ctx))&#xA;    //fmt.Println(reflect.TypeOf(ctx), reflect.TypeOf(event))&#xA;    //fmt.Println(gdk.BUTTON1_MOTION_MASK)&#xA;&#xA;    //fmt.Println(event.Type())&#xA;    if event.Type() == 4 { //单击&#xA;        fmt.Printf(&amp;#34;单击, &amp;#34;)&#xA;    } else if event.Type() == 5 { //双击&#xA;        fmt.Printf(&amp;#34;双击, &amp;#34;)&#xA;    }&#xA;&#xA;    //fmt.Println(&amp;#34;button = &amp;#34;, event.Button(), event.ButtonVal())&#xA;    if event.Button() == 1 {&#xA;        fmt.Printf(&amp;#34;左键, &amp;#34;)&#xA;    } else if event.Button() == 2 {&#xA;        fmt.Printf(&amp;#34;中间键, &amp;#34;)&#xA;    } else if event.Button() == 3 {&#xA;        fmt.Printf(&amp;#34;右键, &amp;#34;)&#xA;    }&#xA;    fmt.Println(&amp;#34;坐标:&amp;#34;, int(event.X()), int(event.Y()))&#xA;&#xA;}&#xA;&#xA;//鼠标按下事件处理&#xA;window.Connect(&amp;#34;button-press-event&amp;#34;, callbackFunc)&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>理财规划师</title>
      <link>/money/2020/071014-guanli/</link>
      <pubDate>Fri, 10 Jul 2020 14:51:32 +0800</pubDate>
      <guid>/money/2020/071014-guanli/</guid>
      <description>&lt;p&gt;题外话：刚对博客目录作过修改，将“理财／投资”单独作为一个分类。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../071014-guanli-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;一前言&#34;&gt;一、前言&lt;/h3&gt;&#xA;&lt;p&gt;我们抛开人生价值不谈，人生两大最有意义的事情：健康和赚钱。&lt;/p&gt;&#xA;&lt;p&gt;之前也有类似“理财／规划”的想法，并和梁兄作过探讨。在人的一生中，除了赚钱以外，理财也是一项重要、并且需要长期坚持的工作。我们也希望更早的把这个理念带给孩子，并让这个理念让他们受益终生。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang之GUI: gotk3</title>
      <link>/code/2020/070810-gui/</link>
      <pubDate>Wed, 08 Jul 2020 10:41:10 +0800</pubDate>
      <guid>/code/2020/070810-gui/</guid>
      <description>&lt;p&gt;考虑可能需要&lt;a href=&#34;http://i.scwy.net/it/2020/070712-photo/&#34;&gt;开发资源管理器/图片管理器&lt;/a&gt;，继续寻找golang的gui解决方案。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/gotk3/gotk3&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/gotk3/gotk3-examples/&#34;&gt;这里有例程&lt;/a&gt;，我们都喜欢文档详细，例程多的东西。&lt;/p&gt;&#xA;&lt;p&gt;依赖： sudo apt install libgtk-3-dev libcairo2-dev libglib2.0-dev&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/gotk3/gotk3/wiki/Installing-on-Windows&#34;&gt;这里&lt;/a&gt;也讲了win环境下的安装。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://blog.csdn.net/weixin_43968923/category_9825162.html&#34;&gt;网友的学习文章&lt;/a&gt;读一读&lt;/p&gt;&#xA;&lt;h4 id=&#34;一-外带简单示例&#34;&gt;一 外带简单示例&lt;/h4&gt;&#xA;&lt;p&gt;第一次运行例程simple，好几分钟才出来，第二次运行就快多了。也不知道它内部在干啥。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;log&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/gotk3/gotk3/gtk&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;gtk.Init(nil)  // 初始化GTK而不解析任何命令行参数。&#xA;&#xA;    //创建顶层窗口，当销毁时关联退出事件&#xA;&#x9;win, err := gtk.WindowNew(gtk.WINDOW_TOPLEVEL)  。&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;log.Fatal(&amp;#34;Unable to create window:&amp;#34;, err)&#xA;&#x9;}&#xA;&#x9;win.SetTitle(&amp;#34;Simple Example&amp;#34;)&#xA;&#x9;win.Connect(&amp;#34;destroy&amp;#34;, func() {&#xA;&#x9;&#x9;gtk.MainQuit()&#xA;&#x9;})&#xA;&#xA;&#x9;// 添加标签控件&#xA;&#x9;l, err := gtk.LabelNew(&amp;#34;Hello, gotk3!&amp;#34;)&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;log.Fatal(&amp;#34;Unable to create label:&amp;#34;, err)&#xA;&#x9;}&#xA;&#xA;&#x9;// 控件加到窗口中&#xA;&#x9;win.Add(l)&#xA;&#xA;&#x9;// 窗口大小&#xA;&#x9;win.SetDefaultSize(800, 600)&#xA;&#xA;&#x9;// 递归显示此窗口中包含的所有小部件。&#xA;&#x9;win.ShowAll()&#xA;&#xA;&#x9;// 开始主循环&#xA;&#x9;gtk.Main()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;../070810-gui-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang之GUI：尝试 gogi</title>
      <link>/code/2020/070809-gui/</link>
      <pubDate>Wed, 08 Jul 2020 09:53:00 +0800</pubDate>
      <guid>/code/2020/070809-gui/</guid>
      <description>&lt;p&gt;继续寻找golang的gui库。今天看到了gogi。&lt;a href=&#34;https://github.com/goki/gi&#34;&gt;Github&lt;/a&gt;看起来人气不高，网上介绍也就很少，更新还算比较近。&lt;/p&gt;&#xA;&lt;p&gt;简单看了看基础的HelloWorld&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;github.com/goki/gi/gi&amp;#34;&#xA;&#x9;&amp;#34;github.com/goki/gi/gimain&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;gimain.Main(func() {&#xA;&#x9;&#x9;mainrun()&#xA;&#x9;})&#xA;}&#xA;&#xA;func mainrun() {&#xA;&#x9;width := 1024&#xA;&#x9;height := 768&#xA;&#x9;win := gi.NewMainWindow(&amp;#34;gogi-basic&amp;#34;, &amp;#34;基础窗口&amp;#34;, width, height)&#xA;&#xA;&#x9;vp := win.WinViewport2D()&#xA;&#x9;updt := vp.UpdateStart()&#xA;&#xA;&#x9;mfr := win.SetMainFrame()&#xA;&#xA;&#x9;rlay := gi.AddNewLayout(mfr, &amp;#34;rowlay&amp;#34;, gi.LayoutHoriz)&#xA;&#x9;rlay.SetProp(&amp;#34;text-align&amp;#34;, &amp;#34;center&amp;#34;)&#xA;&#x9;gi.AddNewLabel(rlay, &amp;#34;label1&amp;#34;, &amp;#34;This is test text&amp;#34;)&#xA;&#x9;edit1 := gi.AddNewTextField(rlay, &amp;#34;edit1&amp;#34;)&#xA;&#x9;button1 := gi.AddNewButton(rlay, &amp;#34;button1&amp;#34;)&#xA;&#x9;button2 := gi.AddNewButton(rlay, &amp;#34;button2&amp;#34;)&#xA;&#x9;slider1 := gi.AddNewSlider(rlay, &amp;#34;slider1&amp;#34;)&#xA;&#x9;spin1 := gi.AddNewSpinBox(rlay, &amp;#34;spin1&amp;#34;)&#xA;&#xA;&#x9;edit1.SetText(&amp;#34;Edit this text&amp;#34;)&#xA;&#x9;edit1.SetProp(&amp;#34;min-width&amp;#34;, &amp;#34;20em&amp;#34;)&#xA;&#x9;button1.Text = &amp;#34;Button 1&amp;#34;&#xA;&#x9;button2.Text = &amp;#34;Button 2&amp;#34;&#xA;&#x9;slider1.Dim = gi.X&#xA;&#x9;slider1.SetProp(&amp;#34;width&amp;#34;, &amp;#34;20em&amp;#34;)&#xA;&#x9;slider1.SetValue(0.5)&#xA;&#x9;spin1.SetValue(0.0)&#xA;&#xA;&#x9;// main menu&#xA;&#x9;appnm := gi.AppName()&#xA;&#x9;mmen := win.MainMenu&#xA;&#x9;mmen.ConfigMenus([]string{appnm, &amp;#34;Edit&amp;#34;, &amp;#34;Window&amp;#34;})&#xA;&#xA;&#x9;amen := win.MainMenu.ChildByName(appnm, 0).(*gi.Action)&#xA;&#x9;amen.Menu = make(gi.Menu, 0, 10)&#xA;&#x9;amen.Menu.AddAppMenu(win)&#xA;&#xA;&#x9;emen := win.MainMenu.ChildByName(&amp;#34;Edit&amp;#34;, 1).(*gi.Action)&#xA;&#x9;emen.Menu = make(gi.Menu, 0, 10)&#xA;&#x9;emen.Menu.AddCopyCutPaste(win)&#xA;&#xA;&#x9;win.SetCloseCleanFunc(func(w *gi.Window) {&#xA;&#x9;&#x9;go gi.Quit() // once main window is closed, quit&#xA;&#x9;})&#xA;&#xA;&#x9;win.MainMenuUpdated()&#xA;&#x9;vp.UpdateEndNoSig(updt)&#xA;&#x9;win.StartEventLoop()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img src=&#34;../070809-gui-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>希望有这样一款照片管理工具</title>
      <link>/it/2020/070712-photo/</link>
      <pubDate>Tue, 07 Jul 2020 12:51:46 +0800</pubDate>
      <guid>/it/2020/070712-photo/</guid>
      <description>&lt;p&gt;之前为了记录孩子的点点滴滴，买了数码相机。最近两年用手机更多，拍得更随性一些。&lt;/p&gt;&#xA;&lt;p&gt;大量的照片放到了硬盘上，重复的不少，也没有时间整理。管理大量的照片是个难题，对拍照达人更是如此。&lt;/p&gt;</description>
    </item>
    <item>
      <title>软件在医院部署中的问题思考</title>
      <link>/it/2020/063018-soft/</link>
      <pubDate>Tue, 30 Jun 2020 18:33:53 +0800</pubDate>
      <guid>/it/2020/063018-soft/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../063018-soft-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;情况是这样的&#34;&gt;情况是这样的：&lt;/h4&gt;&#xA;&lt;p&gt;某市医院要上体检项目，招标了体检和健管软件。&lt;/p&gt;&#xA;&lt;p&gt;一般公立医院都是比较看重数据安全的，此医院原有一套“外联平台”。据我的理解是一个内外网服务器，所有数据均需通过软件安全验证。比较郁闷在的于，所有数据通讯，都需要经过此平台做接口。&lt;/p&gt;</description>
    </item>
    <item>
      <title>设想：远程实验室、云试验室</title>
      <link>/other/2020/062820-lab/</link>
      <pubDate>Sun, 28 Jun 2020 20:52:18 +0800</pubDate>
      <guid>/other/2020/062820-lab/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../062820-lab-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;由于疫情影响，我们更多的趋向于(也更需要)在家办公，在家学习，在家&amp;hellip;，线上功能需要越来越强大。&lt;/p&gt;&#xA;&lt;p&gt;我们是否能有一个远程实验室，利用机械手等方式，远程做实验，通过视频观察结果。&lt;/p&gt;</description>
    </item>
    <item>
      <title>让任何平板、手机、电脑成为第三屏</title>
      <link>/it/2020/062413-screen/</link>
      <pubDate>Wed, 24 Jun 2020 13:45:08 +0800</pubDate>
      <guid>/it/2020/062413-screen/</guid>
      <description>&lt;p&gt;似乎家家户户都不只一两个平板，随着价格越来越低，性能越来越高，淘汰/闲置的也不在少数。&lt;/p&gt;&#xA;&lt;p&gt;在编程过程中，我们需要双屏，甚至三屏。&lt;/p&gt;&#xA;&lt;p&gt;比如我是这样：&lt;/p&gt;&#xA;&lt;p&gt;主屏是写代码用的。副屏显示效果和后台代码调用 。第三屏看某一页的代码，便 于主屏对照着写另一些代码。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nps 又一款内网穿透，带Web管理</title>
      <link>/it/2020/062408-nps/</link>
      <pubDate>Wed, 24 Jun 2020 08:34:53 +0800</pubDate>
      <guid>/it/2020/062408-nps/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/ehang-io/nps&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/ehang-io/nps/blob/master/README_zh.md&#34;&gt;官网中文说明&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.cnblogs.com/nul1/p/12082329.html&#34;&gt;网友的文章&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;“&#xA;nps是一款轻量级、高性能、功能强大的内网穿透代理服务器。目前支持tcp、udp流量转发，可支持任何tcp、udp上层协议（访问内网网站、本地支付接口调试、ssh访问、远程桌面，内网dns解析等等……），此外还支持内网http代理、内网socks5代理、p2p等，并带有功能强大的web管理端。&#xA;”&lt;/p&gt;</description>
    </item>
    <item>
      <title>住宅自动化思考</title>
      <link>/ai/2020/062318-home/</link>
      <pubDate>Tue, 23 Jun 2020 18:16:19 +0800</pubDate>
      <guid>/ai/2020/062318-home/</guid>
      <description>&lt;p&gt;孩子可能需要到城内去上学，城内的小房子需要重新装修。利用这次装修，把自动化/智能化的设备加上去。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;门锁使用小米&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;现在家里已经有用，虽然实现不了联动或真正的联网。&lt;/p&gt;</description>
    </item>
    <item>
      <title>思考：跨平台语音输入法，语音辅助控制</title>
      <link>/it/2020/061809-say/</link>
      <pubDate>Thu, 18 Jun 2020 09:24:34 +0800</pubDate>
      <guid>/it/2020/061809-say/</guid>
      <description>&lt;h3 id=&#34;前言&#34;&gt;前言：&lt;/h3&gt;&#xA;&lt;p&gt;随着语音技术的发展，如何把手解放出来，回归最原始的交互方式，这是一直在思考的问题。但似乎不管在手机上还是PC上，都没有相关的产品。&lt;/p&gt;&#xA;&lt;p&gt;抛开识别率、速度等一些问题不谈，至少我们可以做到语音辅助。&lt;/p&gt;</description>
    </item>
    <item>
      <title>不求甚解，用go做一个静态服务，搭建Hugo内网博客</title>
      <link>/code/2020/061509-static_server/</link>
      <pubDate>Mon, 15 Jun 2020 09:58:24 +0800</pubDate>
      <guid>/code/2020/061509-static_server/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../061509-static_server-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;源起&#34;&gt;源起&lt;/h3&gt;&#xA;&lt;p&gt;考虑到内网的Pi不要浪费，且基于安全的考虑，想将&lt;a href=&#34;http://i.scwy.net&#34;&gt;我的这个博客&lt;/a&gt;搬到内网这个Pi服务器上，其实外网也可以访问&lt;a href=&#34;http://wyyyh.3322.org:8181/&#34;&gt;wyyyh.3322.org&lt;/a&gt;。它是做过动态域名解析的，可惜80端口和443端口被电信是整没了的。&lt;/p&gt;&#xA;&lt;h3 id=&#34;动手&#34;&gt;动手&lt;/h3&gt;&#xA;&lt;p&gt;因为Hugo的博客已经是静态页面，于是两分钟做了一个静态服务器。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;    &amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;net/http&amp;#34;&#xA;)&#xA; &#xA;func main() {&#xA;    fmt.Println(&amp;#34;Web server at 8181&amp;#34;)&#xA;&#x9;http.Handle(&amp;#34;/&amp;#34;, http.FileServer(http.Dir(&amp;#34;.&amp;#34;)))&#xA;&#x9;http.ListenAndServe(&amp;#34;:8181&amp;#34;, nil)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Golang建立静态服务器确实简单，与Python一样。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang调试工具再学习:go-delve</title>
      <link>/code/2020/061122-debug/</link>
      <pubDate>Thu, 11 Jun 2020 22:42:39 +0800</pubDate>
      <guid>/code/2020/061122-debug/</guid>
      <description>&lt;h3 id=&#34;一源起&#34;&gt;一、源起&lt;/h3&gt;&#xA;&lt;p&gt;随着微客服系统的功能不断添加、完善，错误也越来越多，更需要进行在线调试。虽然以前也看过delve，但也没有真正用起来，这也导致开发整体进度偏慢。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pi4从纯优盘启动</title>
      <link>/it/2020/061110-pi4/</link>
      <pubDate>Thu, 11 Jun 2020 10:05:36 +0800</pubDate>
      <guid>/it/2020/061110-pi4/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../pi.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最近听说树莓派4已经可以从纯优盘启动了，而且是官方解决方案。详情可以见一下知乎的相关网文:&lt;a href=&#34;https://zhuanlan.zhihu.com/p/143865746?from_voters_page=true&#34;&gt;树莓派4B已更新USB启动固件（免SD卡）&lt;/a&gt;。这个文章是有相关链接的，话说现在网上文章一大抄，而抄出来居然相关链接都不要，相关文件在哪里下载也不知道。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/raspberrypi/firmware&#34;&gt;这里是Github下的固件&lt;/a&gt;需要用到。&lt;/p&gt;&#xA;&lt;p&gt;不过似乎Pi1、Pi3这类的更需要从优盘，或者SSD上做系统，从而带来速度上的优化，毕竟象Pi0这类的设备，速度确实是不够。而Pi4的应用中，IO应该不算大的问题，何况可以系统启动后再挂接USB硬盘。&lt;/p&gt;</description>
    </item>
    <item>
      <title>微信智能对话Web API调用</title>
      <link>/code/2020/061015-ai/</link>
      <pubDate>Wed, 10 Jun 2020 15:44:27 +0800</pubDate>
      <guid>/code/2020/061015-ai/</guid>
      <description>&lt;p&gt;考虑客服平台需要接入智能回复，在网上搜索了一圈。有的收费，有的免费，BAT似乎都有自己的一个。暂时选择腾讯的，未收费。&lt;/p&gt;&#xA;&lt;p&gt;申请在这里[微信对话开放平台]: (&lt;a href=&#34;https://openai.weixin.qq.com/&#34;&gt;https://openai.weixin.qq.com/&lt;/a&gt;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Svg动画</title>
      <link>/it/2020/060808-svg/</link>
      <pubDate>Mon, 08 Jun 2020 08:44:46 +0800</pubDate>
      <guid>/it/2020/060808-svg/</guid>
      <description>&lt;p&gt;SVG是一种图像文件格式，Scalable Vector Graphics，意思是可缩放的矢量图形。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;&amp;lt;html&amp;gt;&#xA;&amp;lt;body&amp;gt;&#xA; &#xA;&amp;lt;h1&amp;gt;My first SVG&amp;lt;/h1&amp;gt;&#xA; &#xA;&amp;lt;svg xmlns=&amp;#34;http://www.w3.org/2000/svg&amp;#34; version=&amp;#34;1.1&amp;#34;&amp;gt;&#xA;  &amp;lt;circle cx=&amp;#34;100&amp;#34; cy=&amp;#34;50&amp;#34; r=&amp;#34;40&amp;#34; stroke=&amp;#34;black&amp;#34; stroke-width=&amp;#34;2&amp;#34; fill=&amp;#34;red&amp;#34; /&amp;gt;&#xA;&amp;lt;/svg&amp;gt;&#xA; &#xA;&amp;lt;/body&amp;gt;&#xA;&amp;lt;/html&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;画了一个红色的圆&lt;/p&gt;&#xA;&lt;p&gt;看看网上的实例教程&lt;a href=&#34;https://www.runoob.com/svg/svg-examples.html&#34;&gt;https://www.runoob.com/svg/svg-examples.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>熬夜:长期睡眠不足致死</title>
      <link>/health/2020/060709-aoye/</link>
      <pubDate>Sun, 07 Jun 2020 09:00:47 +0800</pubDate>
      <guid>/health/2020/060709-aoye/</guid>
      <description>&lt;p&gt;现代人熬夜是个比较大的问题，羡慕古人的日出而做，日落而息。这种熬夜有客观和主观多种因素的叠加。前段时间有新闻说要造人造月亮，让夜晚不用点路灯&amp;hellip;人类这是要彻底改变地球。地球也必将用自己的方法重生，新冠不就算一种方法吗？&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang之GUI：尝试 Lorca</title>
      <link>/code/2020/060310-lorca/</link>
      <pubDate>Wed, 03 Jun 2020 10:11:36 +0800</pubDate>
      <guid>/code/2020/060310-lorca/</guid>
      <description>&lt;p&gt;最近一直比较关注Golang的GUI解决办法。类似用H5的解决方法其实也看过，因为需要依赖指令的浏览器，前期放弃了。比如这个Lorca，它是依赖于Chrome的，需要运行之前安装Chrome浏览器。它不象其它一样会包含浏览器本身，会自动查找已经安装的此浏览器，只能说各有优缺点。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Javascript中加载jQuery及其它脚本、CSS等</title>
      <link>/it/2020/053117-js/</link>
      <pubDate>Sun, 31 May 2020 17:42:26 +0800</pubDate>
      <guid>/it/2020/053117-js/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;//引入css&#xA;var head = document.getElementsByTagName(&amp;#39;head&amp;#39;)[0];&#xA;var link = document.createElement(&amp;#39;link&amp;#39;);&#xA;link.href = baseUrl+&amp;#39;/css/style.css&amp;#39;;&#xA;link.rel = &amp;#39;stylesheet&amp;#39;;&#xA;link.type = &amp;#39;text/css&amp;#39;;&#xA;head.appendChild(link);&#xA;&#xA;//引入js&#xA;//var head = document.getElementsByTagName(&amp;#39;head&amp;#39;)[0];&#xA;var script = document.createElement(&amp;#39;script&amp;#39;);&#xA;script.src = &amp;#39;http://libs.baidu.com/jquery/1.8.3/jquery.min.js&amp;#39;;&#xA;script.type = &amp;#39;text/javascript&amp;#39;;&#xA;head.appendChild(script);&#xA;&#xA;//载入jquery后，再载入其它js&#xA;//若不等待，直接载入其它js，可能存在jquery还未载入，其它二次开发的js就不能正常使用。&#xA;waitQuery = window.setInterval(function(){ &#xA;    if(typeof jQuery != &amp;#39;undefined&amp;#39;){&#xA;        window.clearInterval(waitQuery);&#xA;        $.getScript(baseUrl+&amp;#39;/js/juqery-translucent-min.js&amp;#39;,function(){&#xA;            //建立窗口            &#xA;            $(&amp;#34;body&amp;#34;).translucent({&#xA;                target:&amp;#34;serviceWin&amp;#34;,&#xA;                width:w,&#xA;                textHtml:&amp;#34;&amp;lt;div&amp;gt;这是一个新建的弹窗！&amp;lt;/div&amp;gt;&amp;#34;,&#xA;                titleText:&amp;#34;弹窗标题内容&amp;#34;&#xA;            });&#xA;&#xA;            var div = document.getElementsByClassName(&amp;#34;translucent-title&amp;#34;)[0];&#xA;            console.log(div.innerHTML);&#xA;&#xA;        });  &#xA;    }  &#xA; },100);&#xA;&#xA;//js中动态加载div&#xA;var div = document.createElement(&amp;#34;div&amp;#34;);&#xA;div.innerHTML = &amp;#34;微客服网页版开发中...&amp;#34;;&#xA;div.setAttribute(&amp;#34;id&amp;#34;,&amp;#34;fl&amp;#34;);&#xA;div.style.width=w+&amp;#34;px&amp;#34;;&#xA;div.style.height=h+&amp;#34;px&amp;#34;;&#xA;div.style.top=&amp;#34;-1000px&amp;#34;;&#xA;div.style.background=&amp;#34;#eee&amp;#34;;&#xA;div.style.position=&amp;#34;fixed&amp;#34;;&#xA;document.body.appendChild(div); &#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Javascript Json判断的坑</title>
      <link>/it/2020/053011-json/</link>
      <pubDate>Sat, 30 May 2020 11:10:10 +0800</pubDate>
      <guid>/it/2020/053011-json/</guid>
      <description>&lt;p&gt;后端传来的数据需要判断是否为json格式，用以下代码：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;function isJSON(str) {&#xA;    if (typeof str == &amp;#39;string&amp;#39;) {&#xA;        try {&#xA;            JSON.parse(str);&#xA;            console.log(str,&amp;#34;true&amp;#34;)&#xA;            return true;&#xA;        } catch(e) {&#xA;            console.log(str,&amp;#34;false&amp;#34;)&#xA;            return false;&#xA;        }&#xA;    }&#xA;    return false;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;测试如下：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;传入json格式字符串，返回true&lt;/li&gt;&#xA;&lt;li&gt;传入字符串 &amp;ldquo;abc&amp;rdquo;，返回false&lt;/li&gt;&#xA;&lt;li&gt;传入字符串 &amp;ldquo;中国&amp;rdquo; ,返回false&lt;/li&gt;&#xA;&lt;li&gt;传入字符串 &amp;ldquo;12345&amp;rdquo; ,返回true&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;注意第4项，当传入的是数字格式的字符串时，JSON.parse函数不会出错，所以函数返回true。即此时函数会放为数字字符串是符合json格式的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>自我扫盲：国密算法</title>
      <link>/it/2020/053008-sm/</link>
      <pubDate>Sat, 30 May 2020 08:25:09 +0800</pubDate>
      <guid>/it/2020/053008-sm/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../053008-sm-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.oscca.gov.cn/sca/xxgk/bzgf.shtml&#34;&gt;国家密码管理局&lt;/a&gt;第一次听说这个局 :)&lt;/p&gt;&#xA;&lt;p&gt;Github上Go的实现,留时间研究:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tjfoc/gmsm&#34;&gt;https://github.com/tjfoc/gmsm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tjfoc/hyperledger-fabric-gm&#34;&gt;https://github.com/tjfoc/hyperledger-fabric-gm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/ZZMarquis/gm&#34;&gt;https://github.com/ZZMarquis/gm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/327276564/go-example&#34;&gt;https://github.com/327276564/go-example&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang之GUI: govcl</title>
      <link>/code/2020/052914-govcl/</link>
      <pubDate>Fri, 29 May 2020 14:35:56 +0800</pubDate>
      <guid>/code/2020/052914-govcl/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../052914-govcl-logo.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;GoVCL Go语言可视化组件库。&lt;/p&gt;&#xA;&lt;p&gt;Github: &lt;a href=&#34;https://github.com/ying32/govcl&#34;&gt;https://github.com/ying32/govcl&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;官方网站：&lt;a href=&#34;https://z-kit.cc/&#34;&gt;https://z-kit.cc/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;文档做得不错&lt;a href=&#34;https://gitee.com/ying32/govcl/wikis/pages&#34;&gt;https://gitee.com/ying32/govcl/wikis/pages&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;它需要&lt;a href=&#34;https://github.com/ying32/govcl/releases&#34;&gt;下载支持库&lt;/a&gt;放在当前或库目录，当前V2.0.2。&lt;/p&gt;&#xA;&lt;p&gt;跨平台支持Windows(目前只对Windows Vista之上系统比较友好，对Windows XP有些问题)，Linux，macOS。arm和Linux32位系统的支持需要&lt;a href=&#34;https://github.com/ying32/govcl/tree/master/UILibSources&#34;&gt;自己编译&lt;/a&gt;(库支持文件)&lt;/p&gt;</description>
    </item>
    <item>
      <title>FaIcon开源跨平台还免费数据库客户端，换掉navcat</title>
      <link>/it/2020/052908-db/</link>
      <pubDate>Fri, 29 May 2020 08:52:47 +0800</pubDate>
      <guid>/it/2020/052908-db/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../052908-db-03.gif&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;开源免费的SQL客户端，也支持跨平台。支持众多的数据库：RedShift, MySQL, PostgreSQL, IBM DB2, Impala, MS SQL, Oracle, SQLite,MariaDB等，基本包括我们常用的数据库，基本可以代替部份收费软件，例如navcat。&lt;/p&gt;</description>
    </item>
    <item>
      <title>说说Golang的Gui编程及解决方案</title>
      <link>/code/2020/052212-gui/</link>
      <pubDate>Fri, 22 May 2020 12:04:37 +0800</pubDate>
      <guid>/code/2020/052212-gui/</guid>
      <description>&lt;p&gt;说到golang的gui，就会想到：它不是为这个而生的。&lt;/p&gt;&#xA;&lt;p&gt;但这却是实际的需求，还要求程序员再去学一个语言去前端GUI，那确实还是不太友好的。所以还是趋向于在Golang本身解决。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gotx Go神器</title>
      <link>/code/2020/052008-gotx/</link>
      <pubDate>Wed, 20 May 2020 08:21:28 +0800</pubDate>
      <guid>/code/2020/052008-gotx/</guid>
      <description>&lt;p&gt;Gotx是Go的翻译器和运行环境，象Go一样只是单个文件，跨平台，无需安装go环境就可以直接运行代码。可以进行GUI编程，自带编辑器和命令行交互环境，支持加密。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Openwrt/MT7688相关收集</title>
      <link>/ai/2020/051820-openwrt/</link>
      <pubDate>Mon, 18 May 2020 20:10:57 +0800</pubDate>
      <guid>/ai/2020/051820-openwrt/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;后台运行&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;opkg update&lt;/p&gt;&#xA;&lt;p&gt;opkg install screen&lt;/p&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;后台运行&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;nohup python /etc/kaihei_server.py &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp;&lt;/p&gt;&#xA;&lt;p&gt;opkg update&lt;/p&gt;&#xA;&lt;p&gt;opkg install coreutils-nohup&lt;/p&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;串口速率&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;stty -F /dev/ttyS0 ispeed 115200 ospeed 115200 cs8&lt;/p&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;CPU架构&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;opkg print-architecture | awk &amp;lsquo;{print $2}&amp;rsquo; | grep -v all | grep -v noarch&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kiftd 网络文件传输系统</title>
      <link>/it/2020/051809-kiftd/</link>
      <pubDate>Mon, 18 May 2020 09:12:14 +0800</pubDate>
      <guid>/it/2020/051809-kiftd/</guid>
      <description>&lt;p&gt;我们还是经常需要在网络上保存或者共享一些软件或资料，所以百度云用户应该也不少吧。百度的东西似乎就没出过啥好的，百度云限速简直是浪费宽带。&lt;/p&gt;&#xA;&lt;p&gt;“kiftd 是一款专门面向个人、团队或小型组织的私有网盘 / 云盘系统,开源、便捷、完善。它不仅仅是替代 U 盘的不二之选,更是一款具备视频在线播放、文&#xA;档在线预览、音乐在线播放、图片查看等高级功能的文件云存储平台。”&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pdf小巧阅读器及静默打印工具：SumatraPDF</title>
      <link>/it/2020/051722-pdf/</link>
      <pubDate>Sun, 17 May 2020 22:54:36 +0800</pubDate>
      <guid>/it/2020/051722-pdf/</guid>
      <description>&lt;p&gt;因为在设计时需要用到&lt;a href=&#34;http://i.scwy.net/go/2020/051714-print/&#34;&gt;PDF的打印&lt;/a&gt;，于找到了SumatraPDF。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;优点：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/sumatrapdfreader/sumatrapdf&#34;&gt;开源&lt;/a&gt;的pdf阅读器,功能极度精简,速度很快,免费,小巧,有一个执行文件,有便携版,支持静默打印.&lt;/p&gt;&#xA;&lt;p&gt;看官网上说支持的文件类型还不少： PDF, EPUB, MOBI, CHM, XPS, DjVu, CBZ and CBR&lt;/p&gt;&#xA;&lt;p&gt;基本上是优秀的典范.这正是我想要的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;下载：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.sumatrapdfreader.org/download-free-pdf-viewer.html&#34;&gt;https://www.sumatrapdfreader.org/download-free-pdf-viewer.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;命令行打印:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;打印到指定打印机： SumatraPdf.exe -print-to &amp;ldquo;打印机名&amp;rdquo; -print-settings &amp;ldquo;设置&amp;rdquo; &amp;ldquo;要打印的文件路径&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go程序的打印解决方法</title>
      <link>/code/2020/051714-print/</link>
      <pubDate>Sun, 17 May 2020 14:36:46 +0800</pubDate>
      <guid>/code/2020/051714-print/</guid>
      <description>&lt;p&gt;暂时没有发现原生的go控制打印的库，&lt;a href=&#34;https://github.com/alexbrainman/printer&#34;&gt;此库只适合Win&lt;/a&gt;，需测试。&lt;/p&gt;&#xA;&lt;p&gt;现在的解决方法是go&lt;a href=&#34;https://github.com/oneplus1000/gopdfsample&#34;&gt;生成pdf&lt;/a&gt;，win下的命令行软件直接打印pdf文件，从而实现打印输出功能。&lt;/p&gt;&#xA;&lt;p&gt;这样下来，系统包括几个文件：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;前台：操作、选择、输入等&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;后台：生成PDF、数据库存取等&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;打印：找了一个&lt;a href=&#34;http://i.scwy.net/it/2020/051722-pdf/&#34;&gt;绿色小巧的命令行打印PDF的工具&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>我家的Pi与智能化之路</title>
      <link>/ai/2020/051621-pi/</link>
      <pubDate>Sat, 16 May 2020 21:26:04 +0800</pubDate>
      <guid>/ai/2020/051621-pi/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../051621-pi-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;搞Pi还是比较久了，家里使用了一台Pi3作为服务器，也不断扩展它的功能。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;之前搭建了一个个人博客，本博客也一度使用Pi3服务器，估计现在的云服务器不能使用后，还会接着用它。&lt;/p&gt;</description>
    </item>
    <item>
      <title>树莓派4通过Dht11获取温湿度</title>
      <link>/it/2020/051610-dht11/</link>
      <pubDate>Sat, 16 May 2020 10:50:31 +0800</pubDate>
      <guid>/it/2020/051610-dht11/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../051610-dht11-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;今天有时间来搞一下简单的温湿度获取。dht11是一个较为普遍的温湿度传感器。&lt;/p&gt;&#xA;&lt;p&gt;来一个简单的方法：&lt;/p&gt;&#xA;&lt;p&gt;打开/boot/overlays/README，会发现Pi已经支持不少的模块。dht11自然也在其中。&lt;/p&gt;</description>
    </item>
    <item>
      <title>网页用户跟踪及实现</title>
      <link>/it/2020/051316-user/</link>
      <pubDate>Wed, 13 May 2020 16:45:58 +0800</pubDate>
      <guid>/it/2020/051316-user/</guid>
      <description>&lt;p&gt;网页用户跟踪，从产品及运营的角度，帮助产品优化体验，精准运营，为公司策略打基础。&lt;/p&gt;&#xA;&lt;p&gt;现在一般的网站由专业公司设计并交付企业，但多数双方并没有关注对于浏览者的分析。特别是对于付费推广的企业而言，这无疑是一种浪费。一般企业的动作是：浏览器点击付费，关注到店量以及成交量。&lt;/p&gt;</description>
    </item>
    <item>
      <title>五维律动</title>
      <link>/other/2020/051314-lvdong/</link>
      <pubDate>Wed, 13 May 2020 14:44:12 +0800</pubDate>
      <guid>/other/2020/051314-lvdong/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../051314-lvdong-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;宗旨&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;以音频为主体的律动方式，促进健康管理疗效。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;域名&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;wwld.cc&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;宣传语&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;科学运动，健康人生&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;大事记&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;2020.5.11 合作协议签署&lt;/p&gt;&#xA;&lt;p&gt;2020.6.16 与王讨论音频及发展模式&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;记录&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;快中慢三段运动音频。运动音频由慢至快再慢，分为7段，每段5分钟。前面播中文提示，音频中间添加节拍器。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于微信营销、添加客户、发送信息的思路</title>
      <link>/it/2020/051220-wx/</link>
      <pubDate>Tue, 12 May 2020 20:26:32 +0800</pubDate>
      <guid>/it/2020/051220-wx/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;/it/2020/051220-wx-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;因为微信的用户量巨大，所以出现了“微信营销”。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;需求：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;自动添加微信号&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;通过各种途径，收集到用户微信号进行自动添加。&lt;/p&gt;&#xA;&lt;p&gt;微信号现在很多与手机绑定，也可以通过遍历手机号来添加。&lt;/p&gt;</description>
    </item>
    <item>
      <title>SSD的概念：SLC、MLC、TLC、QLC、PLC</title>
      <link>/it/2020/051213-ssd/</link>
      <pubDate>Tue, 12 May 2020 13:41:23 +0800</pubDate>
      <guid>/it/2020/051213-ssd/</guid>
      <description>&lt;p&gt;SLC 约10万次擦写&lt;/p&gt;&#xA;&lt;p&gt;MLC 约5千-1万次擦写&lt;/p&gt;&#xA;&lt;p&gt;TLC 约500-1000次&lt;/p&gt;&#xA;&lt;p&gt;QLC 约150次&lt;/p&gt;&#xA;&lt;p&gt;PLC 更低，但没有参数说过是多少&lt;/p&gt;&#xA;&lt;p&gt;不过随着技术的发展，各个技术的读写次数也应该可以提高。&lt;/p&gt;</description>
    </item>
    <item>
      <title>树莓派GPIO模式：BCM、BOARD、wiringPi、Name</title>
      <link>/it/2020/051110-pi_gpio/</link>
      <pubDate>Mon, 11 May 2020 10:38:54 +0800</pubDate>
      <guid>/it/2020/051110-pi_gpio/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../051110-pi_gpio-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../051110-pi_gpio-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;GPIO是指图上的Name(功能名)。&lt;/p&gt;&#xA;&lt;p&gt;BOARD模式是直接指的引脚序号。&lt;/p&gt;&#xA;&lt;p&gt;BCM模式指BCM列编号。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://wiringpi.com/&#34;&gt;wiringPi&lt;/a&gt;是C语言开发的IO控制库，可以单独的编号控制。可以通过控制台来控制GPIO。&lt;/p&gt;&#xA;&lt;p&gt;github.com/nathan-osman/go-rpigpio 这个go的gpio库使用BOARD模式，即直接指定GPIO编号。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo本地工具脚本：差异化上传、文章生成、服务启动</title>
      <link>/it/2020/051021-hugo/</link>
      <pubDate>Sun, 10 May 2020 21:02:49 +0800</pubDate>
      <guid>/it/2020/051021-hugo/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash&#xA;&#xA;#上传并更新&#xA;function UpLoad() {&#xA;   echo &amp;#34;$(date &amp;#39;+%Y-%m-%d %H:%M:%S&amp;#39;) 文件上传&amp;#34;&#xA;   scp -q /dev/shm/blog.tar.gz ease@dgong.net:/data&#xA;   echo &amp;#34;$(date &amp;#39;+%Y-%m-%d %H:%M:%S&amp;#39;) 更新．．．&amp;#34;&#xA;   ssh ease@dgong.net &amp;#34;cd /data ; tar zxvf blog.tar.gz --overwrite &amp;gt; /dev/null ;  &amp;#34;&#xA;   echo &amp;#34;$(date &amp;#39;+%Y-%m-%d %H:%M:%S&amp;#39;) 更新完成&amp;#34;&#xA;   notify-send &amp;#34;更新&amp;#34; &amp;#34;博客i.scwy.net更新完毕！&amp;#34; -t 3000   &#xA;}&#xA;&#xA;#增量更新，速度最快&#xA;function AddUp() {&#xA;   echo &amp;#34;$(date &amp;#39;+%Y-%m-%d %H:%M:%S&amp;#39;) 增量更新博客，准备生成静态文件&amp;#34;&#xA;   ( cd /home/ease/Documents/hugo/EaseBlog ; /home/ease/tools/hugo -d /dev/shm/blog )   &#xA;   ( touch -m /dev/shm/blog )   &#xA;   echo &amp;#34;$(date &amp;#39;+%Y-%m-%d %H:%M:%S&amp;#39;) 文件比较&amp;#34;&#xA;   cp /home/ease/Documents/hugo/up.db /dev/shm&#xA;&#xA;   if [ -f &amp;#34;/dev/shm/tmp.txt&amp;#34;  ];   &#xA;   then&#xA;        rm /dev/shm/tmp.txt&#xA;   fi   &#xA;   if [ -f &amp;#34;/dev/shm/del.txt&amp;#34;  ];   &#xA;   then&#xA;        rm /dev/shm/del.txt&#xA;   fi   &#xA;&#xA;   ( cd /dev/shm;  /home/ease/tools/file_md5 blog) | while read line&#xA;   do&#xA;         op=$(echo $line | awk &amp;#39;{print $1}&amp;#39;);&#xA;         file=$(echo $line | awk &amp;#39;{print $2}&amp;#39;); &#xA;         echo $op,$file &amp;gt;&amp;gt; /dev/shm/tmp.txt&#xA;         if [ &amp;#34;$op&amp;#34; == &amp;#34;update&amp;#34;  ]; then&#xA;               echo &amp;#34;更新&amp;#34;,$file&#xA;               ( cd /dev/shm; tar -rvf blog.tar $file  &amp;gt; /dev/null )&#xA;         elif [ &amp;#34;$op&amp;#34; == &amp;#34;add&amp;#34;  ]; then&#xA;               echo &amp;#34;添加&amp;#34;,$file&#xA;               ( cd /dev/shm; tar -rvf blog.tar $file  &amp;gt; /dev/null )&#xA;         elif [ &amp;#34;$op&amp;#34; == &amp;#34;delete&amp;#34;  ]; then               &#xA;               echo &amp;#34;删除&amp;#34;,$file&#xA;               echo &amp;#34;rm &amp;#34; $file &amp;gt;&amp;gt; /dev/shm/del.txt&#xA;         fi&#xA;   done   &#xA;   cp /dev/shm/up.db /home/ease/Documents/hugo&#xA;&#xA;   if [ -f &amp;#34;/dev/shm/del.txt&amp;#34; ]; then&#xA;         echo &amp;#34;有文件需要删除&amp;#34;&#xA;         cmd=`cat /dev/shm/del.txt`&#xA;         ssh ease@dgong.net &amp;#34;cd /data ;  $cmd &amp;#34;&#xA;   fi &#xA;&#xA;   if [ -f &amp;#34;/dev/shm/tmp.txt&amp;#34;  ];   &#xA;   then&#xA;      echo &amp;#34;$(date &amp;#39;+%Y-%m-%d %H:%M:%S&amp;#39;) 比较完成，开始压缩&amp;#34;&#xA;      ( cd /dev/shm; gzip -c blog.tar &amp;gt; blog.tar.gz )&#xA;      UpLoad&#xA;   else &#xA;      echo &amp;#34;$(date &amp;#39;+%Y-%m-%d %H:%M:%S&amp;#39;) 比较完成，没有更新&amp;#34;               &#xA;   fi&#xA;}&#xA;&#xA;#完整更新，速度很慢&#xA;function AllUp() {&#xA;   echo &amp;#34;$(date &amp;#39;+%Y-%m-%d %H:%M:%S&amp;#39;) 完整更新博客，准备生成静态文件&amp;#34;&#xA;   ( cd /home/ease/Documents/hugo/EaseBlog ; /home/ease/tools/hugo -d /dev/shm/blog )&#xA;   ( touch -m /dev/shm/blog/css /dev/shm/blog/js /dev/shm/blog/img /dev/shm/blog)&#xA;   &#xA;   echo &amp;#34;$(date &amp;#39;+%Y-%m-%d %H:%M:%S&amp;#39;) 压缩&amp;#34;&#xA;   (cd /dev/shm ; tar czvf /dev/shm/blog.tar.gz blog &amp;gt; /dev/null)&#xA;&#xA;   UpLoad&#xA;}&#xA;&#xA;#文档部份更新，速度中等&#xA;function PortionUp() {&#xA;   echo &amp;#34;$(date &amp;#39;+%Y-%m-%d %H:%M:%S&amp;#39;) 部份更新博客，准备生成静态文件&amp;#34;&#xA;   ( cd /home/ease/Documents/hugo/EaseBlog ; /home/ease/tools/hugo -d /dev/shm/blog )&#xA;   ( touch -m /dev/shm/blog/css /dev/shm/blog/js /dev/shm/blog/img /dev/shm/blog)&#xA;   echo &amp;#34;$(date &amp;#39;+%Y-%m-%d %H:%M:%S&amp;#39;) 压缩&amp;#34;&#xA;   (cd /dev/shm ; tar czvf /dev/shm/blog.tar.gz --exclude=*.jpg --exclude=*.png --exclude=*.mp4 --exclude=*.mp3 blog &amp;gt; /dev/null)&#xA;   UpLoad   &#xA;}&#xA;&#xA;#------------------------------------------------------------------------------------------&#xA;&#xA;if [ &amp;#34;$1&amp;#34; = &amp;#34;add&amp;#34; ] || [ &amp;#34;$1&amp;#34; = &amp;#34;new&amp;#34; ]; then &#xA;   #新建一个文档&#xA;   if [ $# = 1 ]; then &#xA;     ( cd  /home/ease/Documents/hugo/EaseBlog ; /home/ease/tools/hugo new $2 )&#xA;   else  &#xA;     year=`date +%Y`&#xA;     mday=`date +%m%d%H`&#xA;     (cd /home/ease/Documents/hugo/EaseBlog;  echo `/home/ease/tools/hugo new $2/$year/$mday-$3.md`)    &#xA;   fi &#xA;elif  [ &amp;#34;$1&amp;#34; = &amp;#34;run&amp;#34; ]; then&#xA;  #运行hugo服务   &#xA;   cd /home/ease/Documents/hugo/EaseBlog ; /home/ease/tools/hugo server -D &amp;amp;&#xA;elif  [ &amp;#34;$1&amp;#34; = &amp;#34;up&amp;#34; ]; then&#xA;   PortionUp&#xA;elif [ &amp;#34;$1&amp;#34; = &amp;#34;all&amp;#34; ];  then&#xA;   #完整更新&#xA;   AllUp  &#xA;elif [  &amp;#34;$1&amp;#34; = &amp;#34;help&amp;#34; ]; then&#xA;     echo &amp;#34;&amp;#34;&#xA;     echo &amp;#34;hugo静态博客脚本工具 v1.0b&amp;#34;&#xA;     echo &amp;#34;Tu Studio .Ease 2019&amp;#34;&#xA;     echo &amp;#34;&amp;#34;&#xA;     echo &amp;#34;  blog                                增量更新&amp;#34;&#xA;     echo &amp;#34;  blog server                         运行静态服务&amp;#34;&#xA;     echo &amp;#34;  blog run                            运行本地服务器&amp;#34;&#xA;     echo &amp;#34;  blog up                             文字部份更新&amp;#34;&#xA;     echo &amp;#34;  blog all                            完整更新&amp;#34;&#xA;     echo &amp;#34;  blog add/new it ceshi                   在it目录下添加一个当前日期的ceshi.md文档&amp;#34;&#xA;     echo &amp;#34;  blog add/new it/2019/080808-ceshi.md    在it目录下添加一个指定日期的ceshi.md文档&amp;#34;&#xA;     echo &amp;#34;&amp;#34;&#xA;elif [ &amp;#34;$1&amp;#34; = &amp;#34;list&amp;#34; ]; then&#xA;     (cd /home/ease/Documents/hugo/EaseBlog/content; ls)&#xA;elif [ &amp;#34;$1&amp;#34; = &amp;#34;watch&amp;#34; ]; then&#xA;     echo &amp;#34;开始博客目录监听&amp;#34;&#xA;     /home/ease/tools/watch -path=/home/ease/Documents/hugo/EaseBlog/content -command=/home/ease/tools/blog &amp;amp;&#xA;elif [ &amp;#34;$1&amp;#34; = &amp;#34;stop&amp;#34; ]; then&#xA;     echo &amp;#34;停止博客目录监听&amp;#34;&#xA;     sudo killall watch&#xA;elif [ &amp;#34;$1&amp;#34; = &amp;#34;server&amp;#34; ]; then&#xA;     echo &amp;#34;博客静态服务&amp;#34;&#xA;　　 cd /home/ease/Documents/hugo/EaseBlog/public ; /home/ease/tools/quic/quic_linux_amd64&#xA;else &#xA;  #增量上传&#xA;   AddUp&#xA;fi &#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>Mr2内网穿透:内网暴露工具</title>
      <link>/it/2020/051020-mr2/</link>
      <pubDate>Sun, 10 May 2020 20:44:21 +0800</pubDate>
      <guid>/it/2020/051020-mr2/</guid>
      <description>&lt;p&gt;一直在用Mr2，居然没有记录一篇文章，记性差还是经常忘。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;mr2-是什么&#34;&gt;Mr.2 是什么&lt;/h4&gt;&#xA;&lt;p&gt;可以帮助你将内网服务器暴露在外网. 支持 TCP/UDP 协议, 当然也支持 HTTP 协议.&lt;/p&gt;&#xA;&lt;h4 id=&#34;github&#34;&gt;Github&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/txthinking/mr2&#34;&gt;https://github.com/txthinking/mr2&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;服务端&#34;&gt;服务端&lt;/h4&gt;&#xA;&lt;p&gt;mr2 server -l :9999 -p password&lt;/p&gt;</description>
    </item>
    <item>
      <title>5G给软件开发带来的思考及改变</title>
      <link>/it/2020/050910-5g/</link>
      <pubDate>Sat, 09 May 2020 10:52:30 +0800</pubDate>
      <guid>/it/2020/050910-5g/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../050910-5g-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;5G网络乃至6G带来的改变，主要是高速和低延迟。媒体上所有吹5G的文章，其实都只是因为这两个特点带来的变化而已。&lt;/p&gt;&#xA;&lt;p&gt;其它行业变化我们不好多讲，讲讲软件和软件开发方面可能带来的变化，以及我们如何适应这种变化，在软件设计思路上如何改变，进而做一些尝试和畅想。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mt7688用于信息显示</title>
      <link>/it/2020/050721-mt7688/</link>
      <pubDate>Thu, 07 May 2020 21:22:49 +0800</pubDate>
      <guid>/it/2020/050721-mt7688/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../050721-mt7688-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;手上有一块前两年留下来的MT7688,上面盖了一张与板子同样大小的串口屏。今天拿出来准备用来显示Pi的相关信息。其实仅用来作显示是比较浪费的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>需求：糖尿病治疗预约系统</title>
      <link>/it/2020/050711-glu/</link>
      <pubDate>Thu, 07 May 2020 11:26:23 +0800</pubDate>
      <guid>/it/2020/050711-glu/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../050711-glu-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这只是对需求的了解、记录、整理和思考。&lt;/p&gt;&#xA;&lt;h3 id=&#34;客户需求&#34;&gt;客户需求：&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;对糖尿病病人进行“强化治疗”(就诊)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;邀请各社区医生加盟&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;有专业人员教会医生此操作技能&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;加盟医生可以自定义挂号时间&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang中struct、json、map互相转化</title>
      <link>/code/2020/050621-json_map_struct/</link>
      <pubDate>Wed, 06 May 2020 21:45:11 +0800</pubDate>
      <guid>/code/2020/050621-json_map_struct/</guid>
      <description>&lt;h4 id=&#34;json转struct&#34;&gt;Json转struct&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA; &#xA;import (&#xA;        &amp;#34;fmt&amp;#34;&#xA;        &amp;#34;encoding/json&amp;#34;&#xA;)&#xA; &#xA;type People struct {&#xA;        Name string `json:&amp;#34;name_title&amp;#34;`&#xA;        Age int `json:&amp;#34;age_size&amp;#34;`&#xA;}&#xA; &#xA;func JsonToStructDemo(){&#xA;        jsonStr := `&#xA;        {&#xA;                &amp;#34;name_title&amp;#34;: &amp;#34;jqw&amp;#34;&#xA;                &amp;#34;age_size&amp;#34;:12&#xA;        }&#xA;        `&#xA;        var people People&#xA;        json.Unmarshal([]byte(jsonStr), &amp;amp;people)&#xA;        fmt.Println(people)&#xA;}&#xA; &#xA;func main(){&#xA;        JsonToStructDemo()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;注意json里面的key和struct里面的key要一致，struct中的key的首字母必须大写，而json中大小写都可以。&lt;/p&gt;</description>
    </item>
    <item>
      <title>家教:少儿编程/少儿计算机</title>
      <link>/teach/2020/050517-prog/</link>
      <pubDate>Tue, 05 May 2020 17:40:04 +0800</pubDate>
      <guid>/teach/2020/050517-prog/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../050517-prog-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;前言&#34;&gt;前言&lt;/h4&gt;&#xA;&lt;p&gt;作为程序员的孩子，认为计算机思维是需要学习的。学习&lt;strong&gt;编程的目的&lt;/strong&gt;肯定不是当所谓的“码农”，当他们工作时，普通的码农也已经不需要了。&lt;strong&gt;少儿学习编程/计算机的目的是：更好的了解计算机工作原理，理解它的工作方式。未来能更好的与计算机合作。&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ssh 登录旧设备的问题解决</title>
      <link>/it/2020/050511-ssh/</link>
      <pubDate>Tue, 05 May 2020 11:39:33 +0800</pubDate>
      <guid>/it/2020/050511-ssh/</guid>
      <description>&lt;p&gt;因为家里有一个MT7688需要ssh进入，但出现错误提示：&lt;/p&gt;&#xA;&lt;p&gt;Unable to negotiate with 192.168.100.109 port 22: no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group1-sha1,kexguess2@matt.ucc.asn.au&lt;/p&gt;&#xA;&lt;p&gt;看类似的解决方法&lt;/p&gt;&#xA;&lt;p&gt;ssh登录一些老旧设备，出现以下问题：&lt;/p&gt;&#xA;&lt;p&gt;问题：Unable to negotiate with 192.168.xx.xx port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1&lt;/p&gt;</description>
    </item>
    <item>
      <title>linux下使用命令行获取公网ip地址</title>
      <link>/it/2020/050317-ip/</link>
      <pubDate>Sun, 03 May 2020 17:21:08 +0800</pubDate>
      <guid>/it/2020/050317-ip/</guid>
      <description>&lt;p&gt;原地址：https://www.lxx1.com/5110&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;curl ipinfo.io&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# curl ipinfo.io&#xA;{&#xA;  &amp;#34;ip&amp;#34;: &amp;#34;121.36.81.4&amp;#34;,&#xA;  &amp;#34;hostname&amp;#34;: &amp;#34;ecs-121-36-81-4.compute.hwclouds-dns.com&amp;#34;,&#xA;  &amp;#34;city&amp;#34;: &amp;#34;Beijing&amp;#34;,&#xA;  &amp;#34;region&amp;#34;: &amp;#34;Beijing&amp;#34;,&#xA;  &amp;#34;country&amp;#34;: &amp;#34;CN&amp;#34;,&#xA;  &amp;#34;loc&amp;#34;: &amp;#34;39.9075,116.3972&amp;#34;,&#xA;  &amp;#34;org&amp;#34;: &amp;#34;AS55990 Huawei Cloud Service data center&amp;#34;,&#xA;  &amp;#34;timezone&amp;#34;: &amp;#34;Asia/Shanghai&amp;#34;,&#xA;  &amp;#34;readme&amp;#34;: &amp;#34;https://ipinfo.io/missingauth&amp;#34;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;curl httpbin.org/ip&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# curl httpbin.org/ip&#xA;{&#xA;&amp;#34;origin&amp;#34;: &amp;#34;121.36.81.4&amp;#34;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;curl myip.ipip.net&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# curl myip.ipip.net&#xA;当前 IP：121.36.81.4  来自于：中国 北京 北京  电信/联通/移动&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;curl ip.sb&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>自我扫盲：Quic协议</title>
      <link>/it/2020/043016-quic/</link>
      <pubDate>Thu, 30 Apr 2020 16:47:23 +0800</pubDate>
      <guid>/it/2020/043016-quic/</guid>
      <description>&lt;h4 id=&#34;简介&#34;&gt;简介&lt;/h4&gt;&#xA;&lt;p&gt;&lt;strong&gt;QUIC&lt;/strong&gt;（Quick UDP Internet Connection）是&lt;strong&gt;谷歌&lt;/strong&gt;制定的一种基于&lt;strong&gt;UDP&lt;/strong&gt;的低时延的互联网传输层协议。&lt;/p&gt;&#xA;&lt;p&gt;QUIC融合了包括TCP，TLS，HTTP/2等协议的特性，但基于UDP传输。&lt;/p&gt;</description>
    </item>
    <item>
      <title>中新惠尔健康管理软件　相关资料整理</title>
      <link>/it/2020/043014-health/</link>
      <pubDate>Thu, 30 Apr 2020 14:49:04 +0800</pubDate>
      <guid>/it/2020/043014-health/</guid>
      <description>&lt;p&gt;官方网站&lt;a href=&#34;http://www.wellcare.cn/&#34;&gt;http://www.wellcare.cn/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;已经完成的体检接口&#34;&gt;已经完成的体检接口&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;编号&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;名称&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;1&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;天津康宁津园体检软件（天方达）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;蓝海之略-天方达体检软件&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;3&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;天津中海油健康体检软件　&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;4&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;上海万达全程健康体检系统　&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;5&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;佛山禅城体检系统　&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;6&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;厦门国宇体检软件&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;7&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;北极鸥体检管理系统　&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;8&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;卫宁体检管理系统　&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;9&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;天津康宁津园HIS系统&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;10&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;天津康宁津园ERP系统&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;11&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;上海瑞慈体检软件　&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;12&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;沈阳大唐CRM系统&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;13&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;天方达体检管理软件V1503&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;14&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;武汉飞博体检管理软件&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;15&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;华世永康体检管理软件&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;16&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;中联体检软-LF&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;17&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;康软体检软件&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;18&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;东软体检软件&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;19&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;天科恒业体会管理软件2018&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;20&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;天方达体检管理软件&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;21&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;杭创体检管理软件　&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;22&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;中联体检管理软件V10.28.10&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;23&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;巨龙体检管理软件&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;24&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;天健体检管理软件　&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;25&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;华康盛道体检管理软件&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;26&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;中科恒业体检管理软件&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;27&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;中联体检管理软件&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;28&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;标软体检管理软件&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;运行环境&#34;&gt;运行环境&lt;/h3&gt;&#xA;&lt;p&gt;独立服务器：CPU3.0G以上，内存16G以上，硬盘500G以上。&#xA;网络：不低于5M独享。&lt;/p&gt;</description>
    </item>
    <item>
      <title>命令行技巧和功能</title>
      <link>/it/2020/042610-linux/</link>
      <pubDate>Sun, 26 Apr 2020 10:19:43 +0800</pubDate>
      <guid>/it/2020/042610-linux/</guid>
      <description>&lt;h1 id=&#34;windows&#34;&gt;Windows&lt;/h1&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;列出文件并排除某些文件&lt;br&gt;&#xA;ls &lt;em&gt;.go -exclude&lt;/em&gt;_test.go&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;使用for in中的变量。&lt;br&gt;&#xA;注意第一句:设置本地为延迟扩展。即延迟变量，全称延迟环境变量扩展&lt;br&gt;&#xA;及变量引用将%改为!&lt;br&gt;&#xA;此脚本实现列出所有扩展名为go的文件，并排除_test.go，即不是测试文件。&lt;br&gt;&#xA;示例1的效果相同&lt;br&gt;&#xA;想批量用vs code打开非test的go文件，虽然echo没错，但打开文件依然不成功。待续&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu20.04使用的Snap是个啥</title>
      <link>/it/2020/042422-snap/</link>
      <pubDate>Fri, 24 Apr 2020 22:57:09 +0800</pubDate>
      <guid>/it/2020/042422-snap/</guid>
      <description>&lt;p&gt;其实之前19版已有经snap，不过20版将snap引为主流。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;简介&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;snap是一种全新的软件包管理方式，类似于一个容器拥有一个应用程序所有的文件和库，各个应用程序之间完全独立。&lt;/p&gt;</description>
    </item>
    <item>
      <title> Godot 免费跨平台游戏引擎（十二、软件GUI）</title>
      <link>/it/2020/042220-godot/</link>
      <pubDate>Wed, 22 Apr 2020 20:50:20 +0800</pubDate>
      <guid>/it/2020/042220-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>知识就是力量：博客中实现个人微信免签收款，让知识产生价值</title>
      <link>/it/2020/042209-blog/</link>
      <pubDate>Wed, 22 Apr 2020 09:12:37 +0800</pubDate>
      <guid>/it/2020/042209-blog/</guid>
      <description>&lt;p&gt;&lt;strong&gt;源起：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;写文章/博客除了记录一些容易忘记的知识以外，也会有一些创造、创意，一些个人的经验积累和心血。希望获得读者的认同和赞赏，或者是付费阅读。&#xA;&#xA;前段时间就自己建立了一个静态博客，用的Hugo(我翻译叫它火锅)。因为是静态，速度贼快。加之使用了脚本和一点小工具，写了文章只后，只需要按热键即可自动差异上传(不会上传整个博客内容，仅上传有改动的)。整体感觉不错。&#xA;&#xA;偶然想到知识付费的问题，所以计划将部份文章改为付费后才能完整浏览。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;效果图：&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>个人微信收款实现思路</title>
      <link>/it/2020/042013-wxpay/</link>
      <pubDate>Mon, 20 Apr 2020 13:07:54 +0800</pubDate>
      <guid>/it/2020/042013-wxpay/</guid>
      <description>&lt;p&gt;2020.9.22&lt;/p&gt;&#xA;&lt;p&gt;更换另一种获取付费信息的方式，测试完善中。&lt;/p&gt;&#xA;&lt;p&gt;若付费后两分钟内没有自动出现内容（正常情况在一分钟内），&lt;a href=&#34;http://125.65.40.219:9090/message/&#34;&gt;请与我联系&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;2020.9.10&lt;/p&gt;&#xA;&lt;p&gt;最近网友在付费后，偶尔有不能显示内容的情况。我做一下说明：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu20.4 尝鲜党</title>
      <link>/it/2020/042010-ubuntu204/</link>
      <pubDate>Mon, 20 Apr 2020 10:54:03 +0800</pubDate>
      <guid>/it/2020/042010-ubuntu204/</guid>
      <description>&lt;p&gt;我是一个升级党/尝鲜党，总是习惯将系统或软件升级到最新版本。这次升级到Ubuntu20.4的测试版，原则上是希望它能提升系统性能。不过似乎不少的程序都不能运行，或者没有安装，它启用了snap方式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎（十一、源码编译）</title>
      <link>/it/2020/041716-godot/</link>
      <pubDate>Fri, 17 Apr 2020 16:29:38 +0800</pubDate>
      <guid>/it/2020/041716-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>憋久了，说走就走去九寨</title>
      <link>/other/2020/040908-jiuzhai/</link>
      <pubDate>Thu, 09 Apr 2020 08:39:35 +0800</pubDate>
      <guid>/other/2020/040908-jiuzhai/</guid>
      <description>&lt;p&gt;&lt;strong&gt;先是一些简单的资料，网上找一找：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;九寨沟位于四川省西北部岷山山脉南段的阿坝藏族羌族自治州九寨沟县漳扎镇境内，地处岷山南段弓杆岭的东北侧。距离成都市400多千米，系长江水系嘉陵江上游白水江源头的一条大支沟。 九寨沟自然保护区地势南高北低，山谷深切，高差悬殊。北缘九寨沟口海拔仅2000米，中部峰岭均在4000米以上，南缘达4500米以上，主沟长30多公里。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot实现背景透明（不规则窗口/透明窗体）</title>
      <link>/it/2020/040809-godot/</link>
      <pubDate>Wed, 08 Apr 2020 09:58:09 +0800</pubDate>
      <guid>/it/2020/040809-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot导出安卓出错</title>
      <link>/it/2020/040610-godot_err/</link>
      <pubDate>Mon, 06 Apr 2020 10:09:47 +0800</pubDate>
      <guid>/it/2020/040610-godot_err/</guid>
      <description>&lt;p&gt;Godot有跨平台的优点，之前Linux和Win，以及Html5都成功，且操作简单。因为浏览器多样性，H5的兼容性确实要差一些。&lt;/p&gt;&#xA;&lt;p&gt;昨天试了导出安卓，路径设置部份还是比较简单。但导出时发生错误：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎（十、相关资源）</title>
      <link>/it/2020/040215-godotres/</link>
      <pubDate>Thu, 02 Apr 2020 15:44:39 +0800</pubDate>
      <guid>/it/2020/040215-godotres/</guid>
      <description>&lt;p&gt;在学习过程中，不断发现一些Godot相关资源，于是收集起来便于日后使用。有时没有认真去学习，先存下来，以后再整理。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://godotengine.org&#34;&gt;官网&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/godotengine/godot&#34;&gt;Github&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.godotengine.org/zh_CN/latest/&#34;&gt;官方中文文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/godot/zh_CN/latest/&#34;&gt;我的中文文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/godot/en/latest/&#34;&gt;我的英文文档&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/godot/docs-godotengine-org-en-3.1.epub&#34;&gt;3.1英文epub&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/godot/docs-godotengine-org-en-3.0.pdf&#34;&gt;3.0英文PDF&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.godotengine.org/zh_CN/latest/getting_started/step_by_step/index.html#toc-learn-step-by-step&#34;&gt;中文官方渐进式教程&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.godotengine.org/zh_CN/latest/getting_started/scripting/gdscript/gdscript_basics.html#doc-gdscript&#34;&gt;GDScript基础&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://downloads.tuxfamily.org/godotengine&#34;&gt;各版下载&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://godotengine.org/asset-library&#34;&gt;官方资源&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;一些教程：&lt;a href=&#34;http://codetuto.com/tag/godot/&#34;&gt;http://codetuto.com/tag/godot/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎（九、GUI外观）</title>
      <link>/it/2020/040114-godot/</link>
      <pubDate>Wed, 01 Apr 2020 14:01:31 +0800</pubDate>
      <guid>/it/2020/040114-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎（八、网络）</title>
      <link>/it/2020/033116-godot/</link>
      <pubDate>Tue, 31 Mar 2020 16:18:17 +0800</pubDate>
      <guid>/it/2020/033116-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 使用Light2D实现遮罩效果</title>
      <link>/it/2020/033022-godot/</link>
      <pubDate>Mon, 30 Mar 2020 22:24:43 +0800</pubDate>
      <guid>/it/2020/033022-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot ParallaxBackground 视差背景</title>
      <link>/it/2020/033016-godot/</link>
      <pubDate>Mon, 30 Mar 2020 16:07:05 +0800</pubDate>
      <guid>/it/2020/033016-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot简单制作残影效果</title>
      <link>/it/2020/032921-godot/</link>
      <pubDate>Sun, 29 Mar 2020 21:27:57 +0800</pubDate>
      <guid>/it/2020/032921-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>学习Godot的一点思考</title>
      <link>/it/2020/031911-think/</link>
      <pubDate>Thu, 19 Mar 2020 11:45:13 +0800</pubDate>
      <guid>/it/2020/031911-think/</guid>
      <description>&lt;p&gt;最近在学习Godot，一个游戏引擎。现在刚学到2D及GUI部份。它基本包括了大部份的界面元素，感觉它足够完成一个软件的界面，当然更象是大炮打蚊子。&lt;/p&gt;</description>
    </item>
    <item>
      <title>自我科普 Vulkan</title>
      <link>/it/2020/031610-vulkan/</link>
      <pubDate>Mon, 16 Mar 2020 10:23:54 +0800</pubDate>
      <guid>/it/2020/031610-vulkan/</guid>
      <description>&lt;p&gt;Vulkan 乌尔坎？瓦肯？&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../031610-vulkan-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最近越来越多软件宣布支持Vulkan，包括最近看的Godot，也宣传在今年中期发布的4版本中支持它。感觉很强大的样子，所以应该学习学习。&lt;/p&gt;</description>
    </item>
    <item>
      <title>个人微信收款API思路</title>
      <link>/it/2020/031518-weixin/</link>
      <pubDate>Sun, 15 Mar 2020 18:28:15 +0800</pubDate>
      <guid>/it/2020/031518-weixin/</guid>
      <description>&lt;p&gt;微信相关服务一般是需要申请为企业，要求工商等相关证照，很多服务还需要认证。&lt;/p&gt;&#xA;&lt;p&gt;对于个人用户来说，如何把收费管理起来，联合其它功能做一些收款业务。&lt;/p&gt;&#xA;&lt;p&gt;比如，当用户向个人付费后，自动开通某项服务，发送某条信息等。这就需要判断个人微信的收费信息。&lt;/p&gt;</description>
    </item>
    <item>
      <title>码农家的孩子：学字母（Godot改版中）</title>
      <link>/it/2020/031413-godot/</link>
      <pubDate>Sat, 14 Mar 2020 13:02:23 +0800</pubDate>
      <guid>/it/2020/031413-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎（七、2D）</title>
      <link>/it/2020/031222-godot/</link>
      <pubDate>Thu, 12 Mar 2020 22:26:46 +0800</pubDate>
      <guid>/it/2020/031222-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎（六、一些收集）</title>
      <link>/it/2020/031221-godot/</link>
      <pubDate>Thu, 12 Mar 2020 21:26:46 +0800</pubDate>
      <guid>/it/2020/031221-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>我(孩子)的世界，我的乐高</title>
      <link>/teach/2020/031115-legao/</link>
      <pubDate>Wed, 11 Mar 2020 15:43:58 +0800</pubDate>
      <guid>/teach/2020/031115-legao/</guid>
      <description>&lt;p&gt;记录孩子创造的乐高模型，没有大人参与。两个孩子现在6岁半的样子，没有真正去学过乐高。&lt;/p&gt;&#xA;&lt;p&gt;我们更在意的是想象和思考。&lt;/p&gt;&#xA;&lt;h4 id=&#34;编号01&#34;&gt;编号：01&lt;/h4&gt;&#xA;&lt;p&gt;日期：2020.2&lt;/p&gt;&#xA;&lt;p&gt;作者：乔&lt;/p&gt;&#xA;&lt;p&gt;说明：尧在后面操作电脑，乔在前面开飞机。爸爸说键盘鼠标放反了，后来改正过来了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎（五、常用英文）</title>
      <link>/it/2020/030921-godot/</link>
      <pubDate>Mon, 09 Mar 2020 21:21:37 +0800</pubDate>
      <guid>/it/2020/030921-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎 (四、脚本GDScript)</title>
      <link>/it/2020/030913-godot/</link>
      <pubDate>Mon, 09 Mar 2020 13:41:15 +0800</pubDate>
      <guid>/it/2020/030913-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎（三、理论是实践的基础）</title>
      <link>/it/2020/030721-godot/</link>
      <pubDate>Sat, 07 Mar 2020 21:43:40 +0800</pubDate>
      <guid>/it/2020/030721-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎（二、第一个游戏）</title>
      <link>/it/2020/030620-godot/</link>
      <pubDate>Fri, 06 Mar 2020 20:27:10 +0800</pubDate>
      <guid>/it/2020/030620-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Godot 免费跨平台游戏引擎 (一、初见)</title>
      <link>/it/2020/030609-godot/</link>
      <pubDate>Fri, 06 Mar 2020 09:21:07 +0800</pubDate>
      <guid>/it/2020/030609-godot/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030609-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (一、初见)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030620-godot/&#34;&gt;Godot 免费跨平台游戏引擎（二、第一个游戏）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030721-godot/&#34;&gt;Godot 免费跨平台游戏引擎（三、理论是实践的基础）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/it/2020/030913-godot/&#34;&gt;Godot 免费跨平台游戏引擎 (四、脚本GDScript)&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang Gui: giu</title>
      <link>/code/2020/030515-gui/</link>
      <pubDate>Thu, 05 Mar 2020 15:01:45 +0800</pubDate>
      <guid>/code/2020/030515-gui/</guid>
      <description>&lt;p&gt;虽然这不是golang的特长，不过偶尔也会涉及到带界面的需求，但舍近求远去用其它语言还是比较不爽的。MS在界面设计上一直都比较简单，但go就比较麻烦一些。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nginx下使用websocket产生的错误</title>
      <link>/it/2020/030418-nginx/</link>
      <pubDate>Wed, 04 Mar 2020 18:02:33 +0800</pubDate>
      <guid>/it/2020/030418-nginx/</guid>
      <description>&lt;p&gt;在使用nginx进行端口转发时，使用了websocket，但出现错误：&lt;/p&gt;&#xA;&lt;p&gt;websocket: the client is not using the websocket protocol: ‘upgrade’ token not found in ‘Connection’ head&lt;/p&gt;&#xA;&lt;p&gt;当反向代理或负载平衡器未正确传递WebSocket请求时，就会出现此问题。以下是解决此问题的说明。&lt;/p&gt;</description>
    </item>
    <item>
      <title>精品文章和下载资源思路</title>
      <link>/it/2020/030220-down/</link>
      <pubDate>Mon, 02 Mar 2020 20:34:35 +0800</pubDate>
      <guid>/it/2020/030220-down/</guid>
      <description>&lt;p&gt;针对博客中的一些精品文章，一些个人资源，提供一种推广微信的思路：&lt;/p&gt;&#xA;&lt;p&gt;文章只显示部份（通过标识），未显示部份用数字代替，并显示微信二维码。当扫码后可以刷新或自动显示隐藏内容。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux下wget爬取整站</title>
      <link>/it/2020/030219-down/</link>
      <pubDate>Mon, 02 Mar 2020 19:48:04 +0800</pubDate>
      <guid>/it/2020/030219-down/</guid>
      <description>&lt;p&gt;有时候网站存在本地有很多好处，比如我不一定随时都有网，比如网站不一定都能正常访问，比如本地访问肯定更快。&lt;/p&gt;&#xA;&lt;p&gt;原本以为还是象win一样，需要下载一个软件，其实Linux是如此简单。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一文搞懂Https以及相关文件</title>
      <link>/it/2020/030215-https/</link>
      <pubDate>Mon, 02 Mar 2020 15:21:23 +0800</pubDate>
      <guid>/it/2020/030215-https/</guid>
      <description>&lt;p&gt;早就要求https了，毕竟加密后更安全。网上是有一些免费的证书申请。之前虽然也做过，不过没有系统的做过整理，总是有点糊。趁这次做一些整理，争取一篇文章把相关东西都搞明白。文章严格来说不算原创，严格来说很多知识都是前人的结晶，原创极少。 :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>码农家的孩子：学字母</title>
      <link>/code/2020/022615-pygame/</link>
      <pubDate>Wed, 26 Feb 2020 15:47:33 +0800</pubDate>
      <guid>/code/2020/022615-pygame/</guid>
      <description>&lt;p&gt;由于疫情的影响，两个孩子在家，天天在家都快翻天了。&lt;/p&gt;&#xA;&lt;p&gt;计划中的学字母，但孩子总是兴趣不大。只能用游戏来吸引了。&lt;/p&gt;&#xA;&lt;p&gt;似乎有两三年没用Python了，代码也就是能玩的程度，也没有太多优化之类。最初就是&lt;a href=&#34;https://blog.csdn.net/zhangenter/article/details/90349251&#34;&gt;网友的一个打字游戏&lt;/a&gt;，在此基本上添加了一些音效、背景之类的东西。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux上PostgreSQL绿色版安装</title>
      <link>/it/2020/022321-postgres/</link>
      <pubDate>Sun, 23 Feb 2020 21:18:41 +0800</pubDate>
      <guid>/it/2020/022321-postgres/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../022321-postgres-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;总是记不住，只能记下来。有一段时间没用Postgresql了，更新不少东西（虽然不一定用得上）。感觉比mysql强大不少，而且越来越多的用户因为担心mysql闭源的可能，而改用postgresql。&lt;/p&gt;</description>
    </item>
    <item>
      <title>每月熄灯时间</title>
      <link>/other/2020/022221-xd/</link>
      <pubDate>Sat, 22 Feb 2020 21:27:05 +0800</pubDate>
      <guid>/other/2020/022221-xd/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../022221-xd-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;有没有觉得古人很智慧？我想是因为他们有大把的时间仰望天空或者俯看大地。而我们总是忙碌，忙碌着看手机上的无聊视频。小视频的火热，证明了大家的忙碌无聊。&lt;/p&gt;</description>
    </item>
    <item>
      <title>给Vufine智能眼镜的改进建议</title>
      <link>/other/2020/022116-vufine/</link>
      <pubDate>Fri, 21 Feb 2020 16:39:52 +0800</pubDate>
      <guid>/other/2020/022116-vufine/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;/it/2020/021917-yj-05.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;严格的来说，Vufine算不得智能眼镜，只能算是一个眼镜显示终端而已。不过它正是当前比较合适的显示方案。以下作一些建议。&lt;/p&gt;&#xA;&lt;h3 id=&#34;一初级建议&#34;&gt;一、初级建议&lt;/h3&gt;&#xA;&lt;p&gt;这是比较容易实现、成本较小的改动。&lt;/p&gt;</description>
    </item>
    <item>
      <title>苹果开始瞎搞了？你不坏我咋卖：苹果手机电量陷阱</title>
      <link>/other/2020/022109-pg/</link>
      <pubDate>Fri, 21 Feb 2020 09:43:42 +0800</pubDate>
      <guid>/other/2020/022109-pg/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../022109-pg-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;背景&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;p&gt;ios 13.4，我是更新比较积极的。我的电池最大容量为96％。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;现象&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;p&gt;使用中，电量是看着看着唰唰往下掉。而在之前的版本中是不存在此现象的。&lt;/p&gt;&#xA;&lt;p&gt;于是我重新启动，之前显示的是77％的电，但启动后显示89％。&lt;/p&gt;</description>
    </item>
    <item>
      <title>智能眼镜的两种显示方式</title>
      <link>/it/2020/021917-yj/</link>
      <pubDate>Wed, 19 Feb 2020 17:17:56 +0800</pubDate>
      <guid>/it/2020/021917-yj/</guid>
      <description>&lt;p&gt;就现有的技术而言，受限于通讯及周边模块、电源的限制，眼镜只适合于作为显示器使用。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../021917-yj-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;眼镜显示我想有两种方式较为合适：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;投影&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;内置投影器，将要示的内容投影到镜片。&lt;/p&gt;</description>
    </item>
    <item>
      <title>语言终结者：谁的语言更好</title>
      <link>/other/2020/021915-yy/</link>
      <pubDate>Wed, 19 Feb 2020 15:18:24 +0800</pubDate>
      <guid>/other/2020/021915-yy/</guid>
      <description>&lt;p&gt;在“今日头条”中看到网友的一个观点，个人比较赞同：教育部门让学生花费大量的时间和精力去学习外语，其实对于创造和实际生活来说，并没有太大价值，或者说性价比很低。浪费了大量的国民时间。&lt;/p&gt;</description>
    </item>
    <item>
      <title>读书：《增长黑客》</title>
      <link>/other/2020/021812-zzhk/</link>
      <pubDate>Tue, 18 Feb 2020 12:08:15 +0800</pubDate>
      <guid>/other/2020/021812-zzhk/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../021812-zzhk-01.jpg&#34; alt=&#34;增长黑客&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;习惯性的看印次：2018年1月第1版 2019年11月第21次印刷。这是我见过的最多印象次的书。&lt;/p&gt;&#xA;&lt;h4 id=&#34;前言&#34;&gt;前言&lt;/h4&gt;&#xA;&lt;p&gt;我们也正面临高成本投入，低广告收益的窘境。单客成本越来越高，获客方式越来越单一和没有创造性。&lt;/p&gt;</description>
    </item>
    <item>
      <title>网站推荐</title>
      <link>/it/2020/021611-web/</link>
      <pubDate>Sun, 16 Feb 2020 11:18:15 +0800</pubDate>
      <guid>/it/2020/021611-web/</guid>
      <description>&lt;p&gt;将不断收集更新&amp;hellip;&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;网站&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;网址&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;说明&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;收录&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;易百教程&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://www.yiibai.com/&#34;&gt;https://www.yiibai.com/&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;PostgreSQL教程、Python、AI&amp;hellip;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2020.2.16&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;MSDN我告诉你&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://msdn.itellyou.cn/&#34;&gt;https://msdn.itellyou.cn/&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;微软家的东西下载&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2020.2.23&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;</description>
    </item>
    <item>
      <title>微信24小时客服</title>
      <link>/it/2020/021409-wx/</link>
      <pubDate>Fri, 14 Feb 2020 09:20:00 +0800</pubDate>
      <guid>/it/2020/021409-wx/</guid>
      <description>&lt;h3 id=&#34;问题&#34;&gt;问题：&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;官方微信客服功能需要登陆PC，我们总不方便24小时用PC的。&lt;/li&gt;&#xA;&lt;li&gt;通过PC完成客服功能，我们有30个客户同时访问，我在哪里去找30个微信号？(私人微信号别人可不愿意拿来公用)&lt;/li&gt;&#xA;&lt;li&gt;登陆PC太麻烦&lt;/li&gt;&#xA;&lt;li&gt;我需要100个客服号，一般的客服系统是按座席计费的。&lt;/li&gt;&#xA;&lt;li&gt;客服内容是有价值的数据，我需要保存起来&lt;/li&gt;&#xA;&lt;li&gt;网页也需要能使用统一的客服系统&lt;/li&gt;&#xA;&lt;li&gt;文字、图片、语音、视频、链接，我都要&lt;/li&gt;&#xA;&lt;li&gt;自动回复，功能回复&lt;/li&gt;&#xA;&lt;li&gt;为了数据安全，我需要自建服务器，把数据用来分析。&lt;/li&gt;&#xA;&lt;li&gt;微信公众号只保留5天信息，我想把咨询保留起来怎么办。&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;特点&#34;&gt;特点&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;使用企业微信实现24小时客服在线服务。&lt;/li&gt;&#xA;&lt;li&gt;自行搭建服务器或者使用公共服务器，解决数据安全性和部署难度。&lt;/li&gt;&#xA;&lt;li&gt;多种数据库(mysql、postgresql、sqlite3)，开源免费。&lt;/li&gt;&#xA;&lt;li&gt;多端跨平台(服务端跨平台，客服端跨平台，数据库跨平台)&lt;/li&gt;&#xA;&lt;li&gt;天生并发性能(Golang开发)。&lt;/li&gt;&#xA;&lt;li&gt;优秀的跨平台及开源特性，决定二次成本基本为零。(系统平台使用Linux免费,数据库平台免费)&lt;/li&gt;&#xA;&lt;li&gt;多端口客服(微信客户端口、网页客户端口，企业微信客服端口24小时在线、网页客服端口快速丰富)。&lt;/li&gt;&#xA;&lt;li&gt;可与其它平台对接客户信息，实现统一的客户关系系统和管理。&lt;/li&gt;&#xA;&lt;li&gt;使用企业微信与客户微信互动，可实现更丰富的功能(文字、图片、语音、视频、链接)。&lt;/li&gt;&#xA;&lt;li&gt;无需安装第三方应用(手机端可以直接使用微信官方应用)&lt;/li&gt;&#xA;&lt;li&gt;AI自动回复（使用腾讯AI）&lt;/li&gt;&#xA;&lt;li&gt;支持多企业多客服在线&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;功能&#34;&gt;功能&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;向内部某客服发送信息 toXXX:????&lt;/li&gt;&#xA;&lt;li&gt;向所有客服发送信息 toALL:????&lt;/li&gt;&#xA;&lt;li&gt;开启服务 PLAY&lt;/li&gt;&#xA;&lt;li&gt;暂停服务 STOP (默认为暂停)&lt;/li&gt;&#xA;&lt;li&gt;主动终止会话 END&lt;/li&gt;&#xA;&lt;li&gt;登陆页通知&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Web客服端：&lt;/p&gt;</description>
    </item>
    <item>
      <title>读书:《财务自由之路》</title>
      <link>/money/2020/020817-caiwu/</link>
      <pubDate>Sat, 08 Feb 2020 17:56:45 +0800</pubDate>
      <guid>/money/2020/020817-caiwu/</guid>
      <description>&lt;p&gt;这是一篇读书记录。受疫情影响在家，快递终于送来了书，充充电。我是3本一起购买，据说第二本注重实操。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://book.douban.com/subject/27009488/&#34;&gt;送你到豆瓣了解一下本书&lt;/a&gt; 或者 &lt;a href=&#34;https://baike.baidu.com/item/%E8%B4%A2%E5%8A%A1%E8%87%AA%E7%94%B1%E4%B9%8B%E8%B7%AF/7692156?fr=aladdin&#34;&gt;看看百度百科的介绍&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;有资料说看书好不好，注意它的版次：2017年3月第1版，2019年7月第3次印刷。&lt;/p&gt;</description>
    </item>
    <item>
      <title>给我留言点这里</title>
      <link>/other/2020/020711-liuyan/</link>
      <pubDate>Fri, 07 Feb 2020 11:29:16 +0800</pubDate>
      <guid>/other/2020/020711-liuyan/</guid>
      <description>&lt;h3 id=&#34;给我留言点这里http12565402199090message&#34;&gt;&lt;a href=&#34;http://125.65.40.219:9090/message/&#34;&gt;给我留言点这里&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;为了方便有朋友给我留言，用了点时间写个简单的留言功能。它将信息直接发送到我的微信上。&lt;/p&gt;&#xA;&lt;p&gt;这其实是一个企业微信功能的简单应用。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;已将功能集成到每个页面中。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux软件使用感受</title>
      <link>/it/2020/020520-linux/</link>
      <pubDate>Wed, 05 Feb 2020 20:54:54 +0800</pubDate>
      <guid>/it/2020/020520-linux/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../020218-zsh-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Linux的用户还是比较小众，虽然类似华为这些大厂也在转向。当然有人说Linux的安装量是第一的，但真正用它的还是少数。&lt;/p&gt;&#xA;&lt;p&gt;Linux的界面是越来越漂亮，越来越丰富，有的甚至模仿得不错。但整体交互还是差些。&lt;/p&gt;</description>
    </item>
    <item>
      <title>IT知识点滴收集</title>
      <link>/it/2020/020519-dian/</link>
      <pubDate>Wed, 05 Feb 2020 19:39:36 +0800</pubDate>
      <guid>/it/2020/020519-dian/</guid>
      <description>&lt;p&gt;源起：&lt;/p&gt;&#xA;&lt;p&gt;有些概念总是记不清，因为网络的便利，也不太想记清。另外说，年龄大了(嗯，比不上十七八了)记性就差了，我们应该找一些方法，而不是知识本身。所以将一些知识收集起来方便查询。&lt;/p&gt;</description>
    </item>
    <item>
      <title>天猫精灵产品建议</title>
      <link>/it/2020/020511-tianmao/</link>
      <pubDate>Wed, 05 Feb 2020 11:54:22 +0800</pubDate>
      <guid>/it/2020/020511-tianmao/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../020511-tianmao-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;允许蓝牙双向连接，即作为主机和客机。允许客机拾音，拾音后统一通过主机处理，其实就象多个蓝牙耳机一样。&lt;/li&gt;&#xA;&lt;li&gt;蓝牙多子机连接，即一个主机，多个主机，将其功能扩展到多个房间&lt;/li&gt;&#xA;&lt;li&gt;开放本地网络的连接，减小接入难度。天猫精灵只作为一个桥接，负责处理语音。&lt;/li&gt;&#xA;&lt;li&gt;增加音频输出接口，可选配汽车电源供电，用于车辆中使用。&lt;/li&gt;&#xA;&lt;li&gt;APP增加控制功能，比如音量大小，硬件控制等。&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;现在家里有两个，X1和方糖，有时是“一呼百应“，同时响应。&lt;/p&gt;</description>
    </item>
    <item>
      <title>设想：健忘症助手</title>
      <link>/other/2020/020418-jianwang/</link>
      <pubDate>Tue, 04 Feb 2020 18:44:04 +0800</pubDate>
      <guid>/other/2020/020418-jianwang/</guid>
      <description>&lt;h4 id=&#34;功能&#34;&gt;功能：&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;方便的录音功能&lt;/li&gt;&#xA;&lt;li&gt;语音搜索&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h4 id=&#34;用户&#34;&gt;用户：&lt;/h4&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;健忘症者&lt;/li&gt;&#xA;&lt;li&gt;老年人&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这里之所有区别开，主要是考虑有部份中青年人也有健忘症。&lt;/p&gt;&#xA;&lt;h4 id=&#34;实现&#34;&gt;实现：&lt;/h4&gt;&#xA;&lt;p&gt;如果是纯软件的实现比较简单，最好是一键调出应用，直接开始录音。让用户没有多余的操作。网上似乎出过利用耳机插孔的应用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>SwitchBot 拉窗帘机器人</title>
      <link>/other/2020/020219-switchbot/</link>
      <pubDate>Sun, 02 Feb 2020 19:17:23 +0800</pubDate>
      <guid>/other/2020/020219-switchbot/</guid>
      <description>&lt;p&gt;一般的智能窗帘方案，是需要整个拉杆购买的，是一个整体。对于后期“补充”智能系统的用户是一个比较浪费的方案。&lt;/p&gt;&#xA;&lt;p&gt;而这个SwitchBot换个思路，让机器牵引窗帘即可，这也是最原始直接的方式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Zsh开发指南</title>
      <link>/it/2020/020218-zsh/</link>
      <pubDate>Sun, 02 Feb 2020 18:44:50 +0800</pubDate>
      <guid>/it/2020/020218-zsh/</guid>
      <description>&lt;p&gt;根据&lt;a href=&#34;http://i.scwy.net/it/2020/020119-zsh/&#34;&gt;之前学习zsh shell及oh my zsh的安装&lt;/a&gt;，学习一下网友提供的文章。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://wiki.archlinux.org/index.php/Zsh_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)&#34;&gt;这里&lt;/a&gt;也作了一些zsh讲解&lt;/p&gt;&#xA;&lt;p&gt;内容较多，全是好货，静下心来慢慢看，需要的时候再来查即可。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../020218-zsh-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;一提示符&#34;&gt;一、提示符&lt;/h3&gt;&#xA;&lt;p&gt;编辑用户目录下.zshrc文件，添加 export PS1=&amp;ldquo;my zsh ps1&amp;gt; &amp;quot;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Android ADB命令</title>
      <link>/it/2020/020214-adb/</link>
      <pubDate>Sun, 02 Feb 2020 14:31:13 +0800</pubDate>
      <guid>/it/2020/020214-adb/</guid>
      <description>&lt;p&gt;adb的全称为Android Debug Bridge.是android司机经常用到的工具&lt;/p&gt;&#xA;&lt;h3 id=&#34;一-基本指令&#34;&gt;一. 基本指令&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;进入指定设备 adb -s serialNumber shell&#xA;查看版本 adb version&#xA;查看日志 adb logcat&#xA;查看设备 adb devices&#xA;连接状态 adb get-state&#xA;启动ADB服务 adb start-server&#xA;停止ADB服务 adb kill-server&#xA;电脑推送到手机 adb push local remote&#xA;手机拉取到电脑 adb pull remote local&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;二-adb-shell下的am-与-pm&#34;&gt;二. adb shell下的am 与 pm&lt;/h3&gt;&#xA;&lt;p&gt;注:am和pm命令必须先切换到adb shell模式下才能使用&#xA;am&lt;/p&gt;</description>
    </item>
    <item>
      <title>抖音自动刷视频赚钱</title>
      <link>/it/2020/020212-douyin/</link>
      <pubDate>Sun, 02 Feb 2020 12:08:03 +0800</pubDate>
      <guid>/it/2020/020212-douyin/</guid>
      <description>&lt;p&gt;不是说刷抖音赚钱吗？再说哪家都有个换代的手机。一般人不应该告诉他。&lt;/p&gt;&#xA;&lt;p&gt;脚本很简单，手机接上线，允许调试，linux安装了adb，安卓手机，Go&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>“终极 Shell” zsh 与 oh my zsh</title>
      <link>/it/2020/020119-zsh/</link>
      <pubDate>Sat, 01 Feb 2020 19:48:55 +0800</pubDate>
      <guid>/it/2020/020119-zsh/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../013116-shouji-07.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这里有一篇介绍文章：http://macshuo.com/?p=676，据说是非常好使。&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装&#34;&gt;安装&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Ubuntu安装zsh&lt;/strong&gt;很简单：sudo apt-get install zsh&lt;/p&gt;&#xA;&lt;p&gt;接下来&lt;strong&gt;安装oh my zsh&lt;/strong&gt;，这是网友做的简化zsh的设置，应该添加了很多插件之类。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Caddy Go开发 高性能 配置简单 HTTPS</title>
      <link>/code/2020/013117-caddy/</link>
      <pubDate>Fri, 31 Jan 2020 17:03:46 +0800</pubDate>
      <guid>/code/2020/013117-caddy/</guid>
      <description>&lt;p&gt;Caddy是什么？在Caddy的官网上给出一个最简单的介绍：“Caddy是一个能自动创建HTTPS功能的HTTP/2网站服务器”。简单的一句话，突出了两大卖点，“自动创建HTTPS”和“HTTP/2”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一些收集: 前台/后台/编程...</title>
      <link>/it/2020/013116-shouji/</link>
      <pubDate>Fri, 31 Jan 2020 16:11:35 +0800</pubDate>
      <guid>/it/2020/013116-shouji/</guid>
      <description>&lt;p&gt;主要集中在JavaScript、CSS、Golang、Python、.Net、Linux等类型，不断收集更新。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;javascript-手绘风格的js图表库chartxkcdhttpsgithubcomtimqianchartxkcd&#34;&gt;&lt;a href=&#34;https://github.com/timqian/chart.xkcd&#34;&gt;JavaScript 手绘风格的JS图表库：Chart.xkcd&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;相关介绍网文：https://www.cnblogs.com/xueweihan/p/11761193.html&lt;/p&gt;</description>
    </item>
    <item>
      <title>IT和自动化技术在行业中应用的现状、问题和思考</title>
      <link>/it/2020/012822-think/</link>
      <pubDate>Tue, 28 Jan 2020 22:19:55 +0800</pubDate>
      <guid>/it/2020/012822-think/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../012822-think-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;作为技术人员，我们往往沉迷于技术本身。而需求是在应用中才会有价值体现的。&lt;/p&gt;&#xA;&lt;p&gt;作为技术人员，我们往往很鄙视那些依然抱着老旧技术，老旧工艺不放的企业。没有效率，没有好的用户体验。&lt;/p&gt;</description>
    </item>
    <item>
      <title>想多了(非真实，勿信)：疫情联想</title>
      <link>/health/2020/012813-x/</link>
      <pubDate>Tue, 28 Jan 2020 13:59:27 +0800</pubDate>
      <guid>/health/2020/012813-x/</guid>
      <description>&lt;p&gt;来势汹汹的疫情，官方信息暂不确定说是蝙蝠或者蛇，据说是武汉某市场提供。&lt;/p&gt;&#xA;&lt;p&gt;但转念多想一想，是不是类似于某国的人肉炸弹呢？我也认为自己是多想了，想多了。只是面对复杂的国际形式，就象贫穷限制了我们的想象力一样，多想总比幼稚好。&lt;/p&gt;</description>
    </item>
    <item>
      <title>新型冠状病毒肺炎病：大自然的报复</title>
      <link>/health/2020/012520-baofu/</link>
      <pubDate>Sat, 25 Jan 2020 20:23:22 +0800</pubDate>
      <guid>/health/2020/012520-baofu/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://baike.baidu.com/item/2019%E6%96%B0%E5%9E%8B%E5%86%A0%E7%8A%B6%E7%97%85%E6%AF%92/24267858?fr=aladdin&#34;&gt;百度百科将其记和史册&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://baijiahao.baidu.com/s?id=1656586012525149954&amp;amp;wfr=spider&amp;amp;for=pc&#34;&gt;一图读懂新型冠状病毒&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://m.medsci.cn/wh.asp&#34;&gt;冠状病毒最新动态&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://sa.sogou.com/new-weball/page/sgs/epidemic&#34;&gt;冠状病毒最新动态&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;中国国家卫生健康委员会23日发布疫情最新数据：2020年1月22日0-24时，24省（区、市）报告新增确诊病例131例，新增死亡患者8例，其中，男性5例，女性3例，除1例53岁以外，其余均为65岁以上老年人，80岁以上5例，分别患有癌症术后、肝功能损坏、高血压、冠心病、糖尿病、帕金森等慢性、基础性疾病。13省（区、市）报告新增疑似病例257例。全国共有25个省（区、市）报告疫情，新增河北、辽宁、江苏、福建4个省。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang 带进度条下载</title>
      <link>/code/2020/012415-down/</link>
      <pubDate>Fri, 24 Jan 2020 15:29:24 +0800</pubDate>
      <guid>/code/2020/012415-down/</guid>
      <description>&lt;p&gt;分别看此两个网址：&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.golangtc.com/t/5e229741b17a82532765a0fa&#34;&gt;https://www.golangtc.com/t/5e229741b17a82532765a0fa&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.twle.cn/t/385&#34;&gt;https://www.twle.cn/t/385&lt;/a&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;io&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;net/http&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;os&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;strings&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// WriteCounter counts the number of bytes written to it. It implements to the io.Writer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// interface and we can pass this into io.TeeReader() which will report progress on each&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// write cycle.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;WriteCounter&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Total&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;uint64&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;wc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;WriteCounter&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Write&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;) (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; len(&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;wc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Total&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; uint64(&lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;wc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PrintProgress&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;wc&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;WriteCounter&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;PrintProgress&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Clear the line by using a character return to go back to the start and remove&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// the remaining characters by filling it with spaces&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\r%s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;strings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Repeat&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;35&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Return again and print current status of download&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// We use the humanize package to print the bytes in a meaningful way (e.g. 10 MB)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\rDownloading... %d B complete&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;wc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Total&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Download Started&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fileUrl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://dl.google.com/go/go1.11.1.src.tar.gz&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DownloadFile&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;go1.11.1.src.tar.gz&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;fileUrl&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        panic(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Download Finished&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// DownloadFile will download a url to a local file. It&amp;#39;s efficient because it will&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// write as it downloads and not load the whole file into memory. We pass an io.TeeReader&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// into Copy() to report progress on the download.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DownloadFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;filepath&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Create the file, but give it a tmp file extension, this means we won&amp;#39;t overwrite a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// file until it&amp;#39;s downloaded, but we&amp;#39;ll remove the tmp extension once downloaded.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Create&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;filepath&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.tmp&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Close&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Get the data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Get&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Body&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Close&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Create our progress reporter and pass it to be used alongside our writer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;counter&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;WriteCounter&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;io&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Copy&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;io&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;TeeReader&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Body&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;counter&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// The progress use the same line so print a new line once it&amp;#39;s finished downloading&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Print&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Rename&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;filepath&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.tmp&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;filepath&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Golang的插件技术</title>
      <link>/code/2020/011714-plugin/</link>
      <pubDate>Fri, 17 Jan 2020 14:54:28 +0800</pubDate>
      <guid>/code/2020/011714-plugin/</guid>
      <description>&lt;p&gt;插件技术应用场景：主程序固定，由主开发者维护。插件开放技术标准，由爱好者共同维护、添加。&lt;/p&gt;&#xA;&lt;p&gt;例如：将开发中的语音助手的插件部份单独开放出来，供以后不断添加功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>影视《史前新纪元》：如果回到从前</title>
      <link>/other/2020/011710-shiqian/</link>
      <pubDate>Fri, 17 Jan 2020 10:14:44 +0800</pubDate>
      <guid>/other/2020/011710-shiqian/</guid>
      <description>&lt;p&gt;如果给你机会，回到若干万年以前，重建一个新的世界，你将怎么样？将面对什么样的问题？它让我想起了《北京折叠》。&lt;/p&gt;&#xA;&lt;p&gt;《史前新纪元》（Terra Nova）是一部于美国时间2011年9月26日在福克斯广播电视台（FOX）首播的电视剧。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang程序注入版本信息</title>
      <link>/code/2020/011613-ver/</link>
      <pubDate>Thu, 16 Jan 2020 13:26:36 +0800</pubDate>
      <guid>/code/2020/011613-ver/</guid>
      <description>&lt;p&gt;这是一篇转摘文章，&lt;a href=&#34;https://studygolang.com/articles/26024?fr=sidebar&#34;&gt;原地址在这里&lt;/a&gt;。在程序中添加相关信息有利于版本识别及统一管理。最好做成Golang程序标准模板，统一规范。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Go程序运行时打印git提交信息编译信息&lt;/p&gt;&#xA;&lt;p&gt;当在debug的过程中，我们需要明确当前运行的go程序是什么版本,不要浪费时间在确认版本的问题上,在go build编译的时候是可以注入外部参数的,让go程序在运行的时候就可以打印编译时候的参数情况&lt;/p&gt;</description>
    </item>
    <item>
      <title>养老产业、医养产业、康养产业</title>
      <link>/money/2020/011511-yanglao/</link>
      <pubDate>Wed, 15 Jan 2020 11:51:52 +0800</pubDate>
      <guid>/money/2020/011511-yanglao/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../011511-yanglao-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;网文 &lt;a href=&#34;http://www.sohu.com/a/316982591_99900352&#34;&gt;养老行业深度报告：老龄化加剧，中国养老产业机遇与挑战并存&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;富人变老将是未来养老服务产业的新机遇&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;先看看老龄化数据：&lt;/p&gt;&#xA;&lt;p&gt;中国作为世界上最大的发展中国家，在全面建成小康社会的新时代背景下迎来了人口老龄化。据世界卫生组织预测，到2050年，中国将有35％的人口超过60岁，成为世界上老龄化最严重的国家。伴随着人口老龄化趋势的加剧，传统的社区居家养老服务模式存在养老服务供需双方不匹配、及时性和灵活性较差；社区居家养老服务项目少、范围窄、精神慰藉缺失；社区居家养老服务监督和评价机制不完善，服务管理效率低；专业的居家养老服务人员短缺，人员素质不高等问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>养老产业、医养产业、康养产业</title>
      <link>/other/2020/011511-yanglao/</link>
      <pubDate>Wed, 15 Jan 2020 11:51:52 +0800</pubDate>
      <guid>/other/2020/011511-yanglao/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../011511-yanglao-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;先看看老龄化数据：&lt;/p&gt;&#xA;&lt;p&gt;据国家统计局发布的人口数据：截止到2018年末，我国最新的老年人口数据为：60周岁及以上人口占总人口的17.9%；65周岁及以上人口占总人口的11.9%。&lt;/p&gt;</description>
    </item>
    <item>
      <title>学习PLC常用协议 Modbus</title>
      <link>/ai/2020/011420-modbus/</link>
      <pubDate>Tue, 14 Jan 2020 20:06:55 +0800</pubDate>
      <guid>/ai/2020/011420-modbus/</guid>
      <description>&lt;p&gt;Modbus是PLC常用的通讯协议，经常用于与HMI通信。通过对此协议的分析，可以如同三菱MC协议一样，利用来与PC结合，发挥更大的作用。&lt;/p&gt;&#xA;&lt;p&gt;若有精力，则从底层弄起，否则之前也看到有go的现成库可以使用。大致浏览了一下协议及相关文章，看起来不复杂。&lt;/p&gt;</description>
    </item>
    <item>
      <title>研究三菱PLC通讯协议:MC</title>
      <link>/ai/2020/010522-mit/</link>
      <pubDate>Sun, 05 Jan 2020 22:01:38 +0800</pubDate>
      <guid>/ai/2020/010522-mit/</guid>
      <description>&lt;p&gt;如何打通PLC及工控设备与PC系列的通道，主要还是靠通信协议。通过研究通信协议，真正的做到IT+AT。&lt;/p&gt;&#xA;&lt;p&gt;先记录几个可能会学习的网址：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/jackiewu3/article/details/82343531&#34;&gt;https://blog.csdn.net/jackiewu3/article/details/82343531&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/xy943294069/article/details/48416535&#34;&gt;https://blog.csdn.net/xy943294069/article/details/48416535&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://blog.csdn.net/sinat_36988961/article/details/103087932&#34;&gt;https://blog.csdn.net/sinat_36988961/article/details/103087932&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这里还有一家专门搞与PLC通信的控件http://www.hslcommunication.cn/&lt;/p&gt;</description>
    </item>
    <item>
      <title>document.location.hash</title>
      <link>/it/2020/010422-hash/</link>
      <pubDate>Sat, 04 Jan 2020 22:53:42 +0800</pubDate>
      <guid>/it/2020/010422-hash/</guid>
      <description>&lt;p&gt;在html中，document.location.hash可以获取到地址中#后面的部份，通常这是用于页面内跳转的，例如http://i.scwy.net/abc#1234。则document.location.hash=&amp;quot;#1234&amp;quot;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>简单医院预约挂号系统</title>
      <link>/it/2020/010412-health/</link>
      <pubDate>Sat, 04 Jan 2020 12:35:24 +0800</pubDate>
      <guid>/it/2020/010412-health/</guid>
      <description>&lt;p&gt;之前写了一个简单医院挂号系统，已运行中。可与现有医院HIS对接。可使用微信和支付宝支付。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../010412-health-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../010412-health-02.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../010412-health-03.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;特点：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;跨平台：Golang程序的先天优势是跨平台，Windows、Linux、Unix、ARM&amp;hellip; 小应用甚至可以在树莓派或者安卓手机上运行。&lt;/p&gt;</description>
    </item>
    <item>
      <title>城市建造者，isocity开源小城市建造</title>
      <link>/it/2020/010409-city/</link>
      <pubDate>Sat, 04 Jan 2020 09:00:42 +0800</pubDate>
      <guid>/it/2020/010409-city/</guid>
      <description>&lt;p&gt;github.com/victorqribeiro/isocity&lt;/p&gt;&#xA;&lt;p&gt;一个简单的开源项目，让你手动建造小城市。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../010409-city-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;另外，我还在&lt;a href=&#34;github.com/snollygolly/IsoCitySim&#34;&gt;这里&lt;/a&gt;看到一个类似的。更复杂一些，可以进行地图浏览(移动)&lt;/p&gt;&#xA;&lt;p&gt;它只有四个文件，css、js、图片、html，而且代码也不多，值得啃一啃，用在自己的项目中。&lt;/p&gt;</description>
    </item>
    <item>
      <title>三菱Q系列PLC连接三菱GS21HMI</title>
      <link>/ai/2020/010314-mit/</link>
      <pubDate>Fri, 03 Jan 2020 14:16:27 +0800</pubDate>
      <guid>/ai/2020/010314-mit/</guid>
      <description>&lt;p&gt;三菱本家的PLC连接触摸屏。&lt;/p&gt;&#xA;&lt;p&gt;环境：&lt;/p&gt;&#xA;&lt;p&gt;PLC：Q04UDEH&#xA;HMI：GS2107&lt;/p&gt;&#xA;&lt;p&gt;PLC端设置：GXWork中，PLC参数，设置本机IP、掩码等，“打开设置”，设置第一项协议为UDP，打开方式为MELSOFT连接&lt;/p&gt;</description>
    </item>
    <item>
      <title>2020计划</title>
      <link>/other/2020/010307-jihua/</link>
      <pubDate>Fri, 03 Jan 2020 07:52:29 +0800</pubDate>
      <guid>/other/2020/010307-jihua/</guid>
      <description>&lt;p&gt;2020了，时间飞快。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;完成微信客服系统(2月)&lt;/li&gt;&#xA;&lt;li&gt;推广“简易医院预约挂号系统”(1月)&lt;/li&gt;&#xA;&lt;li&gt;完成数电模电的学习&lt;/li&gt;&#xA;&lt;li&gt;完成SolidWorks的学习&lt;/li&gt;&#xA;&lt;li&gt;研究天猫精灵API&lt;/li&gt;&#xA;&lt;li&gt;开发一项新的系统&lt;/li&gt;&#xA;&lt;li&gt;给孩子开始讲授电脑课程(每周1次2节课)，并考虑组织成教程&lt;/li&gt;&#xA;&lt;li&gt;汽车智能系统：灯光.车识别.投影.汽车信息&lt;/li&gt;&#xA;&lt;li&gt;微秘(暂命名)，加微信，用功能：添加我的微信，就可以使用一些功能。方便不能/不会部署服务器的需求。&#xA;(1). 活动报名&#xA;(2). 打卡&#xA;(3). 关键词信息反馈&#xA;(4). 记录功能&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>动车与计划生育</title>
      <link>/other/2020/010212-che/</link>
      <pubDate>Thu, 02 Jan 2020 12:35:41 +0800</pubDate>
      <guid>/other/2020/010212-che/</guid>
      <description>&lt;p&gt;情况1：中国的生育率断涯式下降已多个方面有所表现，国家为此操碎了心。但大环境问题不解决，生育率升不起来。高房价对应低生育率，没毛病。虽然这只是因素之一。&lt;/p&gt;</description>
    </item>
    <item>
      <title>智能门锁临时密码的实现</title>
      <link>/other/2019/123122-zhinengsuo/</link>
      <pubDate>Tue, 31 Dec 2019 22:44:40 +0800</pubDate>
      <guid>/other/2019/123122-zhinengsuo/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../123122-zhinengsuo-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最近买了一套小米智能门锁，它是通过蓝牙进行近场通信控制，我比较希望它是通过网络的。&lt;/p&gt;&#xA;&lt;p&gt;当蓝牙连接不到门锁时，大部份功能是没有的，只能进行临时密码添加。既然不能网络，又没有蓝牙连接，它是如何设置临时密码的呢？&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang GUI之Qt</title>
      <link>/code/2019/123022-qt/</link>
      <pubDate>Mon, 30 Dec 2019 22:14:42 +0800</pubDate>
      <guid>/code/2019/123022-qt/</guid>
      <description>&lt;p&gt;GIT： github.com/therecipe/qt&lt;/p&gt;&#xA;&lt;p&gt;一个Golang可用的GUI，看起来支持多种平台。&lt;/p&gt;&#xA;&lt;p&gt;这里网友介绍了如何进行安装: &lt;a href=&#34;https://blog.csdn.net/fenwangqi9587/article/details/88652544&#34;&gt;1&lt;/a&gt; &lt;a href=&#34;https://blog.csdn.net/snowbird13/article/details/96429189&#34;&gt;2&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;1.我是Ubuntu系统，按照官方要求安装：sudo apt-get -y install build-essential libglu1-mesa-dev libpulse-dev libglib2.0-dev&lt;/p&gt;</description>
    </item>
    <item>
      <title>2019 计划贵州过年</title>
      <link>/other/2019/122721-guizhou/</link>
      <pubDate>Fri, 27 Dec 2019 21:43:02 +0800</pubDate>
      <guid>/other/2019/122721-guizhou/</guid>
      <description>&lt;p&gt;今年基本没有旅游过，计划过年期间全家一起到贵州。象去年去西安一样，基本完美避开高峰，找一家民宿，慢慢悠悠的感受一个地方。&lt;/p&gt;&#xA;&lt;p&gt;离过年不远了，感觉今年特别快，该准备准备了。不过感觉贵州这种，景点都比较分散，所以也不确定是住下来，还是开车去。先搜资料。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go与WebAssembly之四</title>
      <link>/code/2019/122220-wasm/</link>
      <pubDate>Sun, 22 Dec 2019 20:20:55 +0800</pubDate>
      <guid>/code/2019/122220-wasm/</guid>
      <description>&lt;p&gt;以下内容就是复制的，好多地方没理解。也就不便注释了。待我内力大增时再来消化。&lt;/p&gt;&#xA;&lt;p&gt;此例子经常会运行不成功，显示错误信息： attempting to access detached ArrayBuffer（试图访问分离的ArrayBuffer ）。错误位于go代码ctx.SetImageToHueCb.Invoke(ptr, len(bs))。多次运行发现：一般一百多K的图片，刷新浏览器即选择运行就没问题，第二次运行亦出错。超过一百K太多，随便运行都出错。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang 中使用 reflect 获取结构中的字段和值</title>
      <link>/code/2019/122123-reflect/</link>
      <pubDate>Sat, 21 Dec 2019 23:46:25 +0800</pubDate>
      <guid>/code/2019/122123-reflect/</guid>
      <description>&lt;p&gt;原址：https://blog.csdn.net/qq_40422846/article/details/87536312&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;   &amp;#34;reflect&amp;#34;&#xA;   &amp;#34;fmt&amp;#34;&#xA;)&#xA;&#xA;type User struct {&#xA;   Id int&#xA;   Name string&#xA;   Age int&#xA;}&#xA;&#xA;func main() {&#xA;   u := User{1,&amp;#34;xiaozhi&amp;#34;,26}&#xA;   info(u)&#xA;}&#xA;&#xA;func info(i interface{}) {&#xA;   t := reflect.TypeOf(i)&#xA;   fmt.Println(&amp;#34;Type: &amp;#34;, t.Name())&#xA;   v := reflect.ValueOf(i)&#xA;   fmt.Println(&amp;#34;Fields: &amp;#34;)&#xA;   for i := 0; i &amp;lt; t.NumField(); i++ {&#xA;      f := t.Field(i)&#xA;      val := v.Field(i).Interface()&#xA;      fmt.Printf(&amp;#34;%6s: %v = %v\n&amp;#34;,f.Name,f.Type,val)&#xA;   }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出结果&lt;/p&gt;</description>
    </item>
    <item>
      <title>三菱QnUCPU以太端与基恩士视觉</title>
      <link>/ai/2019/122013-melsec/</link>
      <pubDate>Fri, 20 Dec 2019 13:02:04 +0800</pubDate>
      <guid>/ai/2019/122013-melsec/</guid>
      <description>&lt;p&gt;目的：通过以太端，将基恩士视觉数据发送到三菱PLC。这里设置了PLC的IP 192.168.1.40，视觉IP 192.168.1.10，端口8500&lt;/p&gt;</description>
    </item>
    <item>
      <title>Gowebian</title>
      <link>/code/2019/121812-gowebian/</link>
      <pubDate>Wed, 18 Dec 2019 12:00:01 +0800</pubDate>
      <guid>/code/2019/121812-gowebian/</guid>
      <description>&lt;p&gt;用Golang编写网页的web库，用于生成html文件和WebAssembly绑定。&lt;/p&gt;&#xA;&lt;p&gt;github.com/bgokden/gowebian&lt;/p&gt;&#xA;&lt;p&gt;不知道谁做的，网上也没搜出个相关文字介绍。百度没有，必应也没有，可怜谷歌又进不去。通过其它入口也没有找到几个。&lt;/p&gt;</description>
    </item>
    <item>
      <title>银河系精确质量：太阳的8900亿倍 296千万亿个地球</title>
      <link>/other/2019/121711-yinhe/</link>
      <pubDate>Tue, 17 Dec 2019 11:10:14 +0800</pubDate>
      <guid>/other/2019/121711-yinhe/</guid>
      <description>&lt;p&gt;原文见于：https://www.cnbeta.com/articles/science/921949.htm&lt;/p&gt;&#xA;&lt;p&gt;“计算表明银河系的质量是太阳质量的8900亿倍，其中93%来自暗物质。科学家通过数学模型对银河系的质量和范围进行了推算，据信其直径大约为25.6万光年。”&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go与WebAssembly之三</title>
      <link>/code/2019/121622-wasm/</link>
      <pubDate>Mon, 16 Dec 2019 22:07:03 +0800</pubDate>
      <guid>/code/2019/121622-wasm/</guid>
      <description>&lt;p&gt;最新消息称 &lt;a href=&#34;https://www.cnbeta.com/articles/tech/922103.htm&#34;&gt;WebAssembly 成为 W3C 标准&lt;/a&gt;。WebAssembly 也正式抵达了 1.0 版本，它已获得了主流浏览器 Firefox、Chrome、Safari 和 Edge 的支持。&lt;/p&gt;&#xA;&lt;p&gt;学习一下 go关于WebAssembly: &lt;a href=&#34;https://github.com/golang/go/wiki/WebAssembly&#34;&gt;https://github.com/golang/go/wiki/WebAssembly&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go与WebAssembly之二</title>
      <link>/code/2019/121522-wasm/</link>
      <pubDate>Sun, 15 Dec 2019 22:00:08 +0800</pubDate>
      <guid>/code/2019/121522-wasm/</guid>
      <description>&lt;p&gt;syscall/js包通过js.Global()返回一个js.Value类型的结构体，它指代JS中的全局对象。然后调用就类似于原来的javascript了，浏览器为window对象。通过Get()方法获取对象的字段。Invoke()方法可调用JS中的函数。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go与WebAssembly之一</title>
      <link>/code/2019/121521-wasm/</link>
      <pubDate>Sun, 15 Dec 2019 21:27:56 +0800</pubDate>
      <guid>/code/2019/121521-wasm/</guid>
      <description>&lt;p&gt;注：不是所有内容均原创，而是网文加上自己的学习和理解。&lt;/p&gt;&#xA;&lt;p&gt;WebAssembly：简称wasm，加强JavaScript，下载后运行于本地设备上，不象JavaScript那样原代码解释运行，而是编译为二进制机器码。据说它是一种小体积(暂时看起来Go编译后的还不够小)，高加载速度的二进制编码格式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>QOR学习</title>
      <link>/code/2019/121321-qor/</link>
      <pubDate>Fri, 13 Dec 2019 21:38:08 +0800</pubDate>
      <guid>/code/2019/121321-qor/</guid>
      <description>&lt;p&gt;QOR是首个使用Go语言开发的电商系统、CMS的SDK&lt;/p&gt;&#xA;&lt;p&gt;官网：https://getqor.com/cn&lt;/p&gt;&#xA;&lt;p&gt;文档：https://doc.getqor.com/&lt;/p&gt;</description>
    </item>
    <item>
      <title>一家有温度的连锁超市</title>
      <link>/money/2019/121222-chaoshi/</link>
      <pubDate>Thu, 12 Dec 2019 22:29:53 +0800</pubDate>
      <guid>/money/2019/121222-chaoshi/</guid>
      <description>&lt;p&gt;这是一个商业计划，未经允许不得使用！&lt;/p&gt;&#xA;&lt;p&gt;名称：老家超市&lt;/p&gt;&#xA;&lt;p&gt;愿景：一家有温度的连锁超市&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; 服务于农村的老弱病残，及回老家尽孝的儿女。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;初级目标：农村红旗连锁&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; 以农村为目标，建立身边的连锁超市。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;终级目标：大农村的智能服务企业&lt;/p&gt;</description>
    </item>
    <item>
      <title>一家有温度的连锁超市</title>
      <link>/other/2019/121222-chaoshi/</link>
      <pubDate>Thu, 12 Dec 2019 22:29:53 +0800</pubDate>
      <guid>/other/2019/121222-chaoshi/</guid>
      <description>&lt;p&gt;这是一个商业计划，未经允许不得使用！&lt;/p&gt;&#xA;&lt;p&gt;名称：老家超市&lt;/p&gt;&#xA;&lt;p&gt;愿景：一家有温度的连锁超市&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; 服务于农村的老弱病残，及回老家尽孝的儿女。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;初级目标：农村红旗连锁&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; 以农村为目标，建立身边的连锁超市。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;终级目标：大农村的智能服务企业&lt;/p&gt;</description>
    </item>
    <item>
      <title>学习西门子S7-1200</title>
      <link>/ai/2019/120820-s7/</link>
      <pubDate>Sun, 08 Dec 2019 20:29:26 +0800</pubDate>
      <guid>/ai/2019/120820-s7/</guid>
      <description>&lt;p&gt;西门子系是学习资料比较多的，学习学习。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux下的自动化工具xdotool</title>
      <link>/it/2019/113019-xdotool/</link>
      <pubDate>Sat, 30 Nov 2019 19:27:02 +0800</pubDate>
      <guid>/it/2019/113019-xdotool/</guid>
      <description>&lt;p&gt;在Ubuntu桌面系统下，有时候想偷个懒。毕竟都Ubuntu了，还不允许更自动一些吗。结合语音识别，就可以懒到家了。虽说Python是把瑞士军刀，但不编程，用点小工具也是不错的选择。只是它缺少一些图形识别功能，否则还真是Linux下的按键精灵。&lt;/p&gt;</description>
    </item>
    <item>
      <title>基于游戏的人工智能</title>
      <link>/other/2019/113016-ai/</link>
      <pubDate>Sat, 30 Nov 2019 16:11:34 +0800</pubDate>
      <guid>/other/2019/113016-ai/</guid>
      <description>&lt;p&gt;这是一个设想：&lt;/p&gt;&#xA;&lt;p&gt;这个不是说用AI来玩游戏，而是软件公司开发游戏，通过分析游戏玩家的数据，帮助软件获得智能。&lt;/p&gt;&#xA;&lt;p&gt;这就象一个分布式AI，越多人玩游戏，软件开发商就拥有越强的AI。&lt;/p&gt;</description>
    </item>
    <item>
      <title>电气滑环：想不想得转</title>
      <link>/ai/2019/113009-huahuan/</link>
      <pubDate>Sat, 30 Nov 2019 09:15:36 +0800</pubDate>
      <guid>/ai/2019/113009-huahuan/</guid>
      <description>&lt;p&gt;PS：想不想得转 是四川话，想不想得通的意思。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../113009-huahuan-05.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../113009-huahuan-04.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../113009-huahuan-03.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;滑环也叫导电滑环(实际还有气滑环或气电混合滑环)、集电环、旋转关节、旋转电气接口、工业滑不、集流环、回流环、换向器，是一种可旋转的特殊型连接器，是专门为旋转体连通、输送能源与信号电气的部件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Inovance 汇川PLC学习</title>
      <link>/ai/2019/112919-inovance/</link>
      <pubDate>Fri, 29 Nov 2019 19:09:03 +0800</pubDate>
      <guid>/ai/2019/112919-inovance/</guid>
      <description>&lt;p&gt;项目中使用 台达PLC+研控电机 的组合出现问题，现在改用汇川H3UPLC来处理，所以需要继续学习。以下记录主要针对此款PLC。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;辅助继电器M/SM&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>孩子的理想问题</title>
      <link>/teach/2019/112611-lixiang/</link>
      <pubDate>Tue, 26 Nov 2019 11:41:21 +0800</pubDate>
      <guid>/teach/2019/112611-lixiang/</guid>
      <description>&lt;p&gt;理想，拆开来理解字义：先&lt;strong&gt;理清&lt;/strong&gt;思路，再&lt;strong&gt;想办法&lt;/strong&gt;达到目地。&lt;/p&gt;&#xA;&lt;p&gt;理想是前进的方向，孩子早“立志“有利于学习目标的明确，期望能有一个自主的源动力。根据理想，进一步的制定学习计划。罗马不是一日建成的，我们需要根据图纸一步步实现。&lt;/p&gt;</description>
    </item>
    <item>
      <title>台达PLC连接基恩士视觉系统CV-470F</title>
      <link>/ai/2019/111611-delta/</link>
      <pubDate>Sat, 16 Nov 2019 11:08:19 +0800</pubDate>
      <guid>/ai/2019/111611-delta/</guid>
      <description>&lt;p&gt;不知道基恩士应该如何与台达PLC(这里用的是AS228T)正规通讯，我使用的是EthernetTCP。这种情况下视觉是TCP服务端，默认端口8500，只需要PLC去不断/按需获取即可。&lt;/p&gt;</description>
    </item>
    <item>
      <title>硬盘构想</title>
      <link>/it/2019/111318-disk/</link>
      <pubDate>Wed, 13 Nov 2019 18:56:24 +0800</pubDate>
      <guid>/it/2019/111318-disk/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../111318-disk-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;从前，是机械硬盘，到后来越来越大，基本解决了价格与空间的不相容。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../111318-disk-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../111318-disk-03.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;再后来有了SSD固态硬盘，但依然不便宜，于是有了类似于2TB HHD +128GB SSD的做法。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我需要一台PinePhone手机吗</title>
      <link>/it/2019/111310-pinephone/</link>
      <pubDate>Wed, 13 Nov 2019 10:09:55 +0800</pubDate>
      <guid>/it/2019/111310-pinephone/</guid>
      <description>&lt;p&gt;PinePhone是一款安装Linux系统的手机，虽然配置不高，但我想应该可以安装一些服务，开发一些应用，以此来拓展它的功能，更加自动化，智能化。&lt;/p&gt;</description>
    </item>
    <item>
      <title>台达AS228T&#43;威伦通MT8121iE的Modbus TCP连接</title>
      <link>/ai/2019/111308-delta/</link>
      <pubDate>Wed, 13 Nov 2019 08:25:21 +0800</pubDate>
      <guid>/ai/2019/111308-delta/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../111308-delta-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;PLC: 台达AS228T&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../111308-delta-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;HMI: 威伦通MT8121iE&lt;/p&gt;&#xA;&lt;p&gt;需求：HMI通过无线方式对PLC进行控制&lt;/p&gt;&#xA;&lt;p&gt;分析：&lt;/p&gt;&#xA;&lt;p&gt;1.对实时性要求不高&lt;/p&gt;&#xA;&lt;p&gt;2.方便移动，使用UPS等移动电源&lt;/p&gt;&#xA;&lt;p&gt;3.使用ModbusTcp通过Ethernet有线连接，通过小型无线路由器将有线转无线&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wifi设备不断增加中</title>
      <link>/other/2019/111120-wifi/</link>
      <pubDate>Mon, 11 Nov 2019 20:28:55 +0800</pubDate>
      <guid>/other/2019/111120-wifi/</guid>
      <description>&lt;p&gt;家里的Wifi设备越来越多，看路由器上显示现在在线已经有19个，所以差一点的路由器负载就是问题，明明路由器就在旁边，但就是连不上，或者时断时续。&lt;/p&gt;</description>
    </item>
    <item>
      <title>又是双11把戏</title>
      <link>/other/2019/110908-jd/</link>
      <pubDate>Sat, 09 Nov 2019 08:04:40 +0800</pubDate>
      <guid>/other/2019/110908-jd/</guid>
      <description>&lt;p&gt;昨日晚，突然想到应该再买一个萤石的摄像头。打开京东，搜索产品，恩，这个189，满减10，179。用户不能登陆！一会儿再进，不能收购物车。&lt;/p&gt;&#xA;&lt;p&gt;第二天，京东价239，抢购到手价179。问候你家人！两家购物都是一个套路。找到一个未改价的189，不过依然商品都不能放进购物车。&lt;/p&gt;</description>
    </item>
    <item>
      <title>优盘管理思路</title>
      <link>/it/2019/110522-upan/</link>
      <pubDate>Tue, 05 Nov 2019 22:18:52 +0800</pubDate>
      <guid>/it/2019/110522-upan/</guid>
      <description>&lt;p&gt;需求：只允许指定优盘进行读写操作，非指定优盘则禁止&lt;/p&gt;&#xA;&lt;p&gt;思路：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;禁止所有优盘。&lt;/li&gt;&#xA;&lt;li&gt;后台运行指定程序后，解除优盘禁止。&lt;/li&gt;&#xA;&lt;li&gt;轮询接入的优盘，获取序列号，进行授权比对。&lt;/li&gt;&#xA;&lt;li&gt;比对失败，则弹出优盘。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;进入注册表编辑器。找到HEKY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\service\USBSTOR里面，找到名称为start的这个选项，讲它的值更改为4，就是禁止。2就是自动，3是手动。&lt;/p&gt;</description>
    </item>
    <item>
      <title>利用企业微信发送各种信息</title>
      <link>/code/2019/110409-qiyeweixin/</link>
      <pubDate>Mon, 04 Nov 2019 09:50:00 +0800</pubDate>
      <guid>/code/2019/110409-qiyeweixin/</guid>
      <description>&lt;p&gt;利用企业微信，可以很方便的给自己或者企业员工发送各种信息，用于通知、公告，自动化信息发送，生产信息发送等等。不象微信公众号受到发送限制，也不象网页版微信，非官方API不知道什么时候就不能用了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fyne基于Golang的GUI库</title>
      <link>/code/2019/110321-fyne/</link>
      <pubDate>Sun, 03 Nov 2019 21:28:20 +0800</pubDate>
      <guid>/code/2019/110321-fyne/</guid>
      <description>&lt;p&gt;虽说在Ubuntu系统下，且Golang多以命令行操作为主，但GUI界面也是不可少的，起码对用户更加友好。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/fyne-io/fyne&#34;&gt;Fyne&lt;/a&gt;是一个跨平台的UI工具包，提供基于OpenGL的跨平台图形界面应用开发。&lt;/p&gt;&#xA;&lt;p&gt;在Ubuntu系统中，需要先安装库 libegl1-mesa-dev 和 xorg-dev。&lt;/p&gt;</description>
    </item>
    <item>
      <title>最简单实现微信活动报名，只需拉我入群</title>
      <link>/it/2019/110310-huodog/</link>
      <pubDate>Sun, 03 Nov 2019 10:33:35 +0800</pubDate>
      <guid>/it/2019/110310-huodog/</guid>
      <description>&lt;p&gt;原文发表在这里： &lt;a href=&#34;https://blog.csdn.net/wyyyh9458/article/details/102879832&#34;&gt;https://blog.csdn.net/wyyyh9458/article/details/102879832&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;之前写的看这里 &lt;a href=&#34;https://blog.csdn.net/wyyyh9458/article/details/89111065&#34;&gt;https://blog.csdn.net/wyyyh9458/article/details/89111065&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;主要还是简单的扩展了一下微信的web协议功能，实现其实比较简单。但想必对部份人有用。因为这个congcong_98这个微信号也是个人在使用的，所以网友添加后发现不能测试功能。实际上源程序可以让任何能通过web协议的微信使用，达到活动报名的功能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>汽车前挡风改造/设想</title>
      <link>/other/2019/110119-che/</link>
      <pubDate>Fri, 01 Nov 2019 19:53:25 +0800</pubDate>
      <guid>/other/2019/110119-che/</guid>
      <description>&lt;p&gt;这是一个汽车改造设想：&lt;/p&gt;&#xA;&lt;p&gt;将前挡风封闭，取消玻璃，改为反当幕布，车外影像使用摄像头加投影来呈现。投影和摄像头可以为多个，形成360度全方位影像。&lt;/p&gt;&#xA;&lt;p&gt;看起来费劲，加了些硬件。但好处是：&lt;/p&gt;</description>
    </item>
    <item>
      <title>旧手机利用</title>
      <link>/it/2019/102908-liyong/</link>
      <pubDate>Tue, 29 Oct 2019 08:06:19 +0800</pubDate>
      <guid>/it/2019/102908-liyong/</guid>
      <description>&lt;p&gt;家里都有不少升级被下岗的旧手机。5元回收，或者换个盆，那还是有点可惜的。我们如何把它用起来呢？&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;用它的FM&#xA;话说FM似乎有些手机要取消了，但这个确实是个实用的东西。比如说我就比较喜欢听新闻，FM耗电小，室外效果一般不错。我想利用它，加上Pi，将电波转换成网络收听，毕竟有些地方信号不好，或者根本就没有我喜欢收听的电台。&lt;/p&gt;</description>
    </item>
    <item>
      <title>提供公共短信服务</title>
      <link>/other/2019/102308-duanxin/</link>
      <pubDate>Wed, 23 Oct 2019 08:45:33 +0800</pubDate>
      <guid>/other/2019/102308-duanxin/</guid>
      <description>&lt;p&gt;不少网站需要提供手机号注册，注册的时候需要短信验证。但这样是有安全隐患的，至少骚扰短信会来不少。现提供公共免费的短信服务，只在需要的时候通过网站去看你收到的短信，平时的短信都不用管。&lt;/p&gt;</description>
    </item>
    <item>
      <title>code-server 在服务器上运行VS Code</title>
      <link>/it/2019/102108-codeserver/</link>
      <pubDate>Mon, 21 Oct 2019 08:24:00 +0800</pubDate>
      <guid>/it/2019/102108-codeserver/</guid>
      <description>&lt;p&gt;code-server 是一个可以在远程服务器上运行 VS Code 的工具。&lt;/p&gt;&#xA;&lt;p&gt;官网: &lt;a href=&#34;http://www.coder.com&#34;&gt;http://www.coder.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;git: &lt;a href=&#34;https://github.com/cdr/code-server&#34;&gt;https://github.com/cdr/code-server&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;可以docker搭建，也可以下载二进制文件，都不需要什么配置就可以运行使用。&lt;/p&gt;&#xA;&lt;p&gt;测试添加了中文语言插件，没有任何问题。也直接支持了golang语法显示。适合装在自己的服务器上，到哪里都能工作起来。&lt;/p&gt;</description>
    </item>
    <item>
      <title>文章的标题：要是我有孩子，一定不让他好好读书</title>
      <link>/teach/2019/101921-dushu/</link>
      <pubDate>Sat, 19 Oct 2019 21:55:23 +0800</pubDate>
      <guid>/teach/2019/101921-dushu/</guid>
      <description>&lt;p&gt;是不是觉得标题打错了？而实际并非如此。这是一个网友看《银河补习班》的感慨。马飞看起来确实是一个少根弦的孩子，但在父亲眼中不是。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../101921-dushu-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;从少根弦到成功之间，电影其实带来不少对教育的思考。在这个坏了的教育环境中，如何保护好孩子的灵性，成了我们最重要的思考。但我们往往又觉得无能为力。从我们自己的成长经历来看，那些在学校不着重学习，看起来调皮捣蛋的孩子，在社会上往往混得更好。那些在玩中学习的孩子，往往最具有创造力。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Delta台达学习记录</title>
      <link>/ai/2019/101911-delta/</link>
      <pubDate>Sat, 19 Oct 2019 11:17:56 +0800</pubDate>
      <guid>/ai/2019/101911-delta/</guid>
      <description>&lt;p&gt;最近在使用台达的PLC，稍作记录&lt;/p&gt;&#xA;&lt;p&gt;台达官网：delta-china.com.cn&lt;/p&gt;&#xA;&lt;p&gt;威纶通：weinview.cn&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;部份链接&#34;&gt;部份链接：&lt;/h4&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.jianshu.com/p/9d647ea9a12c&#34;&gt;台达AS系列PLC通讯台达A2-M伺服&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.jianshu.com/p/e99144a90e64&#34;&gt;台达AS系列PLC通讯台达A2-M伺服&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://v.youku.com/v_show/id_XMTU4NDgzNzM3Ng==.html?refer=seo_operation.liuxiao.liux_00003303_3000_Qzu6ve_19042900&#34;&gt;台达伺服CANopen 功能介绍&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.aitmy.com/news/201801/24/news_229096.html&#34;&gt;台达DVP-PLC CANopen连线程序设计范例&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>教育家庭焦虑综合症</title>
      <link>/teach/2019/101708-jiaoyu/</link>
      <pubDate>Thu, 17 Oct 2019 08:22:57 +0800</pubDate>
      <guid>/teach/2019/101708-jiaoyu/</guid>
      <description>&lt;p&gt;&lt;!-- raw HTML omitted --&gt;以下观点仅代表个人看法，以及个人看法下的大部份情况。请好教育、好教育者、好教育机构自我排除。&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;教育家庭焦虑综合症&lt;/strong&gt; 这个词是我现编的，但 &lt;strong&gt;焦虑综合症&lt;/strong&gt;是个使用广泛的词，应该特别用于教育。&lt;/p&gt;</description>
    </item>
    <item>
      <title>程小奔与网络</title>
      <link>/it/2019/101622-cxb/</link>
      <pubDate>Wed, 16 Oct 2019 22:24:11 +0800</pubDate>
      <guid>/it/2019/101622-cxb/</guid>
      <description>&lt;p&gt;程小奔(更具体说是小程)是含有Wifi模块的，也有IOT示例（通过wifi获取地区温度等）。&lt;/p&gt;&#xA;&lt;p&gt;这里（http://docs.makeblock.com/codeyrocky/zh/python-api/third-party-api.html） 这讲了通过Python来完成网络请求。&lt;/p&gt;</description>
    </item>
    <item>
      <title>投资之计</title>
      <link>/other/2019/101618-touzi/</link>
      <pubDate>Wed, 16 Oct 2019 18:18:02 +0800</pubDate>
      <guid>/other/2019/101618-touzi/</guid>
      <description>&lt;p&gt;早计划早规划，这里是整理我们现阶段认为可行的投资之路。在这个过程中也将不断修正，不断发现新的可行性。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;计算机教育，可能方向在于少儿编程为主&#xA;(1). 对象以小学阶段为主&#xA;(2). 内容要以形象、生动、实物化为主，以游戏为主&#xA;(3). 以计算机入门为主，见识为主&#xA;(4). 以编程方向，培养解决问题的能力为主&lt;/p&gt;</description>
    </item>
    <item>
      <title>程小奔升级记</title>
      <link>/it/2019/101421-cxb/</link>
      <pubDate>Mon, 14 Oct 2019 21:24:14 +0800</pubDate>
      <guid>/it/2019/101421-cxb/</guid>
      <description>&lt;p&gt;2023.10.24&lt;/p&gt;&#xA;&lt;p&gt;又翻出了程小奔&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;如果是磁吸充电，或许可以让它自动到充电位充电&lt;br&gt;&#xA;换个思路，虽然它是固定的usb，但可以想办法改造一下。&lt;br&gt;&#xA;想办法告诉它&amp;quot;充电站&amp;quot;的位置，以便让它自己去充电。比如通过颜色传感器。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;2019.10.16 网页中使用编程&lt;/p&gt;</description>
    </item>
    <item>
      <title>mBlock慧编程：程小奔</title>
      <link>/teach/2019/101420-mblock/</link>
      <pubDate>Mon, 14 Oct 2019 20:54:43 +0800</pubDate>
      <guid>/teach/2019/101420-mblock/</guid>
      <description>&lt;p&gt;一直在考虑如何给孩子计算机方面的教育，编程只是计算机功能之一，它有助于孩子的逻辑思维及解决问题的能力，有助于理解计算机的工作原理，帮助他们以后更好的利用电脑，并于电脑更好的合作。我想未来是电脑的世界，智能的世界，能更好的利用电脑这个功能，将有助于个人方方面面的发展。就象现在的开车和英语，是一种必备的技能。未来，计算机将无所不在，将以多种形态存在于我们的世界。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于‘啥都有餐厅’</title>
      <link>/other/2019/101412-shadouyou/</link>
      <pubDate>Mon, 14 Oct 2019 12:21:12 +0800</pubDate>
      <guid>/other/2019/101412-shadouyou/</guid>
      <description>&lt;p&gt;网上有一个视频，说是两人到餐厅吃饭，没有菜单，想吃啥只需要点就行了，啥菜都有。实际上店主是喊的外卖。&lt;/p&gt;&#xA;&lt;p&gt;通过这个视频，我们是否可以想到一种商业模式：&lt;/p&gt;</description>
    </item>
    <item>
      <title>房车、旅居车相关规定及文档</title>
      <link>/other/2019/101308-fangche/</link>
      <pubDate>Sun, 13 Oct 2019 08:58:05 +0800</pubDate>
      <guid>/other/2019/101308-fangche/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../101308-fangche-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;这里陆续收集房车相关的规定及文件&#34;&gt;这里陆续收集房车相关的规定及文件&lt;/h4&gt;&#xA;&lt;h3 id=&#34;目录&#34;&gt;目录：&lt;/h3&gt;&#xA;&lt;ol start=&#34;0&#34;&gt;&#xA;&lt;li&gt;房车分类&lt;/li&gt;&#xA;&lt;li&gt;关于促进自驾车旅居车旅游发展的若干意见&lt;/li&gt;&#xA;&lt;li&gt;高速公路管理条例&lt;/li&gt;&#xA;&lt;li&gt;高速公路管理条例&lt;/li&gt;&#xA;&lt;li&gt;关于规范旅居挂车上路通行管理工作的通知 公交管[2015]134号&lt;/li&gt;&#xA;&lt;li&gt;中华人民共和国道路交通安全法&lt;/li&gt;&#xA;&lt;li&gt;高速公路行车的安全规定&lt;/li&gt;&#xA;&lt;li&gt;GB7258&lt;/li&gt;&#xA;&lt;li&gt;机动车登记规定&lt;/li&gt;&#xA;&lt;li&gt;道路车辆旅居挂车和轻型挂车的连接球尺寸&lt;/li&gt;&#xA;&lt;li&gt;机动车运行安全技术条件 GB7258-2017&lt;/li&gt;&#xA;&lt;li&gt;汽车、挂车及汽车列车外廓尺寸、轴荷及质量限值 GB1589-2016&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;自行式房车主要分为：&lt;/p&gt;</description>
    </item>
    <item>
      <title>移动的家</title>
      <link>/other/2019/101018-fang/</link>
      <pubDate>Thu, 10 Oct 2019 18:47:05 +0800</pubDate>
      <guid>/other/2019/101018-fang/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../101018-fang-01.gif&#34; alt=&#34;移动房屋&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;刚在网上看到一个长了六只脚的移动房屋，通过这六只液压脚，每小时60米，可以将房屋移动到几乎任何地方，虽然速度有点慢。或许我也能制作一个，利用PLC和IT知识。再加上拓展或者折叠功能，进一步增加空间。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Beckhoff收集一些倍福PLC的资料</title>
      <link>/ai/2019/101011-beckhoff/</link>
      <pubDate>Thu, 10 Oct 2019 11:34:17 +0800</pubDate>
      <guid>/ai/2019/101011-beckhoff/</guid>
      <description>&lt;p&gt;倍福是基于PC技术的软PLC，使用倍福也有利于使用现有的PC技术，为工业自动化提供更多的解决方案。&lt;/p&gt;&#xA;&lt;p&gt;中文官网 &lt;a href=&#34;https://www.beckhoff.com.cn/&#34;&gt;https://www.beckhoff.com.cn/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;倍福虚拟学院－TC3_PLC 使用入门 &lt;a href=&#34;http://tr.beckhoff.com.cn/course/view.php?id=136&#34;&gt;http://tr.beckhoff.com.cn/course/view.php?id=136&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>倍福CX5020的Modbus服务器配置说明</title>
      <link>/ai/2019/101009-modbus/</link>
      <pubDate>Thu, 10 Oct 2019 09:49:53 +0800</pubDate>
      <guid>/ai/2019/101009-modbus/</guid>
      <description>&lt;p&gt;原地址：https://blog.csdn.net/nicholas_dlut/article/details/80950122&lt;/p&gt;&#xA;&lt;p&gt;Modbus的起始地址为0x3000，定义方式十分简单：&#xA;ModM1 AT%MW0 :ARRAY[1..20] OF INT;&#xA;不需要做额外的硬件点配置&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于电影攀登者的投资总结</title>
      <link>/money/2019/100922-pandeng/</link>
      <pubDate>Wed, 09 Oct 2019 22:12:37 +0800</pubDate>
      <guid>/money/2019/100922-pandeng/</guid>
      <description>&lt;p&gt;从近10天的上映情况看，《攀登者》前期宣传还是比较到位，预热时间也足够。前期网络喷子较多。上映后排片量第1天还可以，后面估计是根据观众数量，排片大幅度降低。上映10天不足10亿，远远落后于《我和我的祖国》以及《中国机长》，这两者都已超过20亿。《中国机长》比较出乎意料。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于电影攀登者的投资总结</title>
      <link>/other/2019/100922-pandeng/</link>
      <pubDate>Wed, 09 Oct 2019 22:12:37 +0800</pubDate>
      <guid>/other/2019/100922-pandeng/</guid>
      <description>&lt;p&gt;从近10天的上映情况看，《攀登者》前期宣传还是比较到位，预热时间也足够。前期网络喷子较多。上映后排片量第1天还可以，后面估计是根据观众数量，排片大幅度降低。上映10天不足10亿，远远落后于《我和我的祖国》以及《中国机长》，这两者都已超过20亿。《中国机长》比较出乎意料。&lt;/p&gt;</description>
    </item>
    <item>
      <title>宇宙：大世界.小世界.微世界</title>
      <link>/other/2019/100517-yuzhou/</link>
      <pubDate>Sat, 05 Oct 2019 17:48:55 +0800</pubDate>
      <guid>/other/2019/100517-yuzhou/</guid>
      <description>&lt;p&gt;当我们放大人体时，各种细胞和微生物，就像宇宙一样。当我们看宇宙时，无边无界，未知的联系，是否也象我们看着细胞。&lt;/p&gt;&#xA;&lt;p&gt;比如，宇宙是个人体，我们在宇宙中。我们是个人体，细胞在我们身上。在我们的细胞身上，存在更细微的微世界。&lt;/p&gt;</description>
    </item>
    <item>
      <title>科幻：神话之历史真相</title>
      <link>/other/2019/092908-shenhua/</link>
      <pubDate>Sun, 29 Sep 2019 08:10:02 +0800</pubDate>
      <guid>/other/2019/092908-shenhua/</guid>
      <description>&lt;p&gt;这只是一个科幻故事原型的核心&lt;/p&gt;&#xA;&lt;p&gt;中国神话故事，以至国外的神话故事，都是源于上次人类世纪的故事记录。只因时间长达亿万年，所有原型都有所变化。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../092908-shenhua-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;图上这种天上飘浮的岛，是一种反重力装置安装到石岛上。&lt;/p&gt;</description>
    </item>
    <item>
      <title>创建一个新主题</title>
      <link>/it/2019/creating-a-new-theme/</link>
      <pubDate>Sat, 28 Sep 2019 22:48:53 +0800</pubDate>
      <guid>/it/2019/creating-a-new-theme/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;This tutorial will show you how to create a simple theme in Hugo. I assume that you are familiar with HTML, the bash command line, and that you are comfortable using Markdown to format content. I&amp;rsquo;ll explain how Hugo uses templates and how you can organize your templates to create a theme. I won&amp;rsquo;t cover using CSS to style your theme.&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;ll start with creating a new site with a very basic template. Then we&amp;rsquo;ll add in a few pages and posts. With small variations on that, you will be able to create many different types of web sites.&lt;/p&gt;</description>
    </item>
    <item>
      <title>愿您此生幸福，未曾遗憾</title>
      <link>/other/2019/092612-mo/</link>
      <pubDate>Thu, 26 Sep 2019 12:59:21 +0800</pubDate>
      <guid>/other/2019/092612-mo/</guid>
      <description>&lt;p&gt;愿您此生幸福，未曾遗憾。&lt;/p&gt;&#xA;&lt;p&gt;愿您笑然离开，乘青而上。&lt;/p&gt;&#xA;&lt;p&gt;默&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>目录监控</title>
      <link>/code/2019/092413-watch/</link>
      <pubDate>Tue, 24 Sep 2019 13:08:47 +0800</pubDate>
      <guid>/code/2019/092413-watch/</guid>
      <description>&lt;p&gt;主要用于目录变化监控，代码未优化，仅实现了功能。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;//目录监听功能&#xA;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;flag&amp;#34;&#xA;&#x9;&amp;#34;log&amp;#34;&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;path/filepath&amp;#34;&#xA;&#x9;&amp;#34;os&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/fsnotify/fsnotify&amp;#34;&#xA;&#x9;&amp;#34;github.com/soease/tools&amp;#34;&#xA;)&#xA;&#xA;func onWatch(str string, cmd string){&#xA;&#x9;log.Println( str + &amp;#34;, 执行命令。&amp;#34;)&#xA;&#x9;tools.Shell(cmd)&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;path := flag.String(&amp;#34;path&amp;#34;, &amp;#34;.&amp;#34;, &amp;#34;要监听的目录&amp;#34;)&#xA;&#x9;cmd := flag.String(&amp;#34;command&amp;#34;,&amp;#34;blog&amp;#34;, &amp;#34;当目录发生变化时，执行的命令&amp;#34;)&#xA;&#x9;flag.Parse()&#xA;&#xA;&#x9;//创建一个监控对象&#xA;&#x9;watch, err := fsnotify.NewWatcher()&#xA;&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;log.Fatal(err)&#xA;&#x9;}&#xA;&#xA;&#x9;defer watch.Close()&#xA;&#xA;    //通过Walk来遍历目录下的所有子目录&#xA;    filepath.Walk(*path, func(path string, info os.FileInfo, err error) error {&#xA;        //这里判断是否为目录，只需监控目录即可&#xA;        //目录下的文件也在监控范围内，不需要我们一个一个加&#xA;        if info.IsDir() {&#xA;            path, err := filepath.Abs(path);&#xA;            if err != nil {&#xA;                return err;&#xA;            }&#xA;            err = watch.Add(path);&#xA;            if err != nil {&#xA;                return err;&#xA;            }&#xA;            fmt.Println(&amp;#34;监控 : &amp;#34;, path);&#xA;        }&#xA;        return nil;&#xA;    });&#xA;&#xA;&#x9;//我们另启一个goroutine来处理监控对象的事件&#xA;&#x9;go func() {&#xA;&#x9;&#x9;for {&#xA;&#x9;&#x9;&#x9;select {&#xA;&#x9;&#x9;&#x9;case ev := &amp;lt;-watch.Events:&#xA;&#x9;&#x9;&#x9;&#x9;{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;// Create 创建&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;// Write 写入&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;// Remove 删除&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;// Rename 重命名&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;// Chmod 修改权限&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if ev.Op&amp;amp;fsnotify.Create == fsnotify.Create {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;onWatch(&amp;#34;创建文件 : &amp;#34; + ev.Name, *cmd)&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if ev.Op&amp;amp;fsnotify.Write == fsnotify.Write {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;log.Println(&amp;#34;写入文件 : &amp;#34;, ev.Name)&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;onWatch(&amp;#34;写入文件 : &amp;#34; + ev.Name, *cmd)&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if ev.Op&amp;amp;fsnotify.Remove == fsnotify.Remove {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;onWatch(&amp;#34;删除文件 : &amp;#34; + ev.Name, *cmd)&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if ev.Op&amp;amp;fsnotify.Rename == fsnotify.Rename {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;onWatch(&amp;#34;重命名文件 : &amp;#34; + ev.Name, *cmd)&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;if ev.Op&amp;amp;fsnotify.Chmod == fsnotify.Chmod {&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;log.Println(&amp;#34;修改权限 : &amp;#34;, ev.Name)&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;&#x9;case err := &amp;lt;-watch.Errors:&#xA;&#x9;&#x9;&#x9;&#x9;{&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;log.Println(&amp;#34;error : &amp;#34;, err)&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;return&#xA;&#x9;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;}()&#xA;&#xA;&#x9;//循环&#xA;&#x9;select {}&#xA;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>我看树莓派4，以及极客憧憬</title>
      <link>/it/2019/092322-pi4/</link>
      <pubDate>Mon, 23 Sep 2019 22:25:59 +0800</pubDate>
      <guid>/it/2019/092322-pi4/</guid>
      <description>&lt;p&gt;据说Raspberry Pi4出现了两个问题，希望后续板本能够解决。就怕买回来不兼容其它type-c。&lt;/p&gt;&#xA;&lt;p&gt;Pi4适用于台式应用或者小型个人服务器，主要是它的功耗越来越大，满足不了便携的需求（或者说是电池的消耗）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>微信小店的使用：好多坑。能不用的建议不要用。</title>
      <link>/it/2019/092012-weixin/</link>
      <pubDate>Fri, 20 Sep 2019 12:13:02 +0800</pubDate>
      <guid>/it/2019/092012-weixin/</guid>
      <description>&lt;p&gt;不知道是腾讯不重视，还是有意给网络商店一个生存空间：微信小店API不齐全，个别功能不可用。订单状态不能修改，订单不能收货。&lt;/p&gt;&#xA;&lt;p&gt;若小程序需要调用微信小店，关联UnionId，还需要开通微信开放平台（https://open.weixin.qq.com）。300*3，需要花900大洋。&lt;/p&gt;</description>
    </item>
    <item>
      <title>科幻：10亿年前的留言--《生命之书》</title>
      <link>/other/2019/091907-dna/</link>
      <pubDate>Thu, 19 Sep 2019 07:45:52 +0800</pubDate>
      <guid>/other/2019/091907-dna/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;在地球生命的46亿年中，只有三次智慧生命体，包括我们现在的人类。估计在地球的百岁寿命中，还将有三至四次可能产生智慧生命。我们现在正处于地球的中年。&lt;/p&gt;</description>
    </item>
    <item>
      <title>加码攀登者</title>
      <link>/money/2019/091816-pandengzhe/</link>
      <pubDate>Wed, 18 Sep 2019 16:32:51 +0800</pubDate>
      <guid>/money/2019/091816-pandengzhe/</guid>
      <description>&lt;p&gt;三部国庆档影片：攀登者、我和我的祖国、中国机长，近期已陆续发预告片，也进行了预售，暂时看来攀登者居第一。&lt;/p&gt;&#xA;&lt;p&gt;个人比较看好前两个，希望都能大卖。加大了对攀登者的投资，不过要28亿左右回本，难度还是有的，希望也是有的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>加码攀登者</title>
      <link>/other/2019/091816-pandengzhe/</link>
      <pubDate>Wed, 18 Sep 2019 16:32:51 +0800</pubDate>
      <guid>/other/2019/091816-pandengzhe/</guid>
      <description>&lt;p&gt;三部国庆档影片：攀登者、我和我的祖国、中国机长，近期已陆续发预告片，也进行了预售，暂时看来攀登者居第一。&lt;/p&gt;&#xA;&lt;p&gt;个人比较看好前两个，希望都能大卖。加大了对攀登者的投资，不过要28亿左右回本，难度还是有的，希望也是有的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ESP8266无线LED点阵彩屏</title>
      <link>/ai/2019/091809-esp8266/</link>
      <pubDate>Wed, 18 Sep 2019 09:10:46 +0800</pubDate>
      <guid>/ai/2019/091809-esp8266/</guid>
      <description>&lt;p&gt;购买了一个16x16的WS2812屏，加上之前的ESP8266板，合计约百元，打造了一个无线点阵屏幕。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../091809-ESP8266-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;另外还购了一个脚踏开关，用于简单控制。通常的控制通过网络，可以修改显示内容、亮度、速度、样式等。&lt;/p&gt;</description>
    </item>
    <item>
      <title>生成汉字点阵</title>
      <link>/it/2019/090922-dianzhen/</link>
      <pubDate>Mon, 09 Sep 2019 22:30:57 +0800</pubDate>
      <guid>/it/2019/090922-dianzhen/</guid>
      <description></description>
    </item>
    <item>
      <title>树莓派连接WS2812 LED灯带</title>
      <link>/ai/2019/090822-piws2812/</link>
      <pubDate>Sun, 08 Sep 2019 22:32:04 +0800</pubDate>
      <guid>/ai/2019/090822-piws2812/</guid>
      <description>&lt;p&gt;购了两块16X16的WS2812“屏”，计划用来装在车后，显示一些信息。&lt;/p&gt;&#xA;&lt;p&gt;原文在这里：https://tutorials-raspberrypi.com/connect-control-raspberry-pi-ws2812-rgb-led-strips/&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go1.13</title>
      <link>/code/2019/090520-g0113/</link>
      <pubDate>Thu, 05 Sep 2019 20:54:25 +0800</pubDate>
      <guid>/code/2019/090520-g0113/</guid>
      <description>&lt;p&gt;Go1.13发布有几天了，今天将以前的部份程序重新编译，发现文件小了不少。&lt;/p&gt;</description>
    </item>
    <item>
      <title>时间就是金钱</title>
      <link>/teach/2019/090515-shijian/</link>
      <pubDate>Thu, 05 Sep 2019 15:19:29 +0800</pubDate>
      <guid>/teach/2019/090515-shijian/</guid>
      <description>&lt;p&gt;现代人往往赞叹古人的智慧，我不知道是更多的闲暇时间，还是更纯净的空气，让他们有了更多的反醒和思考。&lt;/p&gt;&#xA;&lt;p&gt;古人说“时间就是金钱”。时间这个把我们三维生物囚禁起来的东西，就是我们的一切。一切源自于此，也失自于此。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tinygo 基于LLVM，针对小型设备的Go编译器</title>
      <link>/ai/2019/090409-tinygo/</link>
      <pubDate>Wed, 04 Sep 2019 09:52:43 +0800</pubDate>
      <guid>/ai/2019/090409-tinygo/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../090409-tinygo-01.jpg&#34; alt=&#34;&#34;&gt;&#xA;TinyGo是一个用于微控制器的Go编译器，使用WebAssembly（WASM）和命令行工具。它重用了Go语言工具和LLVM一起使用的库，编译用Go编程语言编写的程序。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang下载被墙的解决</title>
      <link>/code/2019/090223-qiang/</link>
      <pubDate>Mon, 02 Sep 2019 23:15:54 +0800</pubDate>
      <guid>/code/2019/090223-qiang/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;设置一个代理：https://goproxy.io/zh/   （顺便：这里也可以下载golang）&lt;/p&gt;&#xA;&lt;p&gt;export GO111MODULE=on   # 启用 Go Modules 功能&lt;/p&gt;&#xA;&lt;p&gt;export GOPROXY=https://goproxy.io    # 配置 GOPROXY 环境变量&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://athens.azurefd.net&#34;&gt;https://athens.azurefd.net&lt;/a&gt;  #这个不知道是谁&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang调试工具Delve</title>
      <link>/code/2019/090222-delve/</link>
      <pubDate>Mon, 02 Sep 2019 22:26:28 +0800</pubDate>
      <guid>/code/2019/090222-delve/</guid>
      <description>&lt;p&gt;Devle是一个非常棒的golang 调试工具，支持多种调试方式，直接运行调试，或者attach到一个正在运行中的golang程序，进行调试。&lt;/p&gt;&#xA;&lt;p&gt;线上golang服务出现问题时，Devle是必不少的在线调试工具，如果使用docker，也可以把Devle打进docker镜像里，调试代码。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu19反复登陆,无法进入桌面</title>
      <link>/it/2019/090208-bengkui/</link>
      <pubDate>Mon, 02 Sep 2019 08:33:24 +0800</pubDate>
      <guid>/it/2019/090208-bengkui/</guid>
      <description>&lt;p&gt;昨日，我的Ubuntu19出现问题，现象如题：反复出现登陆界面，却无法进入桌面。或者甚至桌面都不出。&lt;/p&gt;&#xA;&lt;p&gt;于是，经过一番百度或其它，仍无好转，虽然另外装了一个桌面系统，但觉得不习惯，只是把数据备份好了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTTPie命令行HTTP客户端工具</title>
      <link>/it/2019/090121-httpie/</link>
      <pubDate>Sun, 01 Sep 2019 21:40:53 +0800</pubDate>
      <guid>/it/2019/090121-httpie/</guid>
      <description>&lt;p&gt;一篇翻译文章比较详细：https://www.jianshu.com/p/65b1d65873f5&lt;/p&gt;&#xA;&lt;p&gt;HTTPie是一个命令行HTTP客户端，通过命令行与Web服务器交互。它提供了一个简单的http命令，允许使用简单自然的语法发送任意http请求，并用颜色输出。通常用于测试和调试时。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go给图片添加水印</title>
      <link>/code/2019/083017-water/</link>
      <pubDate>Fri, 30 Aug 2019 17:22:27 +0800</pubDate>
      <guid>/code/2019/083017-water/</guid>
      <description>&lt;p&gt;图片添加水印。计划给博客的图片添加上水印。&lt;/p&gt;&#xA;&lt;p&gt;当然，有部份内容在我的tools里 &amp;ldquo;github.com/soease/tools&amp;rdquo;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;flag&amp;#34;&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;image&amp;#34;&#xA;&#x9;&amp;#34;image/color&amp;#34;&#xA;&#x9;&amp;#34;image/draw&amp;#34;&#xA;&#x9;&amp;#34;io/ioutil&amp;#34;&#xA;&#x9;&amp;#34;os&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/golang/freetype&amp;#34;&#xA;&#x9;&amp;#34;github.com/soease/tools&amp;#34;&#xA;)&#xA;&#xA;//发生错误时退出&#xA;func OnErrExit(err error) {&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;fmt.Println(err)&#xA;&#x9;&#x9;os.Exit(-1)&#xA;&#x9;}&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;var FontSize = flag.Float64(&amp;#34;FontSize&amp;#34;, 14, &amp;#34;字体大小&amp;#34;)&#xA;&#x9;var SourFile = flag.String(&amp;#34;SourceFile&amp;#34;, &amp;#34;&amp;#34;, &amp;#34;源文件&amp;#34;)&#xA;&#x9;var WaterMark = flag.String(&amp;#34;Water&amp;#34;, &amp;#34;&amp;#34;, &amp;#34;水印文件或水印字符串&amp;#34;)&#xA;&#x9;var DestFile = flag.String(&amp;#34;DestFile&amp;#34;, &amp;#34;&amp;#34;, &amp;#34;生成水印文件&amp;#34;)&#xA;&#x9;var FontFile = flag.String(&amp;#34;FontFile&amp;#34;, &amp;#34;./simsun.ttc&amp;#34;, &amp;#34;字体文件&amp;#34;)&#xA;&#x9;var LocationX = flag.Int(&amp;#34;x&amp;#34;, 0, &amp;#34;偏移位置x&amp;#34;)&#xA;&#x9;var LocationY = flag.Int(&amp;#34;y&amp;#34;, 0, &amp;#34;偏移位置y&amp;#34;)&#xA;&#x9;flag.Parse()&#xA;&#xA;&#x9;var WaterFile, WaterStr string&#xA;&#xA;&#x9;if len(os.Args) &amp;lt; 3 {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;\n 图片水印工具&amp;#34;)&#xA;&#x9;&#x9;fmt.Println(&amp;#34; Tu Studio. Ease 2019\n&amp;#34;)&#xA;&#x9;&#x9;flag.Usage()&#xA;&#x9;&#x9;os.Exit(-1)&#xA;&#x9;}&#xA;&#xA;&#x9;if *SourFile == &amp;#34;&amp;#34; || tools.FileExist(*SourFile) == false {&#xA;&#x9;&#x9;fmt.Println(&amp;#34;原文件不存在&amp;#34;)&#xA;&#x9;&#x9;os.Exit(-1)&#xA;&#x9;}&#xA;&#x9;if tools.FileExist(*WaterMark) { //自动判断是字符串还是文件&#xA;&#x9;&#x9;WaterFile = *WaterMark&#xA;&#x9;} else {&#xA;&#x9;&#x9;WaterStr = *WaterMark&#xA;&#x9;}&#xA;&#xA;&#x9;SourImg, err := tools.PicFile_Img(*SourFile)&#xA;&#x9;OnErrExit(err)&#xA;&#xA;&#x9;//---------------------------------------------------------------------------------------------------------------------图片水印&#xA;&#x9;if WaterFile != &amp;#34;&amp;#34; {&#xA;&#x9;&#x9;wmb_img, err := tools.PicFile_Img(WaterFile)&#xA;&#x9;&#x9;OnErrExit(err)&#xA;&#xA;&#x9;&#x9;//把水印写在右下角，并向0坐标偏移10个像素&#xA;&#x9;&#x9;offset := image.Pt(SourImg.Bounds().Dx()-wmb_img.Bounds().Dx()-10, SourImg.Bounds().Dy()-wmb_img.Bounds().Dy()-10)&#xA;&#x9;&#x9;b := SourImg.Bounds()&#xA;&#x9;&#x9;m := image.NewRGBA(b) //根据b画布的大小新建一个新图像&#xA;&#xA;&#x9;&#x9;draw.Draw(m, b, SourImg, image.ZP, draw.Src)&#xA;&#x9;&#x9;draw.Draw(m, wmb_img.Bounds().Add(offset), wmb_img, image.ZP, draw.Over)&#xA;&#xA;&#x9;&#x9;//生成新图片&#xA;&#x9;&#x9;if *DestFile == &amp;#34;&amp;#34; {&#xA;&#x9;&#x9;&#x9;tools.WritePicFile(m, &amp;#34;./mark_&amp;#34;+*SourFile)&#xA;&#x9;&#x9;} else {&#xA;&#x9;&#x9;&#x9;tools.WritePicFile(m, *DestFile)&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#xA;&#x9;//---------------------------------------------------------------------------------------------------------------------文字水印&#xA;&#x9;if WaterStr != &amp;#34;&amp;#34; {&#xA;&#x9;&#x9;img := image.NewNRGBA(SourImg.Bounds())&#xA;&#xA;&#x9;&#x9;for y := 0; y &amp;lt; img.Bounds().Dy(); y++ {&#xA;&#x9;&#x9;&#x9;for x := 0; x &amp;lt; img.Bounds().Dx(); x++ {&#xA;&#x9;&#x9;&#x9;&#x9;img.Set(x, y, SourImg.At(x, y))&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;//拷贝一个字体文件到运行目录&#xA;&#x9;&#x9;fontBytes, err := ioutil.ReadFile(*FontFile)&#xA;&#x9;&#x9;OnErrExit(err)&#xA;&#xA;&#x9;&#x9;font, err := freetype.ParseFont(fontBytes)&#xA;&#x9;&#x9;OnErrExit(err)&#xA;&#xA;&#x9;&#x9;f := freetype.NewContext()&#xA;&#x9;&#x9;f.SetDPI(72)&#xA;&#x9;&#x9;f.SetFont(font)&#xA;&#x9;&#x9;f.SetFontSize(*FontSize)&#xA;&#x9;&#x9;f.SetClip(SourImg.Bounds())&#xA;&#x9;&#x9;f.SetDst(img)&#xA;&#x9;&#x9;f.SetSrc(image.NewUniform(color.RGBA{R: 0, G: 0, B: 0, A: 250}))&#xA;&#xA;&#x9;&#x9;EnglishNum, ChineseNum := tools.EnglishNum_ChineseNum(WaterStr) //分别获取中文和英文数量&#xA;&#x9;&#x9;Size := ChineseNum*2 + EnglishNum                               //判断位置&#xA;&#x9;&#x9;pt := freetype.Pt(img.Bounds().Dx()-tools.Float64_Int(*FontSize/2)*Size-8-*LocationX, img.Bounds().Dy()-10-*LocationY)&#xA;&#x9;&#x9;_, err = f.DrawString(WaterStr, pt)&#xA;&#xA;&#x9;&#x9;//再写一遍，形成阴影&#xA;&#x9;&#x9;f.SetSrc(image.NewUniform(color.RGBA{R: 250, G: 250, B: 250, A: 250}))&#xA;&#xA;&#x9;&#x9;pt = freetype.Pt(img.Bounds().Dx()-tools.Float64_Int(*FontSize/2)*Size-10-*LocationX, img.Bounds().Dy()-12-*LocationY)&#xA;&#x9;&#x9;_, err = f.DrawString(WaterStr, pt)&#xA;&#xA;&#x9;&#x9;//生成新图片&#xA;&#x9;&#x9;if *DestFile == &amp;#34;&amp;#34; {&#xA;&#x9;&#x9;&#x9;tools.WritePicFile(img, &amp;#34;./mark_&amp;#34;+*SourFile)&#xA;&#x9;&#x9;} else {&#xA;&#x9;&#x9;&#x9;tools.WritePicFile(img, *DestFile)&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;OnErrExit(err)&#xA;&#x9;}&#xA;&#xA;&#x9;fmt.Println(&amp;#34;添加水印图片结束请查看&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>大宝二宝观察日记---持续更新</title>
      <link>/teach/2019/083013-guancha/</link>
      <pubDate>Fri, 30 Aug 2019 13:47:12 +0800</pubDate>
      <guid>/teach/2019/083013-guancha/</guid>
      <description>&lt;p&gt;2021.12.15&lt;/p&gt;&#xA;&lt;p&gt;现在他们上二年级了。&lt;/p&gt;&#xA;&lt;p&gt;昨天一个要好的女同学来家里住，真是幸福的童年。&lt;/p&gt;&#xA;&lt;p&gt;2020.10.19&lt;/p&gt;&#xA;&lt;p&gt;上周老大当上了班长，老二当上劳动委员。原本他们的希望是恰恰相反的。&lt;/p&gt;&#xA;&lt;p&gt;通过一个月的学习，他们都能很好的适应新的环境，每天也基本都快快乐乐。随着学习的深入，也出现些学习上的“帐”。学习进度也拉得比较快，相较我们以前而言。&lt;/p&gt;</description>
    </item>
    <item>
      <title>docker使用mysql</title>
      <link>/it/2019/083010-mysql/</link>
      <pubDate>Fri, 30 Aug 2019 10:22:38 +0800</pubDate>
      <guid>/it/2019/083010-mysql/</guid>
      <description>&lt;p&gt;我是比较喜欢绿色的（某些除外），它们称为洁僻。docker东西算比较绿色，至少在主机上文件少，基本知道是些啥。要不主机上随着时间一久，啥都有。之前想找绿色版的mysql安装，想想还是docker又潮又绿&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>上海堡垒，确实...很烂</title>
      <link>/other/2019/082923-baolei/</link>
      <pubDate>Thu, 29 Aug 2019 23:31:00 +0800</pubDate>
      <guid>/other/2019/082923-baolei/</guid>
      <description>&lt;p&gt;网上很快就有了高清版，看来是放弃抵抗了。观后感只能用标题来说明:确实&amp;hellip;很烂，虽然我是边写代码边看的，也感觉有点浪费时间。&lt;/p&gt;&#xA;&lt;p&gt;是偶像剧吗？面向的观众是00后？其实看看下面的宣传海报就有点青春偶像剧的感觉。&lt;/p&gt;</description>
    </item>
    <item>
      <title>考虑开发自用：电影投资分析系统</title>
      <link>/it/2019/082910-dianying/</link>
      <pubDate>Thu, 29 Aug 2019 10:12:54 +0800</pubDate>
      <guid>/it/2019/082910-dianying/</guid>
      <description>&lt;p&gt;电影投资分析系统&lt;/p&gt;&#xA;&lt;p&gt;原理：根据以往的各项数据进行综合可行性分析&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;获取现有数据到本地：&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.cbooo.cn&#34;&gt;http://www.cbooo.cn&lt;/a&gt; 获取：导演.主演.制作公司.发行公司.类型.年份.总票房.营销事件.&#xA;&lt;a href=&#34;https://movie.douban.com/&#34;&gt;https://movie.douban.com/&lt;/a&gt; 获取：导演.编剧.主演.类型.简介.照片.&#xA;&lt;a href=&#34;https://maoyan.com&#34;&gt;https://maoyan.com&lt;/a&gt; 获取：类型.票房.上映时间.评分.简介.主演.照片.导演.制片人.监制.编剧.出品人.&#xA;&lt;a href=&#34;https://maoyan.com/films?showType=1&amp;amp;sourceId=2&#34;&gt;https://maoyan.com/films?showType=1&amp;amp;sourceId=2&lt;/a&gt;   正在热映大陆全部电影&#xA;&lt;a href=&#34;https://maoyan.com/films?showType=1&amp;amp;sourceId=10&#34;&gt;https://maoyan.com/films?showType=1&amp;amp;sourceId=10&lt;/a&gt;　正在热映香港全部电影&#xA;&lt;a href=&#34;https://maoyan.com/films?showType=1&amp;amp;sourceId=13&#34;&gt;https://maoyan.com/films?showType=1&amp;amp;sourceId=13&lt;/a&gt;  正在热映台湾全部电影&#xA;&lt;a href=&#34;https://maoyan.com/films?showType=2&amp;amp;sourceId=2&#34;&gt;https://maoyan.com/films?showType=2&amp;amp;sourceId=2&lt;/a&gt;　 即将上映大陆全部电影&#xA;&lt;a href=&#34;https://maoyan.com/films?showType=2&amp;amp;sourceId=10&#34;&gt;https://maoyan.com/films?showType=2&amp;amp;sourceId=10&lt;/a&gt;　即将上映香港全部电影&#xA;&lt;a href=&#34;https://maoyan.com/films?showType=2&amp;amp;sourceId=13&#34;&gt;https://maoyan.com/films?showType=2&amp;amp;sourceId=13&lt;/a&gt;  即将上映台湾全部电影&#xA;&lt;a href=&#34;https://maoyan.com/films?showType=3&amp;amp;sourceId=2&#34;&gt;https://maoyan.com/films?showType=3&amp;amp;sourceId=2&lt;/a&gt;   经典大陆全部电影&#xA;&lt;a href=&#34;https://maoyan.com/films?showType=3&amp;amp;sourceId=10&#34;&gt;https://maoyan.com/films?showType=3&amp;amp;sourceId=10&lt;/a&gt;　经典香港全部电影&#xA;&lt;a href=&#34;https://maoyan.com/films?showType=3&amp;amp;sourceId=13&#34;&gt;https://maoyan.com/films?showType=3&amp;amp;sourceId=13&lt;/a&gt;  经典台湾全部电影&lt;/p&gt;</description>
    </item>
    <item>
      <title>2019.8.26 调查情况</title>
      <link>/other/2019/082909-jiguang/</link>
      <pubDate>Thu, 29 Aug 2019 09:55:18 +0800</pubDate>
      <guid>/other/2019/082909-jiguang/</guid>
      <description>&lt;p&gt;8月26日上午，到极光口腔进行情况了解，如下：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;林剑峰 负责IT内容，但本身IT知识有限。公司没有专职IT人员。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;HIS使用宏脉系统，MSSQL2000数据库。&lt;/p&gt;</description>
    </item>
    <item>
      <title>sqlite3获取所有表和某个表所有字段</title>
      <link>/it/2019/082823-sqlite3/</link>
      <pubDate>Wed, 28 Aug 2019 23:34:08 +0800</pubDate>
      <guid>/it/2019/082823-sqlite3/</guid>
      <description>&lt;p&gt;原地址：https://blog.csdn.net/chenken789/article/details/80455992&lt;/p&gt;&#xA;&lt;p&gt;SQLite数据库中一个特殊的表叫 sqlite_master，sqlite_master的结构。&lt;/p&gt;</description>
    </item>
    <item>
      <title>设想：一个通用的数据库命令行工具</title>
      <link>/it/2019/082822-shexiang/</link>
      <pubDate>Wed, 28 Aug 2019 22:04:33 +0800</pubDate>
      <guid>/it/2019/082822-shexiang/</guid>
      <description>&lt;h3 id=&#34;设想&#34;&gt;设想&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;跨平台。充分利用golang的跨平台性&lt;/li&gt;&#xA;&lt;li&gt;支持尽可能多的数据库。例如：mssql、mysql、postgresql、sqlite3、db2、oracle&amp;hellip;&lt;/li&gt;&#xA;&lt;li&gt;支持语句提示、自动补齐、语法高亮&lt;/li&gt;&#xA;&lt;li&gt;支持历史命令查询&lt;/li&gt;&#xA;&lt;li&gt;支持自动执行命令脚本&lt;/li&gt;&#xA;&lt;li&gt;命令行工具（命令行也可以有简单的UI）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;先就想到这里。&lt;/p&gt;</description>
    </item>
    <item>
      <title>正面管教</title>
      <link>/teach/2019/082816-zhenmian/</link>
      <pubDate>Wed, 28 Aug 2019 16:25:08 +0800</pubDate>
      <guid>/teach/2019/082816-zhenmian/</guid>
      <description>&lt;p&gt;这是一篇读书摘记，带有“我说”字样的，是我想到的一些事情。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../082816-zhenmian-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;“管教”不等于“惩罚”，管教来源于拉丁文discipulus或disciplini，意思是“真理和原则的追随着”。孩子们和学生们要成为真理和原则的追随者，他们的动力必须来自于内在的自我控制。而不论惩罚还是奖赏，都是来自于外在的控制。&lt;/p&gt;</description>
    </item>
    <item>
      <title>记录一些linux上用到的工具</title>
      <link>/it/2019/082810-gongju/</link>
      <pubDate>Wed, 28 Aug 2019 10:57:19 +0800</pubDate>
      <guid>/it/2019/082810-gongju/</guid>
      <description>&lt;p&gt;在电脑的使用中，好工具显得效率更高，B格更高，持继更新。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;ngrep&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Ngrep是一个网络数据分析器，它与tcpdump无关，是一个易于使用的工具。&lt;/p&gt;&#xA;&lt;p&gt;sudo ngrep -l -q -d eth0 &amp;ldquo;^GET | ^POST &amp;quot; tcp and port 80&lt;/p&gt;</description>
    </item>
    <item>
      <title>uni-app 跨平台前端开发</title>
      <link>/it/2019/082810-uniapp/</link>
      <pubDate>Wed, 28 Aug 2019 10:33:38 +0800</pubDate>
      <guid>/it/2019/082810-uniapp/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://img-cdn-qiniu.dcloud.net.cn/uniapp/doc/uniapp4@2x.png&#34; alt=&#34;&#34;&gt;&#xA;uni-app 是一个使用 Vue.js 开发所有前端应用的框架，开发者编写一套代码，可发布到iOS、Android、H5、以及各种小程序（微信/支付宝/百度/头条/QQ/钉钉）等多个平台。&lt;/p&gt;</description>
    </item>
    <item>
      <title>文档在线预览项目解决方案 kkFileView</title>
      <link>/it/2019/082810-zaixian/</link>
      <pubDate>Wed, 28 Aug 2019 10:03:26 +0800</pubDate>
      <guid>/it/2019/082810-zaixian/</guid>
      <description>&lt;p&gt;例如在云盘/网盘/共享文件等项目中，会用到在线预览功能。可以试试这款。&lt;/p&gt;&#xA;&lt;p&gt;支持doc、docx、ppt、pptx、xls、xlsx、zip、rar、mp4、mp3以及众多类文本如txt、html、xml、java、properties、sql、js、md、json、conf、ini、vue、php、py、bat、gitignore等文件在线预览&lt;/p&gt;</description>
    </item>
    <item>
      <title>在Go中构建交互式提示</title>
      <link>/code/2019/082722-tishi/</link>
      <pubDate>Tue, 27 Aug 2019 22:53:03 +0800</pubDate>
      <guid>/code/2019/082722-tishi/</guid>
      <description>&lt;p&gt;库地址： github.com/c-bata/go-prompt&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;github.com/c-bata/go-prompt&amp;#34;&#xA;)&#xA;&#xA;func completer(d prompt.Document) []prompt.Suggest {&#xA;&#x9;s := []prompt.Suggest{&#xA;&#x9;&#x9;{Text: &amp;#34;users&amp;#34;, Description: &amp;#34;Store the username and age&amp;#34;},&#xA;&#x9;&#x9;{Text: &amp;#34;articles&amp;#34;, Description: &amp;#34;Store the article text posted by user&amp;#34;},&#xA;&#x9;&#x9;{Text: &amp;#34;comments&amp;#34;, Description: &amp;#34;Store the text commented to articles&amp;#34;},&#xA;&#x9;}&#xA;&#x9;return prompt.FilterHasPrefix(s, d.GetWordBeforeCursor(), true)&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;fmt.Println(&amp;#34;Please select table.&amp;#34;)&#xA;&#x9;t := prompt.Input(&amp;#34;&amp;gt; &amp;#34;, completer)&#xA;&#x9;fmt.Println(&amp;#34;You selected &amp;#34; + t)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;以上代码运行后进入提示行，输入指令时将提示。也可以翻历史记录。&#xA;&lt;img src=&#34;../082722-tishi-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>go 汇总， cloud.google.com 无法下载 等解决办法</title>
      <link>/code/2019/082621-go/</link>
      <pubDate>Mon, 26 Aug 2019 21:41:13 +0800</pubDate>
      <guid>/code/2019/082621-go/</guid>
      <description>&lt;p&gt;原文链接：https://blog.csdn.net/wangjunsheng/article/details/81481777&lt;/p&gt;&#xA;&lt;p&gt;第三方库&lt;/p&gt;&#xA;&lt;p&gt;google 被墙了，很多相关的库都 go get 不下来。可以用下面的方法曲线下载&lt;/p&gt;</description>
    </item>
    <item>
      <title>支付宝的公钥与私钥</title>
      <link>/it/2019/082618-alipay/</link>
      <pubDate>Mon, 26 Aug 2019 18:27:33 +0800</pubDate>
      <guid>/it/2019/082618-alipay/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../082618-alipay-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;在开发时，常被一些东东搞晕头，就象支付宝的公钥和私钥，而且有应用私钥、应用公钥、支付宝公钥这三种，啥意思？&lt;/p&gt;&#xA;&lt;h4 id=&#34;先说说公钥与私钥&#34;&gt;先说说公钥与私钥：&lt;/h4&gt;&#xA;&lt;p&gt;&lt;strong&gt;公钥&lt;/strong&gt;与&lt;strong&gt;私钥&lt;/strong&gt;是用于信息加解密，用公钥加密的文件只能用私钥解密，而私钥加密的文件只能用公钥解密。为发送一份保密报文，发送者必须使用接收者的公共密钥对数据进行加密，一旦加密，只有接收方用其私人密钥才能加以解密。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我需要一个简单的邮件系统</title>
      <link>/it/2019/082521-youjian/</link>
      <pubDate>Sun, 25 Aug 2019 21:28:04 +0800</pubDate>
      <guid>/it/2019/082521-youjian/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../082521-youjian-01.jpg&#34; alt=&#34;邮件服务器&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;一直需要一个简单的邮件服务器，最好是一个文件就搞定的那种。面向一两百人的小企业对象就可以了。部署简单，一个主程序，一个配置文件即好。&lt;/p&gt;&#xA;&lt;p&gt;最好是跨平台的，比如拿个RaspberryPi也能安装。也需要有Web端。数据库还是用Sqlite3吧，毕竟那就那么一两百号用户。至于垃圾过滤、杀毒那些，没有也行，让用户能自己扩展就好。&lt;/p&gt;</description>
    </item>
    <item>
      <title>全国上下，猪肉价格一路飙升</title>
      <link>/other/2019/082513-zhurou/</link>
      <pubDate>Sun, 25 Aug 2019 13:53:55 +0800</pubDate>
      <guid>/other/2019/082513-zhurou/</guid>
      <description>&lt;p&gt;早上出去吃早餐馄饨，不出所料的涨价了。&lt;/p&gt;&#xA;&lt;p&gt;据统计，8月21日，全国农产品批发市场猪肉平均价格达到30.56元/公斤，一天之内涨了2.2%，再创历史新高。&lt;/p&gt;</description>
    </item>
    <item>
      <title>据说：银杏叶可能有助手治疗2型糖尿病</title>
      <link>/health/2019/082420-yinxin/</link>
      <pubDate>Sat, 24 Aug 2019 20:55:26 +0800</pubDate>
      <guid>/health/2019/082420-yinxin/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.cnbeta.com/articles/tech/882065.htm&#34;&gt;研究发现：银杏叶可能有助于治疗2型糖尿病&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;辛辛那提大学（UC）医学院的研究人员共同撰写的一项研究表明，&lt;strong&gt;银杏叶提取物是一种常见的膳食补充剂，可能对治疗2型糖尿病有一定的疗效。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;在将银杏叶提取物和磁化水添加到他们的饮食中之后，胰岛β细胞的质量和这些细胞中胰岛素的含量明显增加，几乎恢复到正常水平，特别是在银杏叶提取物治疗组。&lt;/p&gt;</description>
    </item>
    <item>
      <title>收集本机相关信息</title>
      <link>/code/2019/080416-shouji/</link>
      <pubDate>Sat, 24 Aug 2019 16:22:51 +0800</pubDate>
      <guid>/code/2019/080416-shouji/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;time&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/shirou/gopsutil/cpu&amp;#34;&#xA;&#x9;&amp;#34;github.com/shirou/gopsutil/disk&amp;#34;&#xA;&#x9;&amp;#34;github.com/shirou/gopsutil/host&amp;#34;&#xA;&#x9;&amp;#34;github.com/shirou/gopsutil/mem&amp;#34;&#xA;&#x9;&amp;#34;github.com/shirou/gopsutil/net&amp;#34;&#xA;)&#xA;&#xA;func collet() {&#xA;&#x9;v, _ := mem.VirtualMemory()&#xA;&#x9;c, _ := cpu.Info()&#xA;&#x9;cc, _ := cpu.Percent(time.Second, false)&#xA;&#x9;d, _ := disk.Usage(&amp;#34;/&amp;#34;)&#xA;&#x9;n, _ := host.Info()&#xA;&#x9;nv, _ := net.IOCounters(true)&#xA;&#x9;boottime, _ := host.BootTime()&#xA;&#x9;btime := time.Unix(int64(boottime), 0).Format(&amp;#34;2006-01-02 15:04:05&amp;#34;)&#xA;&#xA;&#x9;fmt.Printf(&amp;#34;        内存        : %v MB  剩余: %v MB 使用:%v 用量:%0.2f%%\n&amp;#34;, v.Total/1024/1024, v.Available/1024/1024, v.Used/1024/1024, v.UsedPercent)&#xA;&#x9;if len(c) &amp;gt; 1 {&#xA;&#x9;&#x9;for _, sub_cpu := range c {&#xA;&#x9;&#x9;&#x9;modelname := sub_cpu.ModelName&#xA;&#x9;&#x9;&#x9;cores := sub_cpu.Cores&#xA;&#x9;&#x9;&#x9;fmt.Printf(&amp;#34;        CPU         : %v   %v cores \n&amp;#34;, modelname, cores)&#xA;&#x9;&#x9;}&#xA;&#x9;} else {&#xA;&#x9;&#x9;sub_cpu := c[0]&#xA;&#x9;&#x9;modelname := sub_cpu.ModelName&#xA;&#x9;&#x9;cores := sub_cpu.Cores&#xA;&#x9;&#x9;fmt.Printf(&amp;#34;        CPU       : %v   %v cores \n&amp;#34;, modelname, cores)&#xA;&#xA;&#x9;}&#xA;&#x9;fmt.Printf(&amp;#34;        网络        : %v MB / %v MB\n&amp;#34;, nv[0].BytesRecv/1024/1024, nv[0].BytesSent/1024/1024)&#xA;&#x9;fmt.Printf(&amp;#34;        启动时间    : %v\n&amp;#34;, btime)&#xA;&#x9;fmt.Printf(&amp;#34;        CPU使用率   : %0.2f%% \n&amp;#34;, cc[0])&#xA;&#x9;fmt.Printf(&amp;#34;        硬盘        : %v GB  剩余: %v GB 用量:%0.2f%%\n&amp;#34;, d.Total/1024/1024/1024, d.Free/1024/1024/1024, d.UsedPercent)&#xA;&#x9;fmt.Printf(&amp;#34;        操作系统    : %v(%v)   %v  \n&amp;#34;, n.Platform, n.PlatformFamily, n.PlatformVersion)&#xA;&#x9;fmt.Printf(&amp;#34;        主机名      : %v  \n&amp;#34;, n.Hostname)&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;collet()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;显示效果如：&lt;/p&gt;</description>
    </item>
    <item>
      <title>我的目标手机</title>
      <link>/other/2019/082221-shouji/</link>
      <pubDate>Thu, 22 Aug 2019 21:50:32 +0800</pubDate>
      <guid>/other/2019/082221-shouji/</guid>
      <description>&lt;p&gt;在这个5G开元的时间点，各种手机技术不断涌现。但，我需要什么样一个手机呢？比如说5年内吧。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../082221-shouji-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h5 id=&#34;1-折叠屏&#34;&gt;1. 折叠屏？&lt;/h5&gt;&#xA;&lt;p&gt;似乎这是比较现实一点的需求。未展开时高屏占比5寸以下，展开后12寸左右，嗯，够了。看起来必须三折才行。&lt;/p&gt;</description>
    </item>
    <item>
      <title>xDroid让Linux运行Android应用</title>
      <link>/it/2019/082021-xdroid/</link>
      <pubDate>Tue, 20 Aug 2019 21:50:18 +0800</pubDate>
      <guid>/it/2019/082021-xdroid/</guid>
      <description>&lt;p&gt;xDroid是麒卓公司(这公司名字取得，咋觉得那么没感觉呢)的产品之一，www.linzhuotech.com。它让我的Ubuntu可以玩一些 Android的应用，特别是像鹅厂的微信、QQ等。虽然鄙视，但无奈用户太大，也就经常需要用到。之前在Win平台上倒是有比较多的软件可以用虚拟机的方式运行Android应用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我国量子研究不断突破</title>
      <link>/it/2019/081911-liangzi/</link>
      <pubDate>Mon, 19 Aug 2019 11:04:28 +0800</pubDate>
      <guid>/it/2019/081911-liangzi/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.cnbeta.com/articles/science/879747.htm&#34;&gt;我国取得量子研究重大进展 世界首次实现高维度量子隐形传态&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;原文称：据央视新闻客户端8月18日消息，经过多年研究攻关，我国科学家日前在国际上首次成功实现高维度量子体系的隐形传态，为发展高效量子网络奠定了坚实的科学基础。近日，国际权威学术期刊《物理评论快报》发表了这一最新研究成果，并称其是“量子通信领域的一个里程碑”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>广电网络，拿来做什？</title>
      <link>/other/2019/081910-guangdian/</link>
      <pubDate>Mon, 19 Aug 2019 10:46:06 +0800</pubDate>
      <guid>/other/2019/081910-guangdian/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.cnbeta.com/articles/tech/879871.htm&#34;&gt;有线电视失血难避免 “宽带+5G”能否成广电逆袭的解药？&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;原文：日前，中格兰研究发布2019年第二季度中国有线电视行业季度发展报告。报告显示，二季度有线数字电视用户流失放缓，有线数字化率出现小幅提升。但失血仍无法避免，今年上半年，有线数字电视缴费用户1.44亿户，净减少178.9万户。未来，被广电给予厚望的宽带和5G能否成为其逆袭的新解药？&lt;/p&gt;</description>
    </item>
    <item>
      <title>钉子画</title>
      <link>/other/2019/081908-dingzi/</link>
      <pubDate>Mon, 19 Aug 2019 08:15:16 +0800</pubDate>
      <guid>/other/2019/081908-dingzi/</guid>
      <description>&lt;p&gt;&lt;strong&gt;钉子画&lt;/strong&gt;是指用钉子作画。&lt;/p&gt;&#xA;&lt;p&gt;国内牛人作的山水画&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../081908-dingzi-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../081908-dingzi-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;还有国外的&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../081908-dingzi-03.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../081908-dingzi-04.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;有些还会用线来绕出图案。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../081908-dingzi-05.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../081908-dingzi-06.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../081908-dingzi-07.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../081908-dingzi-08.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../081908-dingzi-09.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;我们在科技馆也看到过，类似于很多钉子，手掌按上去就出现手掌的样子。&lt;/p&gt;</description>
    </item>
    <item>
      <title>对于极光的语言选型问题的思考</title>
      <link>/other/2019/081610-jiguang/</link>
      <pubDate>Fri, 16 Aug 2019 10:32:33 +0800</pubDate>
      <guid>/other/2019/081610-jiguang/</guid>
      <description>&lt;p&gt;关于2019.8.14会议中，谈到的语言的选择，我们进行了认真的思考。&lt;/p&gt;&#xA;&lt;p&gt;我们现在使用的开发主要涉及到：Python、Golang、C#，MySQL、MsSQL、Postgresql、Sqlite。&lt;/p&gt;</description>
    </item>
    <item>
      <title>住宅自动化思考</title>
      <link>/ai/2019/081518-zhu/</link>
      <pubDate>Thu, 15 Aug 2019 18:38:34 +0800</pubDate>
      <guid>/ai/2019/081518-zhu/</guid>
      <description>&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;2019.8.15&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;萤石摄像头与门控(开关门信息)联动，当外面开门时，拍个照。如果不方便实施，利用Pi Zero来实现，不过拍照的速度有点慢。&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>极光口腔会议</title>
      <link>/other/2019/081421-jiguang/</link>
      <pubDate>Wed, 14 Aug 2019 21:38:46 +0800</pubDate>
      <guid>/other/2019/081421-jiguang/</guid>
      <description>&lt;p&gt;&lt;strong&gt;时间&lt;/strong&gt;：2019.8.14 15:00&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;地点&lt;/strong&gt;：极光口腔，科技大厦8楼办公室&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;人物&lt;/strong&gt;：张平静（院长）、易云辉、林志尧、李勇(网络咨询)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;主题&lt;/strong&gt;：需求的了解与沟通，确定合作方式&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo静态博客增量更新</title>
      <link>/it/2019/081409-zhenliang/</link>
      <pubDate>Wed, 14 Aug 2019 09:19:37 +0800</pubDate>
      <guid>/it/2019/081409-zhenliang/</guid>
      <description>&lt;p&gt;随着博客内容的越来越多，特别是图片的增多，需要考虑博客的增量更新，而不是象现在的全面更新。否则，十年以后将更(新)不动。&lt;/p&gt;&#xA;&lt;p&gt;现在考虑增量更新方案。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;生成新文章或运行本地服务器时，监控目录，记录修改的文件，记入文本文件中。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于数字货币呼之欲出</title>
      <link>/other/2019/081409-shuzibi/</link>
      <pubDate>Wed, 14 Aug 2019 09:02:37 +0800</pubDate>
      <guid>/other/2019/081409-shuzibi/</guid>
      <description>&lt;p&gt;最近两日&lt;a href=&#34;https://www.cnbeta.com/articles/tech/878231.htm&#34;&gt;有文章&lt;/a&gt;谈到“央行数字人民币欲出”&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../081409-shuzibi-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;数字货币是一种必然趋势，但数字货币会给我们带来什么？&lt;/p&gt;&#xA;&lt;p&gt;不合规的账务手段将越来越少，钱只是一种数字，整个流向清晰无比。加上 金税工程的发展，企业税务将越来越规范，避税手段将越来越少。这就要求企业尽早规范起来，国家方面又尽可能的减少企业负担，减少企业的灰色支出。&lt;/p&gt;</description>
    </item>
    <item>
      <title>男士保健项目</title>
      <link>/money/2019/081321-nanshi/</link>
      <pubDate>Tue, 13 Aug 2019 21:21:54 +0800</pubDate>
      <guid>/money/2019/081321-nanshi/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../081321-nanshi-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;男士保健&lt;/strong&gt; 总是被误解的一个词。我这里的保健，包括：美容、保养、健身，行业包括：美容中心、牙科诊所、高端医院、私人医生机构、健身中心、男科诊所、男性心理中心、养生保健机构、减少中心等，附带一些男性保健用品。以男士身心健康为中心，&lt;strong&gt;作男人的坚强后盾&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>男士保健项目</title>
      <link>/other/2019/081321-nanshi/</link>
      <pubDate>Tue, 13 Aug 2019 21:21:54 +0800</pubDate>
      <guid>/other/2019/081321-nanshi/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../081321-nanshi-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;男士保健&lt;/strong&gt; 总是被误解的一个词。我这里的保健，包括：美容、保养、健身，行业包括：美容中心、牙科诊所、高端医院、私人医生机构、健身中心、男科诊所、男性心理中心、养生保健机构、减少中心等，附带一些男性保健用品。以男士身心健康为中心，&lt;strong&gt;作男人的坚强后盾&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我这样看少儿编程</title>
      <link>/teach/2019/081021-biancheng/</link>
      <pubDate>Sat, 10 Aug 2019 21:02:20 +0800</pubDate>
      <guid>/teach/2019/081021-biancheng/</guid>
      <description>&lt;p&gt;&lt;strong&gt;少儿编程&lt;/strong&gt;似乎已经在风口上，家长、教育机构 、国家都越来越重视对计算机认识和应用能力的培养。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../081021-biancheng-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;作为一个业内人士和两个男孩子的父亲，我是这样认为的：&lt;/p&gt;&#xA;&lt;p&gt;计算机作为当前的必备技能，孩子是必须更早学会的。我更愿意将所有的认识、应用技巧在小学之前全部教会他们。&lt;/p&gt;</description>
    </item>
    <item>
      <title>5G要来了...</title>
      <link>/it/2019/080922-5g/</link>
      <pubDate>Fri, 09 Aug 2019 22:48:18 +0800</pubDate>
      <guid>/it/2019/080922-5g/</guid>
      <description>&lt;p&gt;5G风开始刮，对于跑得还算畅快的4G手机该不该扔呢？&lt;/p&gt;&#xA;&lt;p&gt;5G号称下载速度快，延迟小。不过手机是否有这么强的需求？对于没有使用问题的4G手机，我倒是觉得可以购一个5G的无线路由器。应用没跟上，拿你何用，且不说5G信号在哪里，也不能说5G手机现在选择少，价格高，毕竟有钱人太多。&lt;/p&gt;</description>
    </item>
    <item>
      <title>乌镇-上海-苏州（图多注意流量）</title>
      <link>/other/2019/080823-lvyou/</link>
      <pubDate>Thu, 08 Aug 2019 23:05:20 +0800</pubDate>
      <guid>/other/2019/080823-lvyou/</guid>
      <description>&lt;p&gt;开始，一家四口开启旅游。&lt;/p&gt;&#xA;&lt;h4 id=&#34;86-乌镇&#34;&gt;8.6 乌镇&lt;/h4&gt;&#xA;&lt;p&gt;乌镇网上已经有很多图文介绍了，总体感觉还行，住在景区，时间可以更灵活。一般上午一早出行，人少，好拍照，不热。中午下午躲在空调房，晚上虽然景美，但人更美&amp;mdash;全是人。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Syncthing跨平台开源同步软件</title>
      <link>/it/2019/080722-syncthing/</link>
      <pubDate>Wed, 07 Aug 2019 22:22:11 +0800</pubDate>
      <guid>/it/2019/080722-syncthing/</guid>
      <description>&lt;p&gt;Syncthing 是一个文件连续同步软件。项目地址：https://github.com/syncthing/syncthing&lt;/p&gt;&#xA;&lt;p&gt;跨平台是因为它用Golang开发，天然的跨平台性。易于使命且安全可靠。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Syncthing跨平台开源同步软件</title>
      <link>/it/2019/080722-syncthing.sync-conflict-20241110-124336-3mgvxd6/</link>
      <pubDate>Wed, 07 Aug 2019 22:22:11 +0800</pubDate>
      <guid>/it/2019/080722-syncthing.sync-conflict-20241110-124336-3mgvxd6/</guid>
      <description>&lt;p&gt;Syncthing 是一个文件连续同步软件。项目地址：https://github.com/syncthing/syncthing&lt;/p&gt;&#xA;&lt;p&gt;跨平台是因为它用Golang开发，天然的跨平台性。易于使命且安全可靠。&lt;/p&gt;</description>
    </item>
    <item>
      <title>现代太阳能电池车顶率先登陆索纳塔混动车</title>
      <link>/other/2019/080711-che/</link>
      <pubDate>Wed, 07 Aug 2019 11:48:27 +0800</pubDate>
      <guid>/other/2019/080711-che/</guid>
      <description>&lt;p&gt;原文：https://www.cnbeta.com/articles/tech/875705.htm&lt;/p&gt;&#xA;&lt;p&gt;要了这么久的太阳能电车，终于要出来了。晒晒太阳就可以开了，虽然现在太阳能充电还是比较慢，但研究会加快，转换率会不断增加，这是未来电车的希望。&lt;/p&gt;</description>
    </item>
    <item>
      <title>首席优化官：提升内外部客户满意度、服务效率。</title>
      <link>/other/2019/080517-youhua/</link>
      <pubDate>Mon, 05 Aug 2019 17:15:50 +0800</pubDate>
      <guid>/other/2019/080517-youhua/</guid>
      <description>&lt;p&gt;“&lt;!-- raw HTML omitted --&gt;&lt;strong&gt;首席优化官&lt;/strong&gt;&lt;!-- raw HTML omitted --&gt;”，这是我首创的一个职位。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080517-youhua-01.jpg&#34; alt=&#34;首席优化官&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;产生原因&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;p&gt;在企业发展过中，已经渡过了一个初级的，以IT为解决方向的历史过程，面临越来越多的信息孤岛，面临越来越多的数据，面临多个子公司之间的整合，面临越来越多的新技术应用，面临客户的竞争及客户提出的越来越高的人性化服务需求。&lt;/p&gt;</description>
    </item>
    <item>
      <title>长寿时代，我们面临什么，需要做什么的准备</title>
      <link>/other/2019/080516-changshou/</link>
      <pubDate>Mon, 05 Aug 2019 16:36:55 +0800</pubDate>
      <guid>/other/2019/080516-changshou/</guid>
      <description>&lt;p&gt;不远的将来，人人都会活过１００岁，甚至达到１２０，１４０．我们称为长寿时代。初略估计，从３０岁到８０岁，可能你都在工作期，而退休是８０岁到１００岁的期间。我们应该如何改变现有的人生计划？&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo建立静态博客，遇到的问题与陆续解决</title>
      <link>/it/2019/080423-hugo/</link>
      <pubDate>Sun, 04 Aug 2019 23:18:05 +0800</pubDate>
      <guid>/it/2019/080423-hugo/</guid>
      <description>&lt;p&gt;随着对Hugo系统的了解和百度(仅作为搜索的代词)的深入，陆续解决了一些Hugo博客中的问题，比如评论功能，原创/转载功能显示，首页显示部份文字，首页显示缩略图等等．使用中存在的问题将陆续去研究解决．&lt;/p&gt;</description>
    </item>
    <item>
      <title>Web中运行原DOS游戏</title>
      <link>/other/2019/080422-web/</link>
      <pubDate>Sun, 04 Aug 2019 22:38:21 +0800</pubDate>
      <guid>/other/2019/080422-web/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://dos.zczc.cz/&#34;&gt;https://dos.zczc.cz/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;得益于WebAssembly,让原来经典的DOS游戏可以在浏览器中玩了，居然有四十来款。&#xA;&lt;a href=&#34;https://github.com/rwv/chinese-dos-games&#34;&gt;https://github.com/rwv/chinese-dos-games&lt;/a&gt; 这是一个中文项目，我也搭建试了完全OK。&#xA;可以使用全屏模式，感觉更象是回到了DOS时代。&#xA;之前看到操作系统也运行于web之上了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于房车</title>
      <link>/other/2019/080422-fangche/</link>
      <pubDate>Sun, 04 Aug 2019 22:09:39 +0800</pubDate>
      <guid>/other/2019/080422-fangche/</guid>
      <description>&lt;p&gt;我是一个心未动，心却想远行的人，也渴望能早日实现身心的自由。最近也比较关注房车，想通过一段时间的了解，终有一日与家人一起去＂诗与远方＂。&#xA;&lt;img src=&#34;../080422-fangche-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;我甚至设想在孩子小学开始，就购买房车，平时就找个合适的，离学校不太远的地方住，一旦有机会，就载着家人外出。即解决了孩子学习和住宿的问题，也解决更多的时间和空间。不过似乎终究还是被现实一些问题所阻。&#xA;&lt;img src=&#34;../080422-fangche-03.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>软件开发者的愿望，以及物联网的春天</title>
      <link>/it/2019/080421-yuanwang/</link>
      <pubDate>Sun, 04 Aug 2019 21:34:40 +0800</pubDate>
      <guid>/it/2019/080421-yuanwang/</guid>
      <description>&lt;p&gt;所谓万物互联，是物联网对未来的美好憧憬。然而现在各自为政，封闭自守，没有哪家能真正达到客户需求，更何况我们这种想动手的程序员。&lt;/p&gt;&#xA;&lt;p&gt;最近在计划家里的装修，想改造得更加智能，更能满足一个程序员的自我需求。除开我们还处在智能化的幼儿阶段以外，现有设备也不能满足我们的要求，即使象小米这种商城。&lt;/p&gt;</description>
    </item>
    <item>
      <title>内网穿透神器-Serveo</title>
      <link>/it/2019/080323-serveo/</link>
      <pubDate>Sat, 03 Aug 2019 23:29:10 +0800</pubDate>
      <guid>/it/2019/080323-serveo/</guid>
      <description>&lt;p&gt;Serveo 的功能：将局域网内的服务端口开放到因特网上，实现通过外网访问内网的需求；&lt;/p&gt;&#xA;&lt;p&gt;在 Setveo 官网 &lt;a href=&#34;https://serveo.net&#34;&gt;https://serveo.net&lt;/a&gt; 上的解释是：Expose local servers to the internet, No installation, no signup; 即 将本地服务向公网开发，后面是它的广告词 &amp;ndash; 不用安装，无需注册。&lt;/p&gt;</description>
    </item>
    <item>
      <title>科学家在小白菊中找到抗癌化合物</title>
      <link>/health/2019/080309-kanga/</link>
      <pubDate>Sat, 03 Aug 2019 09:44:18 +0800</pubDate>
      <guid>/health/2019/080309-kanga/</guid>
      <description>&lt;p&gt;据外媒报道，小白菊是一种常见的花，无论是在家庭花园还是在健康商店的货架上都很容易找到。几百年来，它一直被用作治疗偏头痛和其他疼痛的传统药物，尽管对于它在这方面的实际用途还是值得怀疑。但现在，&lt;strong&gt;来自伯明翰大学的研究人员已经在这种植物叶子中找到一种化合物，其可能是一种强有力的癌症杀手。&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>T型人才与企业</title>
      <link>/other/2019/080222-t/</link>
      <pubDate>Fri, 02 Aug 2019 22:12:27 +0800</pubDate>
      <guid>/other/2019/080222-t/</guid>
      <description>&lt;p&gt;今天突然看到一个讲＂T型人才＂的文章，于是赶快学习一下．&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080222-t-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;百度说：&lt;strong&gt;T型人才&lt;/strong&gt;是指按知识结构区分出来的一种新型人才类型。用字母“T”来表示他们的知识结构特点。“—”表示有广博的知识面，“|”表示知识的深度。两者的结合，既有较深的专业知识，又有广博的知识面，这类集深与博于一身的人才。这种人才结构不仅在横向上具备比较广泛的一般性知识修养，而且在纵向的专业知识上具有较深的理解能力和独到见解，较强的创新能力&lt;/p&gt;</description>
    </item>
    <item>
      <title>部署自己的Ngrok内网穿透服务</title>
      <link>/it/2019/080221-ngrok/</link>
      <pubDate>Fri, 02 Aug 2019 21:19:43 +0800</pubDate>
      <guid>/it/2019/080221-ngrok/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../080221-ngrok-01.jpg&#34; alt=&#34;ngrok&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;说明&#34;&gt;说明&lt;/h3&gt;&#xA;&lt;p&gt;其实这就是让外网用户访问内网的服务，要求就是自己需要一个公网服务端。优点是方便，缺点就是有点脱了裤子（都有公网服务器了，还需要在内网做什么？不过确实还是有提供服务的，方便网友。你说懒得上传服务器，那好吧，这算是个优点。）&lt;/p&gt;</description>
    </item>
    <item>
      <title>在线查询IP及IP信息</title>
      <link>/it/2019/080220-ip/</link>
      <pubDate>Fri, 02 Aug 2019 20:51:09 +0800</pubDate>
      <guid>/it/2019/080220-ip/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;外网IP查询  &lt;a href=&#34;https://www.ipify.org/&#34;&gt;https://www.ipify.org/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;curl &lt;a href=&#34;https://api.ipify.org&#34;&gt;https://api.ipify.org&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;IP地址信息查询 &lt;a href=&#34;https://ipapi.co/api/#specific-location-field&#34;&gt;https://ipapi.co/api/#specific-location-field&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;curl &amp;lsquo;&lt;a href=&#34;https://ipapi.co/125.71.129.228/json/&#39;&#34;&gt;https://ipapi.co/125.71.129.228/json/&#39;&lt;/a&gt;  返回json格式所有数据&lt;/p&gt;&#xA;&lt;p&gt;curl &amp;lsquo;&lt;a href=&#34;https://ipapi.co/125.71.129.228/city&#39;&#34;&gt;https://ipapi.co/125.71.129.228/city&#39;&lt;/a&gt;   返回city一项数据&lt;/p&gt;&#xA;&lt;p&gt;curl &amp;lsquo;&lt;a href=&#34;https://ipapi.co/json&#39;&#34;&gt;https://ipapi.co/json&#39;&lt;/a&gt;  获取当前客户IP及信息&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://ipapi.co/ip&#34;&gt;https://ipapi.co/ip&lt;/a&gt;   当前客户IP&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://ipapi.cn/city&#34;&gt;https://ipapi.cn/city&lt;/a&gt; 当前客户IP所在城市&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;IP地址信息查询 curl &lt;a href=&#34;https://ipsidekick.com/17.142.160.59&#34;&gt;https://ipsidekick.com/17.142.160.59&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>真实生活中的“神笔马良”</title>
      <link>/other/2019/080217-maliang/</link>
      <pubDate>Fri, 02 Aug 2019 17:39:16 +0800</pubDate>
      <guid>/other/2019/080217-maliang/</guid>
      <description>&lt;p&gt;原文地址 &lt;a href=&#34;http://www.ixiqi.com/archives/111284&#34;&gt;http://www.ixiqi.com/archives/111284&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;直接看图吧，爱心加能力。原地址有更多的图。&lt;/p&gt;&#xA;&lt;p&gt;需要绘画.创意并热爱生活.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080217-maliang01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080217-maliang-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080217-maliang-03.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080217-maliang-04.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080217-maliang-05.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080217-maliang-06.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080217-maliang-07.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080217-maliang-08.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080217-maliang-09.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080217-maliang-10.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>投资之路：电影</title>
      <link>/money/2019/080120-dianyin/</link>
      <pubDate>Thu, 01 Aug 2019 20:22:41 +0800</pubDate>
      <guid>/money/2019/080120-dianyin/</guid>
      <description>&lt;p&gt;最近电影还是比较火热的，&amp;ldquo;哪吒之魔童降世&amp;quot;短短时间破１０亿．观众好评如潮．&#xA;&lt;img src=&#34;../080120-dianyin-01.jpg&#34; alt=&#34;哪吒之魔童降世&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;我们最近也在关注电影投资，据说此片的投资者，１０万收益１００万以上．&lt;/p&gt;</description>
    </item>
    <item>
      <title>投资之路：电影</title>
      <link>/other/2019/080120-dianyin/</link>
      <pubDate>Thu, 01 Aug 2019 20:22:41 +0800</pubDate>
      <guid>/other/2019/080120-dianyin/</guid>
      <description>&lt;p&gt;最近电影还是比较火热的，&amp;ldquo;哪吒之魔童降世&amp;quot;短短时间破１０亿．观众好评如潮．&#xA;&lt;img src=&#34;../080120-dianyin-01.jpg&#34; alt=&#34;哪吒之魔童降世&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;我们最近也在关注电影投资，据说此片的投资者，１０万收益１００万以上．&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 程序中实现管道 pipeline 功能</title>
      <link>/code/2019/080116-pipe/</link>
      <pubDate>Thu, 01 Aug 2019 16:17:08 +0800</pubDate>
      <guid>/code/2019/080116-pipe/</guid>
      <description>&lt;p&gt;原地址：https://segmentfault.com/a/1190000019613407&lt;/p&gt;&#xA;&lt;p&gt;管道操作就是将上一指令的输出，作为下一指令的输入&#xA;&lt;img src=&#34;../080116-pipe-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>我的资源汇总</title>
      <link>/it/2019/080108-ziyuan/</link>
      <pubDate>Thu, 01 Aug 2019 08:02:37 +0800</pubDate>
      <guid>/it/2019/080108-ziyuan/</guid>
      <description>&lt;p&gt;2020 最新更新&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;z.scwy.net 腾图小抄&lt;/li&gt;&#xA;&lt;li&gt;i.scwy.net Ease博客&lt;/li&gt;&#xA;&lt;li&gt;a1.scwy.net 博客(家中Pi服务器)&lt;/li&gt;&#xA;&lt;li&gt;a2.scwy.net&lt;/li&gt;&#xA;&lt;li&gt;a3.scwy.net 腾图网盘(家中Pi服务器)&lt;/li&gt;&#xA;&lt;li&gt;a4.scwy.net BT下载&lt;/li&gt;&#xA;&lt;li&gt;a5.scwy.net 腾图搜索&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>腾图小抄: 我的小抄，您的小抄 cheat</title>
      <link>/code/2019/080107-xiaochao/</link>
      <pubDate>Thu, 01 Aug 2019 07:54:44 +0800</pubDate>
      <guid>/code/2019/080107-xiaochao/</guid>
      <description>&lt;p&gt;2019.2.18 添加了访问统计功能&lt;/p&gt;&#xA;&lt;p&gt;什么是小抄，看看网友的文章，或者看这个，以及我的摘抄。&lt;/p&gt;&#xA;&lt;p&gt;也就是记不住的东西都放上面，需要的时候去看去查。当然现在以linux命令为主，我会把它扩大到更多的范围。&lt;/p&gt;</description>
    </item>
    <item>
      <title>“超级食物”酸樱桃有助于提升记忆力、降低血压和胆固醇</title>
      <link>/health/2019/073121-yintao/</link>
      <pubDate>Wed, 31 Jul 2019 21:25:15 +0800</pubDate>
      <guid>/health/2019/073121-yintao/</guid>
      <description>&lt;p&gt;原地址：https://www.cnbeta.com/articles/science/873571.htm&lt;/p&gt;&#xA;&lt;p&gt;根据特拉华大学的一项新研究，酸樱桃对视觉记忆和认知表现的其他方面都有惊人的影响。研究人员研究了喝酸樱桃汁的参与者，并将他们的认知能力与给予安慰剂的参与者进行了比较; 除了其他健康益处之外，他们还发现了记忆力等多个方面的惊人改进。&lt;/p&gt;</description>
    </item>
    <item>
      <title>准备装修城里的小家</title>
      <link>/other/2019/073111-jia/</link>
      <pubDate>Wed, 31 Jul 2019 11:21:59 +0800</pubDate>
      <guid>/other/2019/073111-jia/</guid>
      <description>&lt;p&gt;因为小孩子要准备读小学，已计划搬到城里的小家．按照明年９月份入住，２个月装修期，加上６个月空房期（装修了是不能马上住的），现在开始计划如何装修，并选择装修公司．&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用Hugo自建了一个博客 http://i.scwy.net</title>
      <link>/it/2019/073022-hugo/</link>
      <pubDate>Tue, 30 Jul 2019 22:48:53 +0800</pubDate>
      <guid>/it/2019/073022-hugo/</guid>
      <description>&lt;p&gt;Hugo，我给它了一个特色中文名：&lt;strong&gt;火锅&lt;/strong&gt;，这是一个有四川特色的物件。全系统可用，系统就一个文件，符合golang绿色环保的理念．&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../072718-first-hyde-hyde.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://i.scwy.net/other/2019/0727-first&#34;&gt;http://i.scwy.net/other/2019/0727-first&lt;/a&gt;   这是关于火锅的学习．&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo建立个人博客</title>
      <link>/it/2019/073019-hugo/</link>
      <pubDate>Tue, 30 Jul 2019 19:20:29 +0800</pubDate>
      <guid>/it/2019/073019-hugo/</guid>
      <description>&lt;p&gt;这里主要是讲了内网通过本地hugo建立静态博客的思路．&lt;/p&gt;&#xA;&lt;p&gt;实际上只要有外网服务器，静态文件可以直接放服务器上．&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;在本地建立Hugo&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;运行服务器 hugo server&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;外网服务器运行mr2&lt;/p&gt;</description>
    </item>
    <item>
      <title>多项研究揭示与蓝莓相关的各种健康益处 包括降低收缩压等</title>
      <link>/health/2019/073018-lanmei/</link>
      <pubDate>Tue, 30 Jul 2019 17:59:53 +0800</pubDate>
      <guid>/health/2019/073018-lanmei/</guid>
      <description>&lt;p&gt;据外媒报道，最近发表的几项研究突出了与蓝莓相关的各种健康益处。与其他常见的水果相比，蓝莓含有最多的抗氧化剂，以及其他可以降低血压、改善记忆力，降低老年病风险的植物化学物质。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于WebAssembly</title>
      <link>/it/2019/073011-webassembly/</link>
      <pubDate>Tue, 30 Jul 2019 11:10:30 +0800</pubDate>
      <guid>/it/2019/073011-webassembly/</guid>
      <description>&lt;p&gt;WebAssembly 或者 wasm 是一个可移植、体积小、加载快并且兼容 Web 的全新格式，一直被视为解决 Web 性能低下的救星，各大主流浏览器也纷纷选择拥抱 WebAssembly 。甚至有在浏览器中运行操作系统的．&lt;/p&gt;</description>
    </item>
    <item>
      <title>企业内部地址/端口易记处理</title>
      <link>/it/2019/073009-yiji/</link>
      <pubDate>Tue, 30 Jul 2019 09:16:57 +0800</pubDate>
      <guid>/it/2019/073009-yiji/</guid>
      <description>&lt;p&gt;一般在企业内部都会部署多台服务器或者多个端口的服务，如何让内部人员记住这些类似于　http://192.168.100.1:8080　的地址是个麻烦的问题．&lt;/p&gt;&#xA;&lt;p&gt;思路：&#xA;１．关闭内网DNS请求(端口)，避免客户机寻求第三方解决(解析)&#xA;２．内部建立DNS服务器，即解决速度，防止DNS劫持，还可以让内网IP变为域名．象上面的192.168.100.1可以转为a.net&#xA;３．内部Nginx服务，将非８０端口根据域名转为80端口&#xA;４．DHCP指定内网DNS服务．&lt;/p&gt;</description>
    </item>
    <item>
      <title>闲言碎语--不断更新</title>
      <link>/other/2019/073001-xianyan/</link>
      <pubDate>Tue, 30 Jul 2019 01:20:46 +0800</pubDate>
      <guid>/other/2019/073001-xianyan/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;为什么现在比以前热？空调室外机太多导致。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;你说吃感冒药的目的，是不是为了让人多喝水。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;无知的人类还在内斗中，三体人已在路上。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;空气是一种慢性药吗？&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;手机是三体人的质子吗？&lt;/p&gt;</description>
    </item>
    <item>
      <title>利用家里老旧的平板</title>
      <link>/it/2019/072921-pinban/</link>
      <pubDate>Mon, 29 Jul 2019 21:54:12 +0800</pubDate>
      <guid>/it/2019/072921-pinban/</guid>
      <description>&lt;p&gt;电子产品更新换代很快，要不了几年，家里就堆了好几个平板．必须废物利用一下．&lt;/p&gt;&#xA;&lt;p&gt;我把一个老旧的华为平板贴到墙上．&lt;/p&gt;&#xA;&lt;p&gt;１．电子相框&#xA;&lt;img src=&#34;../072921-pinban-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;２．电子钟&#xA;&lt;img src=&#34;../072921-pinban-02.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;３．学汉字&#xA;&lt;img src=&#34;../072921-pinban-03.png&#34; alt=&#34;&#34;&gt;&#xA;　　拿来给孩子学汉字&lt;/p&gt;</description>
    </item>
    <item>
      <title>2019年，小二班暑假</title>
      <link>/teach/2019/072921-shujia/</link>
      <pubDate>Mon, 29 Jul 2019 21:47:01 +0800</pubDate>
      <guid>/teach/2019/072921-shujia/</guid>
      <description>&lt;p&gt;放暑假第二天，我们一起制定了一个计划．当然还是爸爸起草，小朋友基本以同意为主．&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;８月计划&lt;/li&gt;&#xA;&lt;li&gt;日内容计划&lt;/li&gt;&#xA;&lt;li&gt;每日时间计划&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Go的函数中得到调用者函数名</title>
      <link>/code/2019/072914-go-func/</link>
      <pubDate>Mon, 29 Jul 2019 14:48:22 +0800</pubDate>
      <guid>/code/2019/072914-go-func/</guid>
      <description>&lt;p&gt;原地址是这里，我摘抄一部份．https://colobu.com/2018/11/03/get-function-name-in-go/&lt;/p&gt;&#xA;&lt;p&gt;＂有时候在Go的函数调用的过程中，我们需要知道函数被谁调用，比如打印日志信息等。例如下面的函数，我们希望在日志中打印出调用者的名字。＂&lt;/p&gt;</description>
    </item>
    <item>
      <title>喜欢golang的理由，及go-bindata使用</title>
      <link>/code/2019/072913-go-bindata/</link>
      <pubDate>Mon, 29 Jul 2019 13:18:36 +0800</pubDate>
      <guid>/code/2019/072913-go-bindata/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;先天跨平台&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;绿色（无需依赖很多库文件）&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;天生为服务（高并发等）&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;今天试了一个go-bindata，把静态文件都打包到程序中，这样就更绿色了．一个网站开发下来，就只需要两个文件：程序＋数据库．一个小网站也就10M-20M左右（用upx打包）&lt;/p&gt;</description>
    </item>
    <item>
      <title>简单的漫画创作项目comicgen</title>
      <link>/it/2019/072713-comicgen/</link>
      <pubDate>Mon, 29 Jul 2019 13:11:24 +0800</pubDate>
      <guid>/it/2019/072713-comicgen/</guid>
      <description>&lt;p&gt;项目地址：https://github.com/gramener/comicgen&lt;/p&gt;&#xA;&lt;p&gt;它利用头＼手＼身体等各部位的组合，形成动画人物．可以搞些简单的漫画．实际上还发现国外有些线上生成漫画的．&lt;/p&gt;</description>
    </item>
    <item>
      <title>linux命令行下的base64</title>
      <link>/it/2019/072912-linux-base64/</link>
      <pubDate>Mon, 29 Jul 2019 11:59:03 +0800</pubDate>
      <guid>/it/2019/072912-linux-base64/</guid>
      <description>&lt;p&gt;偶尔对图片进行base64处理，linux下面可以直接使用 base64 1.jpg&lt;/p&gt;&#xA;&lt;p&gt;对字符串base64　echo &amp;lsquo;Hello World&amp;rsquo; | base64&lt;/p&gt;&#xA;&lt;p&gt;直接输入base64，则可以接收命令行，直到Ctrl+D．&lt;/p&gt;</description>
    </item>
    <item>
      <title>今夜，车上，窗外闪电暴雨</title>
      <link>/other/2019/072900-jinye/</link>
      <pubDate>Mon, 29 Jul 2019 00:38:10 +0800</pubDate>
      <guid>/other/2019/072900-jinye/</guid>
      <description>&lt;p&gt;今日，威远，车上．&lt;/p&gt;&#xA;&lt;p&gt;窗外闪电暴雨，下雨之前３１度．热&amp;hellip;..&lt;/p&gt;&#xA;&lt;p&gt;车停在了公厕旁边一点，附近有高高的路灯，可惜找不到一个暗点的地方．&lt;/p&gt;&#xA;&lt;p&gt;边听喜马拉雅，边写点博客．研究一下hugo．&lt;/p&gt;</description>
    </item>
    <item>
      <title>go版百度在线车牌识别</title>
      <link>/code/2019/072900-go-chepai/</link>
      <pubDate>Mon, 29 Jul 2019 00:32:04 +0800</pubDate>
      <guid>/code/2019/072900-go-chepai/</guid>
      <description>&lt;p&gt;如果标准输入有内容（表示通过命令行输出了数据），则直接上传分析．否则通过参数base64图片&lt;/p&gt;&#xA;&lt;p&gt;现在百度每日有限制，需要寻找更好的方法．(现在暂时的想法是多申请两个帐号，比如５个，一天就１０００次，估计够了)&lt;/p&gt;</description>
    </item>
    <item>
      <title>PLC与多终端控制和通信</title>
      <link>/ai/2019/0727-plc/</link>
      <pubDate>Sat, 27 Jul 2019 18:44:22 +0800</pubDate>
      <guid>/ai/2019/0727-plc/</guid>
      <description>&lt;p&gt;PLC大量应用于工业自动化控制，在与传统IT及网络应用中，如何连接和控制？&lt;/p&gt;&#xA;&lt;p&gt;我考虑的方案是：利用modbus协议，通过中间设备（例如RaspberryPi）作为载体，完成与现有软硬件的通信和控制．&lt;/p&gt;</description>
    </item>
    <item>
      <title>创业项目：健康桑叶面</title>
      <link>/money/2019/070209-sangye/</link>
      <pubDate>Tue, 02 Jul 2019 09:10:16 +0800</pubDate>
      <guid>/money/2019/070209-sangye/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../070209-sangye-03.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;商业发展方向&#34;&gt;商业发展方向&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;桑叶面&lt;/li&gt;&#xA;&lt;li&gt;桑树健康制品&lt;/li&gt;&#xA;&lt;li&gt;绿色食品（肉、果、品）&lt;/li&gt;&#xA;&lt;li&gt;康养、健游&lt;/li&gt;&#xA;&lt;li&gt;健康产业平台&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;发展愿景&#34;&gt;发展愿景&lt;/h3&gt;&#xA;&lt;p&gt;企业发掘一条以健康为主线的产业，带动以当地为基础的群众，健康的富起来。&lt;/p&gt;&#xA;&lt;h3 id=&#34;管理理念&#34;&gt;管理理念&lt;/h3&gt;&#xA;&lt;p&gt;让人人为自己工作&#xA;让人人为健康自己、健康他人工作&#xA;把1%变得大于100%&#xA;以共同利益带动更多的人健康持续发展&lt;/p&gt;</description>
    </item>
    <item>
      <title>创业项目：健康桑叶面</title>
      <link>/other/2019/070209-sangye/</link>
      <pubDate>Tue, 02 Jul 2019 09:10:16 +0800</pubDate>
      <guid>/other/2019/070209-sangye/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../070209-sangye-03.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;商业发展方向&#34;&gt;商业发展方向&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;桑叶面&lt;/li&gt;&#xA;&lt;li&gt;桑树健康制品&lt;/li&gt;&#xA;&lt;li&gt;绿色食品（肉、果、品）&lt;/li&gt;&#xA;&lt;li&gt;康养、健游&lt;/li&gt;&#xA;&lt;li&gt;健康产业平台&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;发展愿景&#34;&gt;发展愿景&lt;/h3&gt;&#xA;&lt;p&gt;企业发掘一条以健康为主线的产业，带动以当地为基础的群众，健康的富起来。&lt;/p&gt;&#xA;&lt;h3 id=&#34;管理理念&#34;&gt;管理理念&lt;/h3&gt;&#xA;&lt;p&gt;让人人为自己工作&#xA;让人人为健康自己、健康他人工作&#xA;把1%变得大于100%&#xA;以共同利益带动更多的人健康持续发展&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux上的绿色PostgreSQL</title>
      <link>/it/2019/080218-postgresql/</link>
      <pubDate>Thu, 27 Jun 2019 09:46:14 +0800</pubDate>
      <guid>/it/2019/080218-postgresql/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../080218-postgresql-01.jpg&#34; alt=&#34;postgresql&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;有洁癖，比较喜欢绿色的东西．&lt;/p&gt;&#xA;&lt;h2 id=&#34;下载&#34;&gt;下载&lt;/h2&gt;&#xA;&lt;p&gt;首先从下面的链接地址下载对应平台和版本的安装包。&#xA;&lt;a href=&#34;https://www.enterprisedb.com/download-postgresql-binaries&#34;&gt;https://www.enterprisedb.com/download-postgresql-binaries&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装&#34;&gt;安装&lt;/h2&gt;&#xA;&lt;p&gt;以普通用户运行下面命令&#xA;解压压缩包到/opt目录下，如果对/opt目录没有写权限，先增加写权限再运行下面命令。&#xA;$ tar zxvf postgresql-9.6.10-1-linux-x64-binaries.tar.gz&lt;/p&gt;</description>
    </item>
    <item>
      <title>据说Pi4来了(RaspberryPi)</title>
      <link>/it/2019/073009-pi4/</link>
      <pubDate>Mon, 24 Jun 2019 21:22:00 +0800</pubDate>
      <guid>/it/2019/073009-pi4/</guid>
      <description>&lt;p&gt;今天看到新闻上说树莓派４来了，各大网站也报导了．https://www.raspberrypi.org．&lt;/p&gt;&#xA;&lt;p&gt;比较早就使用了，家里的服务器是Pi3的，一直工作得很好．挂着一般web服务，自动化一些东西，在线书籍，在线电影，一些服务&lt;/p&gt;</description>
    </item>
    <item>
      <title>vlang,v语言</title>
      <link>/it/2019/073009-v/</link>
      <pubDate>Sun, 23 Jun 2019 07:49:23 +0800</pubDate>
      <guid>/it/2019/073009-v/</guid>
      <description>&lt;p&gt;无意中看到．https://vlang.io/，还有网友很积极的来了个中文网　https://www.v-lang.cn/&lt;/p&gt;&#xA;&lt;p&gt;安装：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    mkdir -p ~/code &amp;amp;&amp;amp; cd ~/code  # ~/code directory has to be used (it&amp;#39;s a temporary limitation)&#xA;    git clone https://github.com/vlang/v&#xA;    cd v/compiler&#xA;    wget https://vlang.io/v.c # Download the V compiler&amp;#39;s source translated to C&#xA;    cc -w -o vc v.c           # Build it with Clang or GCC&#xA;    ./vc -o v .               # Use the resulting V binary to build V from V source&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;文档：https://vlang.io/docs&lt;/p&gt;</description>
    </item>
    <item>
      <title>实现类似nginx的命令行参数传入</title>
      <link>/it/2019/073009-nginx/</link>
      <pubDate>Wed, 19 Jun 2019 21:57:10 +0800</pubDate>
      <guid>/it/2019/073009-nginx/</guid>
      <description>&lt;p&gt;我想实现以下的效果：&lt;/p&gt;&#xA;&lt;p&gt;当nginx已运行后，你可以运行nginx -reload xxxx来重新载入配置文件。实现不中断程序，而向程序传达指令。&lt;/p&gt;&#xA;&lt;p&gt;现在考虑的实现方法：&lt;/p&gt;</description>
    </item>
    <item>
      <title>懒人做菜，想做一个这样的程序</title>
      <link>/other/2019/073011-cai/</link>
      <pubDate>Sat, 15 Jun 2019 10:04:37 +0800</pubDate>
      <guid>/other/2019/073011-cai/</guid>
      <description>&lt;p&gt;我是一个懒人，不擅于做菜。我相信这种人很多。：）&#xA;但不会和不想，并不代表可以不做，外卖始终不卫生.不经济.不营养等&#xA;所谓吃喝玩乐，吃还是很重要的．&#xA;如何真正无忧的做菜，且懒得有营养，懒得有高度．毕竟世界是靠懒人发展状大的．&lt;/p&gt;</description>
    </item>
    <item>
      <title>XmindZEN导出无水印</title>
      <link>/it/2019/073011-xmind/</link>
      <pubDate>Thu, 30 May 2019 09:56:47 +0800</pubDate>
      <guid>/it/2019/073011-xmind/</guid>
      <description>&lt;p&gt;2019.7.5&lt;/p&gt;&#xA;&lt;p&gt;简单的修改也可以去水印&lt;/p&gt;&#xA;&lt;p&gt;找到目录，可能你的类似/opt/XMind ZEN/resources/app/out/imgs，&lt;/p&gt;&#xA;&lt;p&gt;这是水印图片目录，删除这三个文件：pdf-footer-zh-CN.svg png-watermark-zh-CN.svg print-watermark-zh-CN.svg&lt;/p&gt;</description>
    </item>
    <item>
      <title>vugu，golang面向WebAssembly的WebUI库</title>
      <link>/code/2019/073011-vugu/</link>
      <pubDate>Wed, 10 Apr 2019 11:29:29 +0800</pubDate>
      <guid>/code/2019/073011-vugu/</guid>
      <description>&lt;p&gt;Vugu是一个用Go编写的面向WebAssembly的Web UI实验库&lt;br&gt;&#xA;开源：github.com/vugu/vugu&lt;br&gt;&#xA;官网在这里：https://www.vugu.org/&lt;br&gt;&#xA;文档在这里：https://www.vugu.org/doc&lt;br&gt;&#xA;也可以即时运行 &lt;a href=&#34;https://play.vugu.org&#34;&gt;https://play.vugu.org&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>汽车需要柔性前挡显示屏</title>
      <link>/it/2019/080220-pin/</link>
      <pubDate>Tue, 02 Apr 2019 21:21:25 +0800</pubDate>
      <guid>/it/2019/080220-pin/</guid>
      <description>&lt;p&gt;想像一下，你的汽车前挡风玻璃是一整块的柔性屏(权且称它为前挡屏)，它看起来和现在的玻璃一样，不过实际上是通过车顶的高清摄像头传回的视频，通过真正的车载电脑加工以后，叠加相关信息，同时显示在屏幕上的。左中右后视镜都取消吧，前挡屏可以根据你的人眼跟踪，按需显示车的任何一个角度及周边情况。&lt;/p&gt;</description>
    </item>
    <item>
      <title>鄙视人造月亮及此设想的科学家</title>
      <link>/other/2019/080220-yueliang/</link>
      <pubDate>Sat, 30 Mar 2019 23:29:59 +0800</pubDate>
      <guid>/other/2019/080220-yueliang/</guid>
      <description>&lt;p&gt;新闻所谓中国上空将升起人造月亮，个人严重鄙视，像鄙视百度一样，但危害比百度更大。&#xA;&lt;img src=&#34;../080220-yueliang-01.jpg&#34; alt=&#34;&#34;&gt;&#xA;日出而作，日落而息，人造月亮违背自然规律，动物、植物都得不到休息，这是作死的节奏。专家就只知道一年节约多少度电。&lt;/p&gt;</description>
    </item>
    <item>
      <title>树莓派rtmp播放视频</title>
      <link>/it/2019/080221-pi/</link>
      <pubDate>Fri, 29 Mar 2019 22:35:13 +0800</pubDate>
      <guid>/it/2019/080221-pi/</guid>
      <description>&lt;p&gt;一个rtmp服务端 &lt;a href=&#34;https://github.com/gwuhaolin/livego&#34;&gt;https://github.com/gwuhaolin/livego&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;1 启动 livego 服务&#xA;2 上行推流：通过 RTMP 协议把视频流推送到 rtmp://localhost:1935/live/movie，&#xA;例如使用 ffmpeg -re -i demo.flv -c copy -f flv rtmp://localhost:1935/live/movie 推送；&#xA;3 下行播放：支持以下三种播放协议，播放地址如下：&#xA;RTMP:rtmp://localhost:1935/live/movie&#xA;FLV:http://127.0.0.1:7001/live/movie.flv&#xA;HLS:http://127.0.0.1:7002/live/movie.m3u8&lt;/p&gt;</description>
    </item>
    <item>
      <title>空气污染可能正杀死你的精子，也就是人类</title>
      <link>/health/2019/080221-kongqi/</link>
      <pubDate>Wed, 27 Mar 2019 10:58:23 +0800</pubDate>
      <guid>/health/2019/080221-kongqi/</guid>
      <description>&lt;p&gt;原文地址：https://www.cnbeta.com/articles/science/831381.htm&lt;/p&gt;&#xA;&lt;p&gt;原标题是：空气污染可能正杀死你的精子。也就是坏空气正在杀死人类，也就是人类在自杀。试管婴儿是越来越多人了，越来越多夫妻不孕不育。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang库文件收集</title>
      <link>/code/2019/080221-ku/</link>
      <pubDate>Tue, 12 Mar 2019 11:58:18 +0800</pubDate>
      <guid>/code/2019/080221-ku/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go get github.com/mitchellh/gox                      golang交叉编译环境&#xA;go get github.com/astaxie/beego&#xA;go get github.com/beego/bee&#xA;go get github.com/bclicn/color                       控制台颜色控制&#xA;go get github.com/sosedoff/pgweb                     通过Web操作Postgresql数据库&#xA;       go run main.go --bind=0.0.0.0 --listen=8080   运行Web并指定IP和端口&#xA;go get github.com/erning/gorun                       象脚本一样运行go&#xA;       #!/usr/bin/env gorun&#xA;       package main&#xA;       func main() {&#xA;           println(&amp;#34;Hello world!&amp;#34;)&#xA;       }&#xA;&#xA;       $ chmod +x hello.go&#xA;       $ ./hello.go&#xA;       Hello world!&#xA;go get github.com/gizak/termui                       基于控制台的界面&#xA;go get github.com/jianxinio/captcha                  验证码&#xA;go get -v github.com/codeskyblue/gohttpserver        不错的文件服务器，有些功能&#xA;        ./gohttpserver -r ./ --addr :8000 --upload   指定端口和目录，允许上传       &#xA;go get github.com/silenceper/gowatch                 监控目录，实现热编译&#xA;go get github.com/go-vgo/robotgo                     自动化模拟&#xA;go get https://github.com/bmizerany/pq               postgresql连接库&#xA;go get github.com/rakyll/boom                        网站压力测试工具&#xA;go get github.com/rakyll/hey                         网站压力测试工具（楼上被替换为这个）&#xA;go get github.com/stianeikeland/go-rpio              操作Pi的GPIO端口&#xA;go get github.com/nathan-osman/go-rpigpio&#xA;go get github.com/dmagyar/dnsproxy                   DNS服务器&#xA;删除调试符号：go build -ldflags “-s -w”&#xA;关闭内联优化：go build -gcflags “-N -l”&#xA;go get https://github.com/PuerkitoBio/goquery        类似jquery，用于分析网页内容&#xA;go get github.com/jroimartin/gocui                   字符界面&#xA;go get -u github.com/jaksi/sshesame                  ssh蜜罐&#xA;go get -u github.com/eliukblau/pixterm               命令行中显示图形&#xA;github.com/carlmjohnson/heffalump                    一个蜜罐？&#xA;github.com/mailslurper/mailslurper                   邮件服务器&#xA;https://github.com/liuxp0827/govpr                   数字声纹&#xA;https://github.com/hoisie/web                        一个极简单web框架&#xA;https://github.com/shenfeng/http-watcher             web服务器，实现文件更改后自动刷新&#xA;https://github.com/dynport/gossh                     ssh通信实现&#xA;http://git.oschina.net/fuxiaohei/fuxiaohei-go        博客&#xA;https://github.com/eggfly/bcsgo                      百度云存储服务Go语言SDK&#xA;http://git.oschina.net/visualfc/goqt                 Qt&#xA;https://github.com/donnie4w/json4g                   json解析&#xA;go get github.com/goftp/server                       ftp服务器&#xA;github.com/goftp/ftpd                                利用以上库实现FTP服务&#xA;https://github.com/silenceper/wechat                 微信服务框架&#xA;https://github.com/skip2/go-qrcode                   生成二维码&#xA;github.com/yudai/gotty                               web方式的tty&#xA;go get -v github.com/kshvmdn/fsql/...                用sql语句查询文件&#xA;go get github.com/argandas/goduino                   用于控制arduino,通过Firmata协议&#xA;go get github.com/kraman/go-firmata                  同上&#xA;go get github.com/dgrijalva/jwt-go                   jwt: json-web-token&#xA;go get github.com/mikemintang/go-curl                curl请求库&#xA;https://github.com/codyguo/godaemon                  后台方式运行golang&#xA;github.com/gchaincl/httplab                          命令行http工具&#xA;github.com/Masterminds/glide                         包管理器&#xA;github.com/Comdex/imgo                               图形处理库&#xA;go get -u -v github.com/kardianos/govendor           包管理&#xA;go get -u github.com/golang/dep/cmd/dep              官方包管理&#xA;go get github.com/Masterminds/glide                  包管理&#xA;github.com/huin/goserial                             串口通信&#xA;github.com/tarm/goserial                             串口通信&#xA;github.com/lxn/walk                                  图形界面&#xA;github.com/a8m/play                                  命令行上的游戏&#xA;github.com/cespare/go-tetris/tetris                  以上库调用了它，它才是真正的游戏内容&#xA;github.com/xlab/android-go                           go用于编写android程序&#xA;github.com/phachon/go-logger                         日志功能&#xA;github.com/hybridgroup/gocv                          opencv视觉包&#xA;github.com/timest/gomanuf                            根据MAC查询所属公司品牌&#xA;github.com/signintech/gopdf                          生成PDF且支持中文&#xA;github.com/schollz/croc                              两台电脑传文件&#xA;github.com/mitchellh/gox                             交叉编译&#xA;github.com/libp2p/go-reuseport                       端口复用&#xA;github.com/inconshreveable/mousetrap                 用于判断程序是否为windows下双击运行（用于避免无参数启动）&#xA;gitee.com/ying32/govcl                               一个GUI&#xA;go get -u github.com/mojocn/base64Captcha            验证码生成&#xA;github.com/gordonklaus/portaudio                     音频处理&#xA;github.com/netxfly/x-crack                           弱口令扫描&#xA;github.com/rivo/tview                               命令行下的界面，看起不错&#xA;github.com/kkdai/EddystoneScanner                   AP扫描&#xA;github.com/kkdai/beacon                             AP虚拟&#xA;github.com/st3fan/tinydoh                           小型DNS服务器&#xA;github.com/nsf/termbox-go                           字符界面控制&#xA;github.com/balacode/one-file-pdf                    pdf生成&#xA;github.com/ihexxa/quickshare                        文件共享&#xA;github.com/iikira/BaiduPCS-Go                       百度云盘命令行，不限速(也不行了，被百度搞死了，可以学习学习方法)&#xA;github.com/gen2brain/goiv                           看图工具&#xA;github.com/radovskyb/go-packages                    很多包使用例子&#xA;github.com/rk/go-cron                               定时运行&#xA;github.com/tenta-browser/tenta-dns                  DNS服务器&#xA;github.com/jaksi/sshesame                           SSH密罐&#xA;github.com/icexin/gocraft                           Minecraft游戏&#xA;github.com/campoy/flappy-gopher                     愤怒的小鸟&#xA;github.com/hashicorp/mdns                           mDNS&#xA;github.com/netxfly/xsec-dns-proxy                   DNS代理服务器&#xA;github.com/domac/tinydump                           基于golang的嗅探抓包工具, 类似tcpdump&#xA;github.com/mjibson/esc                             压缩静态文件到go&#xA;github.com/chenqinghe/baidu-ai-go-sdk              百度API，包括车牌识别等&#xA;github.com/iwannay/jiacrontab                      提供可视化界面的定时任务管理工具&#xA;github.com/DyegoCosta/snake-game                   游戏&#xA;github.com/dgrijalva/jwt-go                        jwt&#xA;https://github.com/jinzhu/gorm                     GORM是golang的一个ORM，封装了很多常用方法。在相关数据库操作系统中方便使用。（它的中文文档：http://gorm.book.jasperxu.com/ ）&#xA;github.com/Humpheh/goboy                          GameBoy彩色模拟器&#xA;github.com/chenjiandongx/go-echarts              可视化图表库&#xA;github.com/DimitarPetrov/stegify                 将数据隐藏于图自片中&#xA;github.com/soease/stegify                        将其克隆到了我的工程中&#xA;github.com/inconshreveable/ngrok                 内网穿透服务&#xA;https://github.com/andlabs/ui                    GUI，软件界面，需要sudo apt-get install libgtk-3-dev&#xA;github.com/sjqzhang/go-fastdfs              基于http协议的分布式文件系统&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>从Jekyll迁移到Hugo</title>
      <link>/it/2019/migrate-from-jekyll/</link>
      <pubDate>Sun, 10 Mar 2019 22:48:53 +0800</pubDate>
      <guid>/it/2019/migrate-from-jekyll/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Ease&lt;/strong&gt;: 主要看Hugo中md的使用方法，内容已过时了，也不用浪费时间去翻译了． :)&lt;/p&gt;&#xA;&lt;h2 id=&#34;移动内容到static&#34;&gt;移动内容到&lt;code&gt;static&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Jekyll has a rule that any directory not starting with &lt;code&gt;_&lt;/code&gt; will be copied as-is to the &lt;code&gt;_site&lt;/code&gt; output. Hugo keeps all static content under &lt;code&gt;static&lt;/code&gt;. You should therefore move it all there.&#xA;With Jekyll, something that looked like&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pi linux命令行字符大小设置</title>
      <link>/it/2019/031011-fontsize/</link>
      <pubDate>Sun, 10 Mar 2019 11:44:18 +0800</pubDate>
      <guid>/it/2019/031011-fontsize/</guid>
      <description>&lt;p&gt;在某些显示终端上，字符确实太小了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://unix.stackexchange.com/questions/49779/can-i-change-the-font-of-terminal&#34;&gt;https://unix.stackexchange.com/questions/49779/can-i-change-the-font-of-terminal&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;/etc/default/console-setup 此文件中编辑&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;CHARMAP=”UTF-8”&#xA;CODESET=”Lat7”&#xA;FONTFACE=”Terminus”&#xA;FONTSIZE=”28x14”&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这些字体应该在文件中存在 ls /usr/share/consolefonts&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pi命令行字符大小设置 </title>
      <link>/it/2019/080221-piziti/</link>
      <pubDate>Sun, 10 Mar 2019 11:44:18 +0800</pubDate>
      <guid>/it/2019/080221-piziti/</guid>
      <description>&lt;p&gt;在某些显示终端上，字符确实太小了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://unix.stackexchange.com/questions/49779/can-i-change-the-font-of-terminal&#34;&gt;https://unix.stackexchange.com/questions/49779/can-i-change-the-font-of-terminal&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;/etc/default/console-setup 此文件中编辑&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;CHARMAP=”UTF-8”&#xA;CODESET=”Lat7”&#xA;FONTFACE=”Terminus”&#xA;FONTSIZE=”28x14”&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这些字体应该在文件中存在 ls /usr/share/consolefonts&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang使用Modbus通讯</title>
      <link>/code/2019/073009-modbus/</link>
      <pubDate>Thu, 07 Mar 2019 18:30:11 +0800</pubDate>
      <guid>/code/2019/073009-modbus/</guid>
      <description>&lt;p&gt;通过golang使用modbus协议通讯，这有利于将控制系统扩展到多个平台，实现跨平台的终端控制。例如Linux、Windows、Unix、手机、平板、浏览器，或许还包括我的语音控制器(语音-&amp;gt;文字-&amp;gt;指令-&amp;gt;控制)。这样也可以进一步的实现远程控制或者实时通过远程方式了解车间情况。&lt;/p&gt;</description>
    </item>
    <item>
      <title>汇川AM401与Pro-face连接</title>
      <link>/ai/2019/073009-huichuan/</link>
      <pubDate>Mon, 04 Mar 2019 17:18:23 +0800</pubDate>
      <guid>/ai/2019/073009-huichuan/</guid>
      <description>&lt;p&gt;初次使用触摸屏，眼前一片漆黑。网上更是找不到这两个连接的资料，问了官网客服也没有。累&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;AM401和AM600应该都是一样的。&lt;/p&gt;&#xA;&lt;p&gt;AM401 PLC通过以太网与Pro-face HMI使用Modbus通信。ModbusTCP默认使用502端口。HMI作服务（主站），PLC作客户（从站）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我也学习Golang的HTTP中间件机制 </title>
      <link>/code/2019/080221-zhongjianjian/</link>
      <pubDate>Sat, 02 Mar 2019 09:52:51 +0800</pubDate>
      <guid>/code/2019/080221-zhongjianjian/</guid>
      <description>&lt;p&gt;这是原地址：https://huoding.com/2019/01/31/716&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080221-zhongjianjian-01.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;一般代码使用中间件是这样的：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA; &#xA;import (&#xA;&#x9;&amp;#34;net/http&amp;#34;&#xA;)&#xA; &#xA;func foo(next http.HandlerFunc) http.HandlerFunc {&#xA;&#x9;return func(w http.ResponseWriter, r *http.Request) {&#xA;&#x9;&#x9;w.Write([]byte(&amp;#34;foo(&amp;#34;))&#xA;&#x9;&#x9;next(w, r)&#xA;&#x9;&#x9;w.Write([]byte(&amp;#34;)&amp;#34;))&#xA;&#x9;}&#xA;}&#xA; &#xA;func bar(next http.HandlerFunc) http.HandlerFunc {&#xA;&#x9;return func(w http.ResponseWriter, r *http.Request) {&#xA;&#x9;&#x9;w.Write([]byte(&amp;#34;bar(&amp;#34;))&#xA;&#x9;&#x9;next(w, r)&#xA;&#x9;&#x9;w.Write([]byte(&amp;#34;)&amp;#34;))&#xA;&#x9;}&#xA;}&#xA; &#xA;func test(w http.ResponseWriter, r *http.Request) {&#xA;&#x9;w.Write([]byte(&amp;#34;test&amp;#34;))&#xA;}&#xA; &#xA;func main() {&#xA;&#x9;http.Handle(&amp;#34;/&amp;#34;, foo(bar(test)))&#xA;&#x9;http.ListenAndServe(&amp;#34;:8080&amp;#34;, nil)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;作者修改后是这样的：&lt;/p&gt;</description>
    </item>
    <item>
      <title>谷歌智慧城市</title>
      <link>/ai/2019/080221-zhihui/</link>
      <pubDate>Sat, 02 Mar 2019 09:10:21 +0800</pubDate>
      <guid>/ai/2019/080221-zhihui/</guid>
      <description>&lt;p&gt;这是原文，“谷歌智慧城市再曝光 这里是六个疯狂的建造细节”&#xA;&lt;a href=&#34;https://www.cnbeta.com/articles/tech/823147.htm&#34;&gt;https://www.cnbeta.com/articles/tech/823147.htm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://baike.baidu.com/item/%E6%99%BA%E6%85%A7%E5%9F%8E%E5%B8%82&#34;&gt;这里是百度百科的智慧城市解释&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;不知道百度在干嘛，可能还在优化竞价排名算法和广告算法吧。虽然谈不上谷歌是一家伟大的公司，但创新和对新东西的探索，还真不是普通公司可比的。看看它的智慧城市，科幻会慢慢实现的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于股票的关注点</title>
      <link>/money/2019/080421-gupiao/</link>
      <pubDate>Fri, 22 Feb 2019 10:57:10 +0800</pubDate>
      <guid>/money/2019/080421-gupiao/</guid>
      <description>&lt;p&gt;我们都是一些小散户，没有多少钱，也没有多少专业技能，更没有多少小道消息。因此只能把握一些看得见的大趋势。&lt;/p&gt;&#xA;&lt;p&gt;现在我关注的方向是一些可能会导致大变革或大发展的方向，比如&lt;strong&gt;人工智能&lt;/strong&gt;、&lt;strong&gt;基因技术&lt;/strong&gt;、&lt;strong&gt;纳米技术&lt;/strong&gt;、&lt;strong&gt;电池技术&lt;/strong&gt;、&lt;strong&gt;物联网&lt;/strong&gt;。这些都是可能导致翻天覆地变化的东西。因此在一个时期内，需要在此类的股票上设伏。当然，这种大趋势必须放大到十年以上的时间来看。长期持有不是讲它们多有价值，而是有希望通过突破，达到投资翻若干倍的目的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于股票的关注点</title>
      <link>/other/2019/080421-gupiao/</link>
      <pubDate>Fri, 22 Feb 2019 10:57:10 +0800</pubDate>
      <guid>/other/2019/080421-gupiao/</guid>
      <description>&lt;p&gt;我们都是一些小散户，没有多少钱，也没有多少专业技能，更没有多少小道消息。因此只能把握一些看得见的大趋势。&lt;/p&gt;&#xA;&lt;p&gt;现在我关注的方向是一些可能会导致大变革或大发展的方向，比如&lt;strong&gt;人工智能&lt;/strong&gt;、&lt;strong&gt;基因技术&lt;/strong&gt;、&lt;strong&gt;纳米技术&lt;/strong&gt;、&lt;strong&gt;电池技术&lt;/strong&gt;、&lt;strong&gt;物联网&lt;/strong&gt;。这些都是可能导致翻天覆地变化的东西。因此在一个时期内，需要在此类的股票上设伏。当然，这种大趋势必须放大到十年以上的时间来看。长期持有不是讲它们多有价值，而是有希望通过突破，达到投资翻若干倍的目的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《超人诞生-人类增强的新技术》</title>
      <link>/other/2019/080221-chaoren/</link>
      <pubDate>Tue, 12 Feb 2019 14:14:43 +0800</pubDate>
      <guid>/other/2019/080221-chaoren/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../080221-chaoren-01.jpg&#34; alt=&#34;&#34;&gt;&#xA;虽然书名和书皮看起来满酷，但内容写得有点不知所以。&#xA;作者引用不少科幻和动画的内容，借以引发对“超人”或人类增强的思考。我也一直认为科幻开拓了我们的思维。&#xA;实际生活中，人类一直在努力实现着自我增强，从“工具”的应用到现在形形色色的物品，比如手机，它们都大大增强了人类的身体本来的技能。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一些可能用到的linux脚本</title>
      <link>/it/2019/080221-script/</link>
      <pubDate>Tue, 12 Feb 2019 11:15:51 +0800</pubDate>
      <guid>/it/2019/080221-script/</guid>
      <description>&lt;p&gt;批量修改文件时间&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash&#xA;&#xA;for ((i=1;i&amp;lt;650;i++))&#xA;do&#xA;   echo $i&#xA;   sleep 1&#xA;   touch $i_*.mp3&#xA;done&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;p&gt;一个守护脚本，避免程序挂掉&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/bash&#xA;while((0==0))&#xA;do&#xA;   sn=`ps -ef | grep ./snowboy | grep -v grep |awk &amp;#39;{print $2}&amp;#39;`&#xA;   #echo $sn&#xA;   if [ &amp;#34;${sn}&amp;#34; = &amp;#34;&amp;#34; ] #如果为空,表示进程未启动&#xA;   then&#xA;         nohup ./snowboy &amp;amp;&#xA;      echo start ok !&#xA;   else&#xA;         echo running&#xA;   fi&#xA;   sleep 5&#xA;done&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>golang录音wav</title>
      <link>/code/2019/073115-luyin/</link>
      <pubDate>Sun, 10 Feb 2019 21:36:18 +0800</pubDate>
      <guid>/code/2019/073115-luyin/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA; &#xA; /*&#xA;  #include &amp;lt;stdio.h&amp;gt;&#xA;  #include &amp;lt;unistd.h&amp;gt;&#xA;  #include &amp;lt;termios.h&amp;gt;&#xA;  char getch(){&#xA;      char ch = 0;&#xA;      struct termios old = {0};&#xA;      fflush(stdout);&#xA;      if( tcgetattr(0, &amp;amp;old) &amp;lt; 0 ) perror(&amp;#34;tcsetattr()&amp;#34;);&#xA;      old.c_lflag &amp;amp;= ~ICANON;&#xA;      old.c_lflag &amp;amp;= ~ECHO;&#xA;      old.c_cc[VMIN] = 1;&#xA;      old.c_cc[VTIME] = 0;&#xA;      if( tcsetattr(0, TCSANOW, &amp;amp;old) &amp;lt; 0 ) perror(&amp;#34;tcsetattr ICANON&amp;#34;);&#xA;      if( read(0, &amp;amp;ch,1) &amp;lt; 0 ) perror(&amp;#34;read()&amp;#34;);&#xA;      old.c_lflag |= ICANON;&#xA;      old.c_lflag |= ECHO;&#xA;      if(tcsetattr(0, TCSADRAIN, &amp;amp;old) &amp;lt; 0) perror(&amp;#34;tcsetattr ~ICANON&amp;#34;);&#xA;      return ch;&#xA;  }&#xA; */&#xA; import &amp;#34;C&amp;#34;&#xA; &#xA; // stackoverflow.com/questions/14094190/golang-function-similar-to-getchar&#xA; &#xA; import (&#xA;         &amp;#34;fmt&amp;#34;&#xA;         &amp;#34;github.com/gordonklaus/portaudio&amp;#34;&#xA;         wave &amp;#34;github.com/zenwerk/go-wave&amp;#34;&#xA;         &amp;#34;math/rand&amp;#34;&#xA;         &amp;#34;os&amp;#34;&#xA;         &amp;#34;strings&amp;#34;&#xA;         &amp;#34;time&amp;#34;&#xA; )&#xA; &#xA; func errCheck(err error) {&#xA; &#xA;         if err != nil {&#xA;                 panic(err)&#xA;         }&#xA; }&#xA; &#xA; func main() {&#xA; &#xA;         if len(os.Args) != 2 {&#xA;                 fmt.Printf(&amp;#34;Usage : %s &amp;lt;audiofilename.wav&amp;gt;\n&amp;#34;, os.Args[0])&#xA;                 os.Exit(0)&#xA;         }&#xA; &#xA;         audioFileName := os.Args[1]&#xA; &#xA;         fmt.Println(&amp;#34;Recording. Press ESC to quit.&amp;#34;)&#xA; &#xA;         if !strings.HasSuffix(audioFileName, &amp;#34;.wav&amp;#34;) {&#xA;                 audioFileName += &amp;#34;.wav&amp;#34;&#xA;         }&#xA;         waveFile, err := os.Create(audioFileName)&#xA;         errCheck(err)&#xA; &#xA;         // www.people.csail.mit.edu/hubert/pyaudio/  - under the Record tab&#xA;         inputChannels := 1&#xA;         outputChannels := 0&#xA;         sampleRate := 44100&#xA;         framesPerBuffer := make([]byte, 64)&#xA; &#xA;         // init PortAudio&#xA; &#xA;         portaudio.Initialize()&#xA;         //defer portaudio.Terminate()&#xA; &#xA;         stream, err := portaudio.OpenDefaultStream(inputChannels, outputChannels, float64(sampleRate), len(framesPerBuffer), framesPerBuffer)&#xA;         errCheck(err)&#xA;         //defer stream.Close()&#xA; &#xA;         // setup Wave file writer&#xA; &#xA;         param := wave.WriterParam{&#xA;                 Out:           waveFile,&#xA;                 Channel:       inputChannels,&#xA;                 SampleRate:    sampleRate,&#xA;                 BitsPerSample: 8, // if 16, change to WriteSample16()&#xA;         }&#xA; &#xA;         waveWriter, err := wave.NewWriter(param)&#xA;         errCheck(err)&#xA; &#xA;         //defer waveWriter.Close()&#xA; &#xA;         go func() {&#xA;                 key := C.getch()&#xA;                 fmt.Println()&#xA;                 fmt.Println(&amp;#34;Cleaning up ...&amp;#34;)&#xA;                 if key == 27 {&#xA;                         // better to control&#xA;                         // how we close then relying on defer&#xA;                         waveWriter.Close()&#xA;                         stream.Close()&#xA;                         portaudio.Terminate()&#xA;                         fmt.Println(&amp;#34;Play&amp;#34;, audioFileName, &amp;#34;with a audio player to hear the result.&amp;#34;)&#xA;                         os.Exit(0)&#xA; &#xA;                 }&#xA; &#xA;         }()&#xA; &#xA;         // recording in progress ticker. From good old DOS days.&#xA;         ticker := []string{&#xA;                 &amp;#34;-&amp;#34;,&#xA;                 &amp;#34;\\&amp;#34;,&#xA;                 &amp;#34;/&amp;#34;,&#xA;                 &amp;#34;|&amp;#34;,&#xA;         }&#xA;         rand.Seed(time.Now().UnixNano())&#xA; &#xA;         // start reading from microphone&#xA;         errCheck(stream.Start())&#xA;         for {&#xA;                 errCheck(stream.Read())&#xA; &#xA;                 fmt.Printf(&amp;#34;\rRecording is live now. Say something to your microphone! [%v]&amp;#34;, ticker[rand.Intn(len(ticker)-1)])&#xA; &#xA;                 // write to wave file&#xA;                 _, err := waveWriter.Write([]byte(framesPerBuffer)) // WriteSample16 for 16 bits&#xA;                 errCheck(err)&#xA;         }&#xA;         errCheck(stream.Stop())&#xA; }&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>ESP8266的一些杂乱记录</title>
      <link>/ai/2019/080221-esp8266/</link>
      <pubDate>Thu, 24 Jan 2019 15:15:32 +0800</pubDate>
      <guid>/ai/2019/080221-esp8266/</guid>
      <description>&lt;p&gt;以下的代码不能直接用&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#include &amp;lt;ESP8266WebServer.h&amp;gt;&#xA;ESP8266WebServer server(80);&#xA;void handleRoot() {&#xA;  server.send(200, &amp;#34;text/html&amp;#34;, &amp;#34;&amp;lt;h1&amp;gt;You are connected&amp;lt;/h1&amp;gt;&amp;#34;);&#xA;}&#xA;WiFi.softAP(ssid, password);&#xA;server.on(&amp;#34;/&amp;#34;, handleRoot);&#xA;server.begin();&#xA;server.handleClient();&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;p&gt;ESP.restart();&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;关于UDP&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#include &amp;lt;ESP8266WiFi.h&amp;gt;&#xA;#include &amp;lt;WiFiUdp.h&amp;gt;&#xA;WiFiUDP udp;&#xA;&#xA;IPAddress xip(192, 168,2, 2);//下位远程IP&#xA;IPAddress Serverip(192, 168, 1, 4);//上位机远程IP&#xA;unsigned int localPort = 9999;//本地端口&#xA;unsigned int remoteport = 9999;//远程端口&#xA;const char *ssid = &amp;#34;Netcore_wsn&amp;#34;;&#xA;const char *password = &amp;#34;99325408322&amp;#34;;&#xA;const char *ssid1 = &amp;#34;Netcore_wsn1&amp;#34;;//AP&#xA;const char *password1 = &amp;#34;99325408322&amp;#34;;//AP&#xA;&#xA;char packetBuffer[255];//收发缓冲区&#xA;void setup() {Serial.begin(115200);//初始化串口波特率&#xA;       delay(5000);//延时5S&#xA;       WiFi.mode(WIFI_AP_STA);//设置模式为AP+STA&#xA;       WiFi.softAPConfig(&amp;#34;192.168.2.1&amp;#34;,&amp;#34;192.168.2.1&amp;#34;,&amp;#34;255.255.255.0&amp;#34;);//设置AP网络参数,: AP端IP,AP端网关,AP端子网掩码&#xA;       WiFi.softAP(&amp;#34;AAA&amp;#34;,&amp;#34;00000000&amp;#34;,1);//设置AP账号密码&#xA;       WiFi.begin(&amp;#34;BBB&amp;#34;,&amp;#34;00000000&amp;#34;);//连接指定路由&#xA;       WiFi.config(&amp;#34;192.168.100.2&amp;#34;,&amp;#34;192.168.100.1&amp;#34;,&amp;#34;255.255.255.0&amp;#34;);//设置本地网络参数&#xA;       Serial.print(&amp;#34;Is connection routing, please wait&amp;#34;);&#xA;       while(WiFi.status()!=WL_CONNECTED)//等待路由连接&#xA;       {  &#xA;           delay(500);  Serial.print(&amp;#34;.&amp;#34;);&#xA;       }&#xA;       Serial.println(&amp;#34; &amp;#34;);&#xA;&#xA;       udp.begin(localPort);//监听指定端口&#xA;       Serial.print(&amp;#34;ip:&amp;#34;);  Serial.println(WiFi.localIP());&#xA;       Serial.print(&amp;#34;apip:&amp;#34;); Serial.println(WiFi.softAPIP());&#xA;}&#xA;void loop() {&#xA;   if(udp.parsePacket()) {&#xA;         udp.read(packetBuffer,255);//读取数据&#xA;         udp.beginPacket(Serverip,remoteport);&#xA;         udp.write(packetBuffer,255);&#xA;         udp.endPacket();&#xA;         Serial.println(packetBuffer);&#xA;&#xA;         udp.beginPacket(xip,remoteport);&#xA;         udp.write(packetBuffer,255);&#xA;         udp.endPacket();&#xA;         memset(packetBuffer, 0, 255);//清除缓冲器数值&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#xA;&lt;p&gt;TCP&lt;/p&gt;</description>
    </item>
    <item>
      <title>ES8266的smartConfig</title>
      <link>/ai/2019/080222-esp8266/</link>
      <pubDate>Sat, 19 Jan 2019 17:44:51 +0800</pubDate>
      <guid>/ai/2019/080222-esp8266/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&#xA;&#xA;#include &amp;lt;ESP8266WiFi.h&amp;gt;&#xA;&#xA;uint8_t FlashPin = 0;    //Flash脚&#xA;uint8_t LedPin = 2 ;     //Led脚&#xA;int count = 0;&#xA; &#xA;void setup() {&#xA;   Serial.begin(115200); //打开串口  &#xA;   pinMode(FlashPin, INPUT);//设置管脚为输入  &#xA;   pinMode(LedPin, OUTPUT);&#xA;&#xA;   if (!autoConfig())&#xA;   {&#xA;     Serial.println(&amp;#34;Start module&amp;#34;);&#xA;     smartConfig();&#xA;   }&#xA;&#xA;   digitalWrite(LedPin,HIGH);&#xA;}&#xA;&#xA;void loop() {&#xA;    while(digitalRead(FlashPin) == LOW) {&#xA;        delay(200);&#xA;        count ++;&#xA;        if (count &amp;gt;= 20) { //&amp;gt;=4s&#xA;            digitalWrite(LedPin,LOW); delay(300);&#xA;            digitalWrite(LedPin,HIGH);delay(100);&#xA;            digitalWrite(LedPin,LOW); delay(300);&#xA;            digitalWrite(LedPin,HIGH);&#xA;&#xA;            ESP.eraseConfig();&#xA;            delay(1000);&#xA;            ESP.reset();&#xA;            ESP.restart();&#xA;            //Serial.println(&amp;#34;Long Key&amp;#34;);&#xA;            break;&#xA;        }&#xA;    }&#xA;    count = 0;&#xA;    digitalWrite(LedPin,HIGH);&#xA;    delay(200);//nothing to do just delay&#xA;}&#xA;&#xA;bool autoConfig()&#xA;{&#xA;  WiFi.begin();&#xA;  for (int i = 0; i &amp;lt; 20; i++)&#xA;  {&#xA;    int wstatus = WiFi.status();&#xA;    if (wstatus == WL_CONNECTED)&#xA;    {&#xA;      Serial.println(&amp;#34;AutoConfig Success&amp;#34;);&#xA;      Serial.printf(&amp;#34;SSID:%s\r\n&amp;#34;, WiFi.SSID().c_str());&#xA;      Serial.printf(&amp;#34;PSW:%s\r\n&amp;#34;, WiFi.psk().c_str());&#xA;      WiFi.printDiag(Serial);&#xA;      return true;&#xA;      //break;&#xA;    }&#xA;    else&#xA;    {&#xA;      Serial.print(&amp;#34;AutoConfig Waiting......&amp;#34;);&#xA;      Serial.println(wstatus);&#xA;      delay(1000);&#xA;    }&#xA;  }&#xA;  Serial.println(&amp;#34;AutoConfig Faild!&amp;#34; );&#xA;  return false;&#xA;  //WiFi.printDiag(Serial);&#xA;}&#xA;void smartConfig()&#xA;{&#xA;  WiFi.mode(WIFI_STA);&#xA;  Serial.println(&amp;#34;\r\nWait for Smartconfig&amp;#34;);&#xA;  WiFi.beginSmartConfig();&#xA;  while (1)&#xA;  {&#xA;    Serial.print(&amp;#34;.&amp;#34;);&#xA;    if (WiFi.smartConfigDone())&#xA;    {&#xA;      Serial.println(&amp;#34;SmartConfig Success&amp;#34;);&#xA;      Serial.printf(&amp;#34;SSID:%s\r\n&amp;#34;, WiFi.SSID().c_str());&#xA;      Serial.printf(&amp;#34;PSW:%s\r\n&amp;#34;, WiFi.psk().c_str());&#xA;      WiFi.setAutoConnect(true);  // 设置自动连接&#xA;      break;&#xA;    }&#xA;    delay(1000); // 这个地方一定要加延时，否则极易崩溃重启&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>我的门禁系统(ESP8266)</title>
      <link>/ai/2019/080222-menjin/</link>
      <pubDate>Thu, 10 Jan 2019 11:41:16 +0800</pubDate>
      <guid>/ai/2019/080222-menjin/</guid>
      <description>&lt;p&gt;用ESP8266加上一些传感器，做了一个简单的门禁系统，达到的效果是这样的：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;开门时，ESP8266上的小小喇叭会播放音乐（当然是那种tone）。服务器上播放语音：门开了&lt;/li&gt;&#xA;&lt;li&gt;长时间没关门，小小喇叭播放音乐。服务器上播放语音：请注意关门&lt;/li&gt;&#xA;&lt;li&gt;关门时，小小喇叭播放音乐。服务器上播放语音：门关了&lt;/li&gt;&#xA;&lt;li&gt;添另了人体传感器，可以判断是门内开还是门外开（激光传感器需要对好光点，比较麻烦，就使用人体传感器了）&lt;/li&gt;&#xA;&lt;li&gt;增加了4颗WS8212的LED小灯带，晚上开门会亮一会儿，超时没关门，灯带会闪烁，是否亮灯（晚上才亮）是由服务器判断的&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;还可以继续加强：&lt;/p&gt;</description>
    </item>
    <item>
      <title>arduino命令行编译</title>
      <link>/ai/2019/080221-arduino/</link>
      <pubDate>Tue, 08 Jan 2019 12:21:43 +0800</pubDate>
      <guid>/ai/2019/080221-arduino/</guid>
      <description>&lt;p&gt;近在使用ESP8266和Arduino，考虑换个代码编辑环境，找了一下关于命令行编译&lt;/p&gt;&#xA;&lt;p&gt;主要使用了这个工具 &lt;a href=&#34;http://inotool.org/&#34;&gt;http://inotool.org/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;sudo apt-get install arduino&#xA;sudo apt-get install python-pip&#xA;sudo python2 -m pip install ino&lt;/p&gt;&#xA;&lt;p&gt;注意，因为ino是需要的python2，所以这里和网上说的有所不同。&lt;/p&gt;</description>
    </item>
    <item>
      <title>3D打印之PLA</title>
      <link>/ai/2019/080221-3d/</link>
      <pubDate>Tue, 27 Nov 2018 09:39:04 +0800</pubDate>
      <guid>/ai/2019/080221-3d/</guid>
      <description>&lt;p&gt;最近败了一个3D打印机，PLA材料，FDM工艺，也就是把PLA高温加热，从打印头中挤出来。&lt;/p&gt;&#xA;&lt;p&gt;我用的是白色材料，所以考虑如何上色。据说用“丙烯酸自干漆”可以，从公司要了一点，硬度没什么问题，因为暂时没拿稀料，所以效果不是太好。改天继续试，再试一下其它颜色。&lt;/p&gt;</description>
    </item>
    <item>
      <title>关于“首名基因编辑，人类在中国诞生”，历史的必然</title>
      <link>/other/2019/080221-jiyin/</link>
      <pubDate>Mon, 26 Nov 2018 17:47:38 +0800</pubDate>
      <guid>/other/2019/080221-jiyin/</guid>
      <description>&lt;p&gt;据人民网报道，一对名为露露和娜娜的基因编辑婴儿，于11月在中国诞生。&lt;/p&gt;&#xA;&lt;p&gt;个人认为这是历史发展的必然，基因工程的一个发展方向就是基因编辑。最终必将像霍金说的，一些富人通过基因编辑技术让自己或者后代更加优秀，更加全面的优秀。穷人将越来越穷，更加全面的穷。&lt;/p&gt;</description>
    </item>
    <item>
      <title>经常用一些特殊的符号</title>
      <link>/other/2019/073009-fuhao/</link>
      <pubDate>Fri, 23 Nov 2018 11:38:07 +0800</pubDate>
      <guid>/other/2019/073009-fuhao/</guid>
      <description>&lt;p&gt;经常用一些特殊的符号，怕不好找就收集一下放在这里．&lt;/p&gt;&#xA;&lt;p&gt;↘ ㊣ ▷ ○ ● ⊕ ≰ ○△ ▲ ► ▹ ▵ ▴ ■ ⊐ ⊔ ⊘ ▻≰ ▷ ▹►⊕▷Θ﹋﹇﹈」『〒〓‴-》「√∴卐 ≈ ? ∵∴§∮ の ►→≰▸▶≳⊕▷Θ≰¤㊣▹►▻▴▵⊢⊡⊤▲⊟△⊠≨⊣ ⊤ ⊎ ⊏ ⊐ ⊑ ⊒ ⊓ ⊔ ⊔ ■ ⊜ 回 □ 』≡ ≶≳≭ ≰⊅ ≩ ≬ ⊂ ⋅ ⋍┯ ┷⊴ ⊸⊼ ⋀┳≱﹃﹄⊱ ⊵⊹ ⊽∟〉《↑↓→←↘↙▻▼⊬⊪ ﹅﹆﹉﹊⊆ ⊇⊉ ⊈ ^_^ ^^ ^-^ ^^ ^︵^ ∵∴‖︱ ︳︴﹋﹇﹈︵︶︹︺ 」『〒〓＠﹕﹗/\ “ &amp;lt; &amp;gt; `,·。≈{}~ ～() _ -》「√ $ @ &amp;amp; # ‴ 卐 〄∞Ψ ∪∩∈∏ の ℡ 〔 §∮〝〞ミ灬ξ№∑≲ξζω＊ㄨ ≮≯ ＋－×÷﹢﹣±／＝∫∮∝ ∞ ∧∨ ∑ ∏ ∥∠ ≌ ∸ ≦ ≧ ≒﹤﹥じ►veve↑↓≰▸▹►╌▻》「▴⊢⊤▲Ψ ‴⊣ ⊤ →№←㊣∑≲〒〓＠ξζω□∮』‴∴ぷ⊎⊏⊑⊒⊔ ∏卐」『△√ ∩¤〄▻▼∞≳ㄨ≡↘↙⊎ ⊎ ⊏ ⊐ ⊑ ⊒ ⊓ ⊔⊼⋀⊉►⊇&lt;/p&gt;</description>
    </item>
    <item>
      <title>远程运行命令，监控服务器</title>
      <link>/it/2019/073009-jiankong/</link>
      <pubDate>Wed, 21 Nov 2018 10:39:38 +0800</pubDate>
      <guid>/it/2019/073009-jiankong/</guid>
      <description>&lt;p&gt;通过ssh，远程监控服务器，获取服务器信息。这里主要是作一下记录，怕忘。&lt;/p&gt;&#xA;&lt;p&gt;for ((c=1;;i++)); do sshpass -p 1234567 ssh &lt;a href=&#34;mailto:pi@192.168.100.150&#34;&gt;pi@192.168.100.150&lt;/a&gt; &amp;ldquo;uptime&amp;rdquo; ; sleep 60 ; done&lt;/p&gt;&#xA;&lt;p&gt;应用环境是在ubuntu的shell中，一句话在命令行运行，不断循环，获取指定设备的上电时间。&lt;/p&gt;</description>
    </item>
    <item>
      <title>树莓派控制WS2812灯带</title>
      <link>/it/2019/073009-pi-led/</link>
      <pubDate>Tue, 20 Nov 2018 22:49:00 +0800</pubDate>
      <guid>/it/2019/073009-pi-led/</guid>
      <description>&lt;p&gt;原文： &lt;a href=&#34;https://tutorials-raspberrypi.com/connect-control-raspberry-pi-ws2812-rgb-led-strips/&#34;&gt;https://tutorials-raspberrypi.com/connect-control-raspberry-pi-ws2812-rgb-led-strips/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;主要还是它 git clone &lt;a href=&#34;https://github.com/jgarff/rpi_ws281x&#34;&gt;https://github.com/jgarff/rpi_ws281x&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;还需要一个工具进行编译 sudo apt install scons&lt;/p&gt;&#xA;&lt;p&gt;然后：cd rpi_ws281x/ ,   sudo scons&lt;/p&gt;&#xA;&lt;p&gt;居然还有golang的代码&lt;/p&gt;</description>
    </item>
    <item>
      <title>树莓派控制主板自带LED灯</title>
      <link>/it/2019/073010-pi-led/</link>
      <pubDate>Tue, 20 Nov 2018 22:29:41 +0800</pubDate>
      <guid>/it/2019/073010-pi-led/</guid>
      <description>&lt;p&gt;原文在这里:https://www.jeffgeerling.com/blogs/jeff-geerling/controlling-pwr-act-leds-raspberry-pi&lt;/p&gt;</description>
    </item>
    <item>
      <title>什么阻碍了科技应用</title>
      <link>/other/2019/080221-keji/</link>
      <pubDate>Tue, 20 Nov 2018 08:33:03 +0800</pubDate>
      <guid>/other/2019/080221-keji/</guid>
      <description>&lt;p&gt;什么阻碍了科技应用？是电池技术。  :)&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080221-keji-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;有谁说过自己的电量足充，可以远离充电器一个月的？不少的设备已经小型化甚至微型化，“蛋是“，电池就是个怪物的存在，任你是3寸手机还是10寸手机，漂亮如苹果，那还得带个怪物般的充电宝以防牺牲。否则就老老实实的使用10年前的电话功能就够了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>raspberryPi摄像头命令行软件raspistill </title>
      <link>/it/2019/073010-raspistill/</link>
      <pubDate>Sat, 17 Nov 2018 19:58:23 +0800</pubDate>
      <guid>/it/2019/073010-raspistill/</guid>
      <description>&lt;p&gt;此命令的使用也可访问我的小抄：scwy.net/pi/raspistill 。关于Pi的相关指令也会陆续添加。&lt;/p&gt;&#xA;&lt;p&gt;文档原文:https://www.raspberrypi.org/app/uploads/2013/07/RaspiCam-Documentation.pdf&lt;/p&gt;</description>
    </item>
    <item>
      <title>Raspberry Pi Zero 功耗</title>
      <link>/it/2019/073010-pi-zero/</link>
      <pubDate>Sat, 17 Nov 2018 16:21:36 +0800</pubDate>
      <guid>/it/2019/073010-pi-zero/</guid>
      <description>&lt;p&gt;想利用Pi Zero W的小巧以及Vufine做一个便携的应用，功耗也就是需要考虑的问题。收集一些方法。&lt;/p&gt;&#xA;&lt;p&gt;原文：https://www.lijingquan.net/index.php/2017/03/03/%E9%99%8D%E4%BD%8E%E6%A0%91%E8%8E%93%E6%B4%BE%E5%8A%9F%E8%80%97/&lt;/p&gt;</description>
    </item>
    <item>
      <title>现在孩子的学习环境</title>
      <link>/teach/2019/080221-huajin/</link>
      <pubDate>Thu, 08 Nov 2018 21:20:44 +0800</pubDate>
      <guid>/teach/2019/080221-huajin/</guid>
      <description>&lt;p&gt;教育分为教（书本知识部份）和育（思想/能力知识部份）。现在的传统学校主要以教为主，育似有似无。&lt;/p&gt;&#xA;&lt;p&gt;这里说的学习环境，主要还是指的硬环境，比如教学设施类的。现在的学校教学设施一般都不会太差，学校的好坏更多的体现为了老师和教的结果部份。但学校更多的是缺少可供玩耍游戏的“泥地”和“草坪”。我们是否能为孩子提供一个这样的场所呢？记得以前学校很多没有泥地，周边的环境也没那么“硬”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>一款性能足够的4.5寸以下的手机</title>
      <link>/it/2019/080222-shouji/</link>
      <pubDate>Sat, 27 Oct 2018 19:14:59 +0800</pubDate>
      <guid>/it/2019/080222-shouji/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../080222-shouji-01.jpg&#34; alt=&#34;&#34;&gt;&#xA;记得开始比较早的大屏手机是DELL的一款，已经记不得型号了，至今还在垃圾堆里。&lt;/p&gt;&#xA;&lt;p&gt;我是比较早使用大屏手机的，好处不言而喻。但用过几款后反而更喜欢小手机了。不过市场上的小手机快要死光了，若有一款性能足够，且小于4.5寸以下的高屏占比手机，应该会受到一群小众用户的欢迎。虽然市场上也有一些小手机，不过还是得满足一些基本的需求：&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang与手机如何实现一些自动化操作？</title>
      <link>/code/2019/080221-shouji/</link>
      <pubDate>Fri, 26 Oct 2018 12:05:26 +0800</pubDate>
      <guid>/code/2019/080221-shouji/</guid>
      <description>&lt;p&gt;所有指令控制： &lt;a href=&#34;http://adbshell.com/&#34;&gt;http://adbshell.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;golang与手机如何实现一些自动化操作？虽然不太会把电脑开起来操作手机，不过pi也应该可以与手机互动吧。&lt;/p&gt;&#xA;&lt;p&gt;比如说来个无人值守功能啥的，语音信箱啥的&amp;hellip;.任凭想像。&lt;/p&gt;</description>
    </item>
    <item>
      <title>点子&#43;思考</title>
      <link>/other/2019/080218-dianzi/</link>
      <pubDate>Thu, 02 Aug 2018 18:22:11 +0800</pubDate>
      <guid>/other/2019/080218-dianzi/</guid>
      <description>&lt;p&gt;记录一些偶发的创意.想法或思考．持续更新&amp;hellip;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;因为基本完成了网页版微信的分析利用，可以将微信上的所有聊天信息保存起来，或者做成工具。思考：是否可以利用这些聊天信息进行数据分析？方向：网友性格分析、热点/焦点分析、网友关注点分析、网友关系分析，以及自身朋友圈分析&lt;/p&gt;</description>
    </item>
    <item>
      <title>爬煎蛋图</title>
      <link>/code/2019/080422-jiandan/</link>
      <pubDate>Fri, 27 Jul 2018 09:48:31 +0800</pubDate>
      <guid>/code/2019/080422-jiandan/</guid>
      <description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    import hashlib&#xA;    import base64&#xA;    from bs4 import BeautifulSoup&#xA;    import requests&#xA;    import re&#xA;    import random&#xA;    import shutil&#xA;    import os&#xA;    import time&#xA;    import queue&#xA;    import threading&#xA;    import math&#xA;    &amp;#39;&amp;#39;&amp;#39;&#xA;    url解码&#xA;    &amp;#39;&amp;#39;&amp;#39;&#xA;    def parse(imgHash, constant):&#xA;        &amp;#39;&amp;#39;&amp;#39;&#xA;        以下是原来的解码方式，近日（2018/5/25）已被修改不再生效&#xA;        q = 4&#xA;        hashlib.md5()&#xA;        constant = md5(constant)&#xA;        o = md5(constant[0:16])&#xA;        n = md5(constant[16:32])&#xA;        l = imgHash[0:q]&#xA;        c = o + md5(o + l)&#xA;        imgHash = imgHash[q:]&#xA;        k = decode_base64(imgHash)&#xA;        h =list(range(256))&#xA;        b = list(range(256))&#xA;        for g in range(0,256):&#xA;            b[g] = ord(c[g % len(c)])&#xA;        f=0&#xA;        for g in range(0,256):&#xA;            f = (f+h[g]+b[g]) % 256&#xA;            tmp = h[g]&#xA;            h[g] = h[f]&#xA;            h[f] = tmp&#xA;        result = &amp;#34;&amp;#34;&#xA;        p=0&#xA;        f=0&#xA;        for g in range(0,len(k)):&#xA;            p = (p + 1) % 256;&#xA;            f = (f + h[p]) % 256&#xA;            tmp = h[p]&#xA;            h[p] = h[f]&#xA;            h[f] = tmp&#xA;            result += chr(k[g] ^ (h[(h[p] + h[f]) % 256]))&#xA;        result = result[26:]&#xA;        return result&#xA;        &amp;#39;&amp;#39;&amp;#39;&#xA;        return decode_base64(imgHash).decode(&amp;#39;utf8&amp;#39;)&#xA;    def md5(src):&#xA;        m = hashlib.md5()&#xA;        m.update(src.encode(&amp;#34;utf8&amp;#34;))&#xA;        return m.hexdigest()&#xA;    def decode_base64(data):&#xA;        missing_padding = 4 - len(data) % 4&#xA;        if missing_padding:&#xA;            data += &amp;#39;=&amp;#39; * missing_padding&#xA;        return base64.b64decode(data)&#xA;    headers = {&#xA;        &amp;#39;User-Agent&amp;#39;: &amp;#39;Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36&amp;#39;&#xA;    }&#xA;    &amp;#39;&amp;#39;&amp;#39;&#xA;    页面抓取类&#xA;    &amp;#39;&amp;#39;&amp;#39;&#xA;    class Spider(threading.Thread):&#xA;        def __init__(self, pages, proxies, url_manager):&#xA;            threading.Thread.__init__(self)&#xA;            self.pages = pages&#xA;            self.proxies = proxies&#xA;            self.url_manager = url_manager&#xA;        def get_Page(self, page, proxies, url_manager):&#xA;            bs_page = BeautifulSoup(page, &amp;#34;lxml&amp;#34;)&#xA;            &amp;#39;&amp;#39;&amp;#39;&#xA;            获取js文件地址从而得到constant常量&#xA;            &amp;#39;&amp;#39;&amp;#39;&#xA;            try:&#xA;                model = re.findall(r&amp;#39;.*&amp;lt;script\ssrc=\&amp;#34;\/\/(cdn.jandan.net\/static\/min.*?)\&amp;#34;&amp;gt;&amp;lt;\/script&amp;gt;.*&amp;#39;, page)&#xA;                jsfile_url = &amp;#34;http://&amp;#34; + model[len(model) - 1]  # 页面上可能有两个地址，取最后一个匹配的地址&#xA;            except Exception as e:&#xA;                print(e)&#xA;            jsfile = requests.get(jsfile_url, headers=headers, proxies=proxies, timeout=3).text&#xA;            constant = re.search(r&amp;#39;.*remove\(\);var\sc=\w+\(e,\&amp;#34;(\w+)\&amp;#34;.*&amp;#39;, jsfile).group(1)&#xA;            &amp;#39;&amp;#39;&amp;#39;&#xA;            向parse函数传入constant常量和img-hash得到图片地址&#xA;            &amp;#39;&amp;#39;&amp;#39;&#xA;            for item in bs_page.select(&amp;#39;.img-hash&amp;#39;):&#xA;                img_url = &amp;#39;http:&amp;#39; + parse(item.text, constant)&#xA;                url_manager.addNewUrl(img_url)&#xA;        def run(self):&#xA;            for page in self.pages:&#xA;                self.get_Page(page, self.proxies, self.url_manager)&#xA;    &amp;#39;&amp;#39;&amp;#39;&#xA;    程序入口&#xA;    &amp;#39;&amp;#39;&amp;#39;&#xA;    def main(amount):&#xA;        url_manager = UrlManager()&#xA;        proxies = {&amp;#39;http&amp;#39;: &amp;#39;&amp;#39;}  # 尚未添加ip代理功能，程序已能正常运行&#xA;        current_url = &amp;#39;http://jandan.net/ooxx&amp;#39;  # 当前页面url&#xA;        &amp;#39;&amp;#39;&amp;#39;&#xA;        多线程抓取页面地址&#xA;        &amp;#39;&amp;#39;&amp;#39;&#xA;        pages = []  # 所有待抓取页面&#xA;        try:&#xA;            for i in range(amount):&#xA;                print(i)&#xA;                current_page = requests.get(current_url, headers=headers).text  # 当前页面源码&#xA;                pages.append(current_page)&#xA;                current_url = &amp;#39;http:&amp;#39; + re.search(r&amp;#39;.*Older\sComments\&amp;#34;\shref=\&amp;#34;(.*?)\&amp;#34;\sclass.*&amp;#39;, current_page).group(&#xA;                    1)  # 提取下个页面url&#xA;        except Exception as e:&#xA;            pass&#xA;        page_threads = []&#xA;        t_amount = 10 if len(pages) &amp;gt; 10 else len(pages)  # 页面抓取线程数&#xA;        for i in range(t_amount):&#xA;            t = Spider(pages[math.ceil(int((len(pages)) / t_amount) * i):math.ceil(int((len(pages)) / t_amount) * (i + 1))],&#xA;                       proxies, url_manager)&#xA;            page_threads.append(t)&#xA;        for t in page_threads:&#xA;            t.start()&#xA;        for t in page_threads:&#xA;            t.join()&#xA;        img_threads = []&#xA;        for i in range(10):  # 固定10个线程用于下载图片&#xA;            t = Download(url_manager)&#xA;            img_threads.append(t)&#xA;        for t in img_threads:&#xA;            t.start()&#xA;        for t in img_threads:&#xA;            t.join()&#xA;    L = threading.Lock()&#xA;    &amp;#39;&amp;#39;&amp;#39;&#xA;    图片下载类&#xA;    &amp;#39;&amp;#39;&amp;#39;&#xA;    class Download(threading.Thread):&#xA;        def __init__(self, url_manager):&#xA;            threading.Thread.__init__(self)&#xA;            self.url_manager = url_manager&#xA;            self.pic_headers = headers&#xA;            self.pic_headers[&amp;#39;Host&amp;#39;] = &amp;#39;wx3.sinaimg.cn&amp;#39;&#xA;        def download_Img(self, url):&#xA;            print(url)&#xA;            isGif = re.match(r&amp;#39;(.*\.sinaimg\.cn\/)(\w+)(\/.+\.gif)&amp;#39;, url)&#xA;            if isGif:&#xA;                url = isGif.group(1) + &amp;#39;large&amp;#39; + isGif.group(3)&#xA;            extensionName = re.match(r&amp;#39;.*(\.\w+)&amp;#39;, url).group(1)  # 图片扩展名&#xA;            L.acquire()&#xA;            if not os.path.exists(&amp;#39;img&amp;#39;):&#xA;                os.mkdir(&amp;#39;img&amp;#39;)&#xA;            with open(&amp;#39;img/&amp;#39; + str(len(os.listdir(&amp;#39;./img&amp;#39;))) + extensionName, &amp;#39;wb&amp;#39;) as f:&#xA;                # headers[&amp;#39;Host&amp;#39;]=&amp;#39;wx3.sinaimg.cn&amp;#39;&#xA;                f.write(requests.get(url, headers=self.pic_headers).content)&#xA;                f.close()&#xA;            L.release()&#xA;        def run(self):&#xA;            while not self.url_manager.isEmpty():&#xA;                imgUrl = self.url_manager.getNewUrl()&#xA;                self.download_Img(imgUrl)&#xA;                self.url_manager.addOldUrl(imgUrl)&#xA;    &amp;#39;&amp;#39;&amp;#39;&#xA;    url仓库，提供url更新以及记录功能&#xA;    &amp;#39;&amp;#39;&amp;#39;&#xA;    class UrlManager:&#xA;        def __init__(self):&#xA;            self.url_used = []&#xA;            self.url_target = queue.Queue()&#xA;            if os.path.exists(&amp;#39;url.txt&amp;#39;):&#xA;                with open(&amp;#39;url.txt&amp;#39;, &amp;#39;r&amp;#39;) as f:&#xA;                    for eachline in f.readlines():&#xA;                        self.url_used.append(eachline.strip())&#xA;            else:&#xA;                open(&amp;#34;url.txt&amp;#34;, &amp;#39;w&amp;#39;)&#xA;        def getNewUrl(self):&#xA;            return self.url_target.get()&#xA;        def isEmpty(self):&#xA;            return self.url_target.empty()&#xA;        def addNewUrl(self, newUrl):&#xA;            if newUrl in self.url_used:&#xA;                pass&#xA;            else:&#xA;                self.url_target.put(newUrl)&#xA;        def addOldUrl(self, oldUrl):&#xA;            self.url_used.append(oldUrl)&#xA;            with open(&amp;#39;url.txt&amp;#39;, &amp;#39;a&amp;#39;) as f:&#xA;                f.write(oldUrl + &amp;#39;\n&amp;#39;)&#xA;    if __name__ == &amp;#39;__main__&amp;#39;:&#xA;        amount = input(&amp;#39;请输入抓取页数后按回车开始(小于100），从首页开始计数):&amp;#39;)&#xA;        main(int(amount))  # 抓取首页开始的前amount页的图片&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    <item>
      <title>2018年6月越南岘港游(超50张高清图)</title>
      <link>/other/2019/080421-xiangang/</link>
      <pubDate>Mon, 02 Jul 2018 16:29:44 +0800</pubDate>
      <guid>/other/2019/080421-xiangang/</guid>
      <description>&lt;p&gt;时间：2018.6.&#xA;地点：越南岘(xian)港&#xA;人物：爸爸、妈妈、乔乔、尧尧&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;../080421-xiangang-01.jpg&#34; alt=&#34;一家&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;大宝&#34;&gt;大宝&lt;/h2&gt;&#xA;&lt;p&gt;外国的风景很美丽，因为有沙滩。喜欢阿德叔叔和阳阳阿姨(两位导游)，因为他们带乔乔尧尧玩。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker学习记录</title>
      <link>/it/2019/080218-docker/</link>
      <pubDate>Wed, 31 Jan 2018 14:27:51 +0800</pubDate>
      <guid>/it/2019/080218-docker/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;../080218-docker-01.jpg&#34; alt=&#34;&#34;&gt;&#xA;不用docker不行啊，流行是有道理的。&lt;/p&gt;&#xA;&lt;p&gt;docker run -d -it -p 3000:3000 -v /data/nodercms_hs:webapp -v /data/mongodb:/data web_v1 /etc/rc.local&lt;/p&gt;&#xA;&lt;p&gt;映射了两个目录，一个用于node，一个用于mongodb。虽然说docker的做法应该是将各个服务分开，但我的理论是把各个公司的分开 :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>全球十大工业自动化企业排行榜</title>
      <link>/ai/2019/080219-paihang/</link>
      <pubDate>Fri, 10 Nov 2017 15:52:29 +0800</pubDate>
      <guid>/ai/2019/080219-paihang/</guid>
      <description>&lt;h4 id=&#34;1通用电气公司general-electric&#34;&gt;1、通用电气公司（GENERAL ELECTRIC）&lt;/h4&gt;&#xA;&lt;p&gt;总营收：140,389 百万美元&lt;/p&gt;&#xA;&lt;p&gt;　　美国通用电气公司创立于1892年，又称奇异公司，由老摩根在1892年出资把爱迪生通用电气公司、汤姆逊-豪斯登国际电气公司等三家公司合并组成。美国通用电气以各种方式吞并了国内外许多企业，成为了世界上最大的提供技术和服务业务的跨国公司。通用电气坚持多元化发展，公司业务从飞机发动机、发电设备到金融服务，从医疗造影、电视节目到塑料。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI、机器人与人</title>
      <link>/other/2019/080219-ai/</link>
      <pubDate>Fri, 10 Nov 2017 15:51:09 +0800</pubDate>
      <guid>/other/2019/080219-ai/</guid>
      <description>&lt;p&gt;最近各媒体和企业都对AI、机器人及自动化技术提示相当多，大有狼来了的感觉。不过喜欢科幻的我却有点不同的看法。所有这些新技术的研究和实现，无非是人类实现自我升级的一种尝试，包括现在的基因技术等。&#xA;&lt;img src=&#34;../080219-ai-01.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>永远不要自毁前途！叫醒自己的25张图</title>
      <link>/teach/2017/092620-zihui/</link>
      <pubDate>Tue, 26 Sep 2017 20:27:36 +0800</pubDate>
      <guid>/teach/2017/092620-zihui/</guid>
      <description>&lt;h4 id=&#34;永远不要自毁机会和前途&#34;&gt;永远不要自毁机会和前途&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://5b0988e595225.cdn.sohucs.com/images/20170924/91314b2bc1b74120941e2e050fcec3d7.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;昨天很美好今天很残酷-明天又是新的开始但很多人都在今晚放弃&#34;&gt;昨天很美好，今天很残酷. 明天又是新的开始，但很多人都在今晚放弃&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://5b0988e595225.cdn.sohucs.com/images/20170924/3b733505f55f43019b2a7a830db9806b.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;方向不对越努力越窘迫&#34;&gt;方向不对，越努力越窘迫&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://5b0988e595225.cdn.sohucs.com/images/20170924/0ffb8eb32dba4792b0455898a09353e9.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;读书的意义所在&#34;&gt;读书的意义所在&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://5b0988e595225.cdn.sohucs.com/images/20170924/65c04cc017184176b2001ef9bdb9b7be.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;人生是不可重播的影视剧跳不过广告躲不开悲伤绕不过谢幕我们能做的就是让剧情更精彩&#34;&gt;人生是不可重播的影视剧跳不过广告躲不开悲伤绕不过谢幕我们能做的就是让剧情更精彩&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://t10.baidu.com/it/u=2188347744,3684839971&amp;amp;fm=170&amp;amp;s=CBB02EC55440135942B6A62C0300F05F&amp;amp;w=600&amp;amp;h=719&amp;amp;img.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;自我塑造过程很疼但你最终能收获一个更好的自己&#34;&gt;自我塑造，过程很疼,但你最终能收获一个更好的自己&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://t12.baidu.com/it/u=54029597,498608336&amp;amp;fm=170&amp;amp;s=1CA874334A32778ECC3071C70100A0A0&amp;amp;w=429&amp;amp;h=378&amp;amp;img.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;有时候你觉得特别难也许因为有更大的收获&#34;&gt;有时候你觉得特别难,也许因为有更大的收获&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://t11.baidu.com/it/u=1981259080,1713222879&amp;amp;fm=170&amp;amp;s=E5F18B744992CA4F0AC4B86D030040F5&amp;amp;w=500&amp;amp;h=640&amp;amp;img.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;表面繁荣未必是好事抛开表象看实质才是人生真谛&#34;&gt;表面繁荣未必是好事,抛开表象看实质才是人生真谛&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://t12.baidu.com/it/u=2969188778,835141674&amp;amp;fm=170&amp;amp;s=A021D71617604B053875BC7503004061&amp;amp;w=440&amp;amp;h=383&amp;amp;img.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;你所知道的不要全说你所看到的不要全信&#34;&gt;你所知道的不要全说,你所看到的不要全信&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://t11.baidu.com/it/u=162038482,1994257791&amp;amp;fm=170&amp;amp;s=4AA0CC4D401383D040DD853703006047&amp;amp;w=440&amp;amp;h=310&amp;amp;img.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;拥有资源的多少并不重要如果你不懂得利用永远都不够&#34;&gt;拥有资源的多少并不重要,如果你不懂得利用，永远都不够&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://t12.baidu.com/it/u=3812868509,2744098837&amp;amp;fm=170&amp;amp;s=BC39EE168645734D5607556503007068&amp;amp;w=500&amp;amp;h=370&amp;amp;img.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;不要墨守成规敢于创新才能打败对手&#34;&gt;不要墨守成规,敢于创新才能打败对手&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://t10.baidu.com/it/u=143048472,105707798&amp;amp;fm=170&amp;amp;s=5EB188414C3BE64554114DB40300E006&amp;amp;w=500&amp;amp;h=640&amp;amp;img.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;再努力一下或许就是成功&#34;&gt;再努力一下，或许就是成功&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://t12.baidu.com/it/u=1229687036,4281993718&amp;amp;fm=170&amp;amp;s=81A2FC165E615288A4CC716E03006065&amp;amp;w=500&amp;amp;h=400&amp;amp;img.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;有时候生活轻不轻松就看你选择了什么样的路&#34;&gt;有时候生活轻不轻松就看你选择了什么样的路&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://t11.baidu.com/it/u=1668921193,413581949&amp;amp;fm=170&amp;amp;s=E4A0F05AFEF2DBE71ABC9313030080F4&amp;amp;w=500&amp;amp;h=600&amp;amp;img.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;向你伸出手的人不一定真的要帮你&#34;&gt;向你伸出手的人不一定真的要帮你&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://t12.baidu.com/it/u=3280076306,970100612&amp;amp;fm=170&amp;amp;s=5C28A654C2035745533761A70300C06A&amp;amp;w=500&amp;amp;h=300&amp;amp;img.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;生活要懂得苦中作乐&#34;&gt;生活要懂得苦中作乐&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://t10.baidu.com/it/u=1118045751,3558766768&amp;amp;fm=170&amp;amp;s=1C36C21554067F5F5C9D98C3030060A1&amp;amp;w=492&amp;amp;h=377&amp;amp;img.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;你必须一路向前因为人生不能后退&#34;&gt;你必须一路向前，因为人生不能后退&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://t10.baidu.com/it/u=4071534834,523138430&amp;amp;fm=170&amp;amp;s=B10B905F0E135EDC941DB9F003000031&amp;amp;w=492&amp;amp;h=421&amp;amp;img.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;人和人的差距所在&#34;&gt;人和人的差距所在&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://t10.baidu.com/it/u=3809698035,494941344&amp;amp;fm=170&amp;amp;s=B1982F7F25536BCA54FE596B0300A07B&amp;amp;w=599&amp;amp;h=746&amp;amp;img.JPG&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;你永远无法满足所有人&#34;&gt;你永远无法满足所有人&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://images7n.ijia360.com/744676-b20266e42761b87b03553247abe7b55c&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;每个人都有得不到的东西&#34;&gt;每个人都有得不到的东西&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://images7n.ijia360.com/744676-031cefad50a73a0f4d768976863a1971&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;虚伪的朋友比诚实的敌人更可怕&#34;&gt;虚伪的朋友比诚实的敌人更可怕&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://images7n.ijia360.com/744676-d187a81d9972c17feb710c767a5d2596&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;老板和领导者的区别&#34;&gt;老板和领导者的区别&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://images7n.ijia360.com/744676-83c2c3b39a71d37017f3ee37e23c1a8f&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;别人的眼光毫无意义你对自己的看法才是最重要的&#34;&gt;别人的眼光毫无意义,你对自己的看法才是最重要的&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://images7n.ijia360.com/744676-b84e9e87fb0ee2a5b6bef58d25056bbd&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>孩子注意力不集中的4大危害！</title>
      <link>/teach/2017/092221-zhuyili/</link>
      <pubDate>Fri, 22 Sep 2017 21:09:37 +0800</pubDate>
      <guid>/teach/2017/092221-zhuyili/</guid>
      <description>&lt;p&gt;“三岁看大，七岁看老”,宝贝如果在幼年时期很难集中注意力，那宝爸宝妈们要警惕了！今天，就教大家几招训练孩子注意力的实用方法。&lt;/p&gt;&#xA;&lt;p&gt;浩浩是一名9岁的孩子，也是爸妈和老师眼中的“问题”孩子，经常上课不专心听讲、课下一做作业什么也不会，遇到期末考试，做的小测试经常只有四五十分……为此，班主任经常不是微信提醒家长，就是课下找家长谈话。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用Hugo</title>
      <link>/it/2019/hugoisforlovers/</link>
      <pubDate>Wed, 02 Apr 2014 00:00:00 +0000</pubDate>
      <guid>/it/2019/hugoisforlovers/</guid>
      <description>&lt;h2 id=&#34;第１步安装hugo&#34;&gt;第１步，安装Hugo&lt;/h2&gt;&#xA;&lt;p&gt;去 &lt;a href=&#34;https://github.com/spf13/hugo/releases&#34;&gt;hugo发行版&lt;/a&gt; 下载适合你操作系统和架构的版本．&lt;/p&gt;&#xA;&lt;h2 id=&#34;第２步创建文档&#34;&gt;第２步，创建文档&lt;/h2&gt;&#xA;&lt;p&gt;Hugo有示例站点，就像你正在读的文档这样．&lt;/p&gt;&#xA;&lt;p&gt;按以下步骤:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;克隆&lt;a href=&#34;http://github.com/spf13/hugo&#34;&gt;hugo仓库&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;进入repo&lt;/li&gt;&#xA;&lt;li&gt;运行hugo，创建文档&lt;/li&gt;&#xA;&lt;li&gt;打开浏览器http://localhost:1313&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;对应的指令:&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>/down/down/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/down/down/</guid>
      <description>&lt;!DOCTYPE html&gt;&#xA;&lt;html lang=&#34;zh-cn&#34;&gt;&#xA;        &#xA;    &lt;head&gt;&#xA;    &lt;link href=&#34;https://gmpg.org/xfn/11&#34; rel=&#34;profile&#34;&gt;&#xA;    &lt;meta charset=&#34;utf-8&#34;&gt;&#xA;&lt;meta http-equiv=&#34;X-UA-Compatible&#34; content=&#34;IE=edge&#34;&gt;&#xA;&lt;meta http-equiv=&#34;Cache-Control&#34; content=&#34;public&#34; /&gt;&#xA;&lt;!-- Enable responsiveness on mobile devices --&gt;&#xA;&lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0, maximum-scale=1&#34;&gt;&#xA;&lt;title&gt;工具/软件 下载 • 腾图博客,腾图工作室,Ease&lt;/title&gt;&#xA;&lt;meta name=&#34;description&#34; content=&#34;Ease的博客,腾图工作室&#34;&gt;&#xA;&lt;meta name=&#34;keywords&#34; content=&#34;Ease,腾图工作室&#34;&gt;&#xA;&lt;link rel=&#34;stylesheet&#34; href=&#34;/scss/hyde-hyde.9181f25ed2263aeb878ec6f8a84f10c4ebb16150000fca8767308880bdde5ca0.css&#34; integrity=&#34;sha256-kYHyXtImOuuHjsb4qE8QxOuxYVAAD8qHZzCIgL3eXKA=&#34;&gt;&#xA;&lt;link rel=&#34;stylesheet&#34; href=&#34;/scss/print.2744dcbf8a0b2e74f8a50e4b34e5f441be7cf93cc7de27029121c6a09f9e77bc.css&#34; integrity=&#34;sha256-J0Tcv4oLLnT4pQ5LNOX0Qb58&amp;#43;TzH3icCkSHGoJ&amp;#43;ed7w=&#34; media=&#34;print&#34;&gt;&#xA;&lt;link rel=&#34;stylesheet&#34; href=&#34;/css/ease.css&#34;&gt;&#xA;&#xA;&lt;!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --&gt;&#xA;&lt;!--[if lt IE 9]&gt;&#xA;&lt;script src=&#34;https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;https://oss.maxcdn.com/respond/1.4.2/respond.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;![endif]--&gt;&#xA;&lt;!-- Icons --&gt;&#xA;    &lt;link rel=&#34;apple-touch-icon-precomposed&#34; sizes=&#34;144x144&#34; href=&#34;/apple-touch-icon-144-precomposed.png&#34;&gt;&#xA;    &lt;link rel=&#34;shortcut icon&#34; href=&#34;/favicon.png&#34;&gt;&#xA;    &#xA;&lt;/head&gt;&#xA;&#xA;&#xA;    &lt;body class=&#34; &#34;&gt;&#xA;    &#xA;&lt;div class=&#34;sidebar&#34;&gt;&#xA;  &lt;div class=&#34;container &#34;&gt;&#xA;    &lt;div class=&#34;sidebar-about&#34;&gt;&#xA;      &lt;span class=&#34;site__title&#34;&gt;&#xA;        &lt;a href=&#34;http://i.scwy.net/&#34;&gt;Ease&lt;/a&gt;&#xA;      &lt;/span&gt;        &#xA;        &#xA;        &lt;div class=&#34;author-image&#34;&gt;&#xA;          &lt;img src=&#34;http://i.scwy.net/img/me.jpeg&#34; alt=&#34;Author Image&#34; class=&#34;img--circle img--headshot element--center&#34;&gt;&#xA;        &lt;/div&gt;&#xA;        &#xA;      &#xA;      &#xA;      &lt;p&gt;致力于利用IT和自动化技术,提升企业效能和客户体验. &lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>/down/movie/readme/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/down/movie/readme/</guid>
      <description>&lt;p&gt;爬取电影网站 &lt;a href=&#34;https://www.ai66.cc&#34;&gt;https://www.ai66.cc&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>/down/xima/readme/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/down/xima/readme/</guid>
      <description>&lt;p&gt;下载喜马拉雅音频内容到本地&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>/other/2020/jiepai/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/other/2020/jiepai/</guid>
      <description>&lt;!DOCTYPE html&gt;&#xA;&lt;html&gt;&#xA; &#xA;&lt;head&gt;&#xA;    &lt;meta charset=&#34;UTF-8&#34;&gt;&#xA;    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;&#xA;    &lt;meta http-equiv=&#34;X-UA-Compatible&#34; content=&#34;ie=edge&#34;&gt;&#xA;    &lt;title&gt;节拍器&lt;/title&gt;&#xA;    &lt;style&gt;&#xA;        *{padding: 0;margin: 0;}&#xA;        header{background-image: linear-gradient(to bottom,#4387fd,#4683ea);padding: 20px;font-size: 30px;color: #fff;}&#xA;        footer{padding: 20px;text-align: center;color: #ccc;}&#xA;        footer&gt;a{color: #999;}&#xA;        body&gt;section{text-align: center;padding: 20px;width: 300px;margin: auto;}&#xA;        body&gt;section&gt;section{margin: 30px auto;}&#xA;        body&gt;section&gt;section&gt;div{display: flex;justify-content:space-between;align-items: center;}&#xA;        button {padding: 5px 10px;}&#xA;        #btnTest {padding: 15px 30px;font-size: 20px;}&#xA;        #btnStop {display: none;}&#xA;        #speed{font-size: 50px;padding:0 20px;width: 100px;}&#xA;        #msg{height: 20px;padding-top: 5px; font-size: 9px;color: gray;}&#xA;    &lt;/style&gt;&#xA;    &lt;script&gt;&#xA; &#xA;        document.addEventListener(&#34;DOMContentLoaded&#34;, function () {&#xA; &#xA;            let speed = 60, //节拍速度&#xA;                arrClick = [],  //测速时每次点击的速度组成的数组，节拍速度取其平均值&#xA;                clickTime = 0,  //测速点击计时器，超过 3 秒清空数组&#xA;                s = Date.now(), //记录每一次点击的时间，下一次点击时与此时间的间隔，来计算速度&#xA;                time = 0,   //play 过程 timeout 变量&#xA;                isPlay = false, //是否正在播放&#xA;                speedMsg = document.getElementById(&#34;speed&#34;),    //页面正中间显示速度值的元素&#xA;                rangeValue = document.getElementById(&#34;rangeValue&#34;), //滑块元素&#xA;                showSpeed = () =&gt; rangeValue.value = speedMsg.innerText = speed;    //更新显示速度值的函数&#xA; &#xA;            /** 测速按钮点击 */&#xA;            document.getElementById(&#34;btnTest&#34;).addEventListener(&#34;click&#34;, function () {&#xA;                let lastSpeed = Math.floor(60000 / (Date.now() - s));&#xA;                if (lastSpeed - arrClick[arrClick.length - 1] &gt; 30) { arrClick = []; }  //如果点击时间和上次差别较大，则清零重测&#xA;                arrClick.push(lastSpeed);&#xA; &#xA;                if (arrClick.length &gt; 31) arrClick.shift(); //最大容量保持在30个（除去第 1 个不用）&#xA; &#xA;                //如果数量多于1个则计算速度（第 1 个时间间隔太久，不准确，弃之）&#xA;                if (arrClick.length &gt; 1) {&#xA;                    //取第2个到最后的平均值&#xA;                    speed = Math.ceil((arrClick.reduce((sum, n) =&gt; sum + n) - arrClick[0]) / (arrClick.length - 1));&#xA;                    if (arrClick.length &gt; 5) document.getElementById(&#34;msg&#34;).innerText = &#34;多点几次更准确...&#34;;&#xA;                }&#xA;                showSpeed();&#xA;                s = Date.now();&#xA;                document.getElementById(&#34;btnStop&#34;).click(); //测速时停止播放&#xA; &#xA;                //两次点击间隔大于 3 秒就重置&#xA;                window.clearTimeout(clickTime);&#xA;                clickTime = window.setTimeout(function () {&#xA;                    arrClick = [];&#xA;                    document.getElementById(&#34;msg&#34;).innerText = &#34;&#34;;&#xA;                }, 3000);&#xA; &#xA;            });&#xA; &#xA;            /** 播放按钮点击 */&#xA;            document.getElementById(&#34;btnPlay&#34;).addEventListener(&#34;click&#34;, function () {&#xA;                isPlay = true;&#xA;                play();&#xA;                this.style.display = &#34;none&#34;;&#xA;                document.getElementById(&#34;btnStop&#34;).style.display = &#34;inline-block&#34;;&#xA;            });&#xA; &#xA;            /** 停止按钮点击 */&#xA;            document.getElementById(&#34;btnStop&#34;).addEventListener(&#34;click&#34;, function () {&#xA;                window.clearTimeout(time);&#xA;                isPlay = false;&#xA;                this.style.display = &#34;none&#34;;&#xA;                document.getElementById(&#34;btnPlay&#34;).style.display = &#34;inline-block&#34;;&#xA;            });&#xA; &#xA;            /** 减号按钮点击 */&#xA;            document.getElementById(&#34;btnSub&#34;).addEventListener(&#34;click&#34;, function () {&#xA;                speed--;&#xA;                showSpeed();&#xA;            });&#xA; &#xA;            /** 加号按钮点击 */&#xA;            document.getElementById(&#34;btnAdd&#34;).addEventListener(&#34;click&#34;, function () {&#xA;                speed++;&#xA;                showSpeed();&#xA;            });&#xA; &#xA;            /** 滑动条更改 */&#xA;            rangeValue.addEventListener(&#34;change&#34;, function () {&#xA;                speed = this.value * 1;&#xA;                showSpeed();&#xA;            });&#xA; &#xA;            /** 播放 */&#xA;            let play = () =&gt; {&#xA;                window.clearTimeout(time);&#xA;                playsound();&#xA;                if (isPlay) {&#xA;                    time = window.setTimeout(play, Math.floor(60000 / speed));&#xA;                };&#xA;            }&#xA; &#xA;            let audioCtx = new AudioContext();&#xA;            /** 发声 */&#xA;            let playsound = () =&gt; {&#xA;                let oscillator = audioCtx.createOscillator();&#xA;                let gainNode = audioCtx.createGain();&#xA;                oscillator.connect(gainNode);&#xA;                gainNode.connect(audioCtx.destination);&#xA;                oscillator.type = &#39;sine&#39;;&#xA;                oscillator.frequency.setValueAtTime(220, audioCtx.currentTime);&#xA;                oscillator.frequency.linearRampToValueAtTime(50, audioCtx.currentTime + 0.1);&#xA;                gainNode.gain.setValueAtTime(0, audioCtx.currentTime);&#xA;                gainNode.gain.linearRampToValueAtTime(1, audioCtx.currentTime + 0.01);&#xA;                gainNode.gain.exponentialRampToValueAtTime(0.001, audioCtx.currentTime + 0.5);&#xA;                oscillator.start(audioCtx.currentTime);&#xA;                oscillator.stop(audioCtx.currentTime + 0.5);&#xA;            }&#xA;        });&#xA;    &lt;/script&gt;&#xA;&lt;/head&gt;&#xA; &#xA;&lt;body&gt;&#xA;    &lt;header&gt;节拍器&lt;/header&gt;&#xA;    &lt;section&gt;&#xA;        &lt;button id=&#34;btnTest&#34;&gt;连续点击测速&lt;/button&gt;&#xA;        &lt;div id=&#34;msg&#34;&gt;&lt;/div&gt;&#xA;        &lt;section&gt;&#xA;            &lt;div&gt;&#xA;                &lt;button id=&#34;btnSub&#34;&gt;&lt;svg style=&#34;width: 16px; height: 16px;vertical-align: middle;&#34; viewBox=&#34;0 0 1024 1024&#34; version=&#34;1.1&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M66.462276 431.621065l891.075447 0 0 127.296492L66.462276 558.917558 66.462276 431.621065z&#34;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&#xA;                &lt;div id=&#34;speed&#34;&gt;60&lt;/div&gt;&#xA;                &lt;button id=&#34;btnAdd&#34;&gt;&lt;svg style=&#34;width: 16px; height: 16px;vertical-align: middle;&#34; viewBox=&#34;0 0 1024 1024&#34; version=&#34;1.1&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M1024 448H576V0H448v448H0v128h448v448h128V576h448z&#34;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/button&gt;&#xA;            &lt;/div&gt;&#xA;            &lt;div&gt;&lt;input type=&#34;range&#34; style=&#34;width:100%;&#34; min=&#34;20&#34; max=&#34;300&#34; id=&#34;rangeValue&#34; value=&#34;60&#34;&gt;&lt;/div&gt;&#xA;        &lt;/section&gt;&#xA;        &lt;button id=&#34;btnPlay&#34;&gt;&#xA;            &lt;svg style=&#34;width: 32px; height: 32px;vertical-align: middle;&#34; viewBox=&#34;0 0 1024 1024&#34; version=&#34;1.1&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M196.394461 103.235223 196.394461 920.764777 827.604516 535.079648Z&#34;&gt;&lt;/path&gt;&lt;/svg&gt;&#xA;        &lt;/button&gt;&#xA;        &lt;button id=&#34;btnStop&#34;&gt;&#xA;            &lt;svg style=&#34;width: 32px; height: 32px;vertical-align: middle;&#34; viewBox=&#34;0 0 1024 1024&#34; version=&#34;1.1&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M256 256l512 0 0 512-512 0z&#34;&gt;&lt;/path&gt;&lt;/svg&gt;&#xA;        &lt;/button&gt;&#xA;    &lt;/section&gt;&#xA;&lt;/body&gt;&#xA; &#xA;&lt;/html&gt;</description>
    </item>
  </channel>
</rss>
