<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://blog.shengbin.me/feed.xml" rel="self" type="application/atom+xml" /><link href="https://blog.shengbin.me/" rel="alternate" type="text/html" /><updated>2026-06-10T08:16:29+08:00</updated><id>https://blog.shengbin.me/feed.xml</id><title type="html">胜彬的博客</title><subtitle>Just write.</subtitle><entry><title type="html">xargs</title><link href="https://blog.shengbin.me/posts/xargs" rel="alternate" type="text/html" title="xargs" /><published>2026-06-09T08:00:00+08:00</published><updated>2026-06-09T08:00:00+08:00</updated><id>https://blog.shengbin.me/posts/xargs</id><content type="html" xml:base="https://blog.shengbin.me/posts/xargs"><![CDATA[<p><a href="https://man7.org/linux/man-pages/man1/xargs.1.html">xargs</a>常常用于针对多个输入执行特定的命令。</p>

<!--more-->

<p>其使用方法如下：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>xargs [option ...] [command] [initial-argument ...]
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">[command]</code>是要执行的命令，如果不指定则默认为<code class="language-plaintext highlighter-rouge">echo</code>。
<code class="language-plaintext highlighter-rouge">[initial-argument ...]</code>是传给命令的前半部分初始参数，默认没有；命令的后半部分参数将从标准输入逐个读取，默认以空格或换行分隔。
可以用-d选项（<code class="language-plaintext highlighter-rouge">[option ...]</code>）来指定其他分隔符。</p>

<p>如果逐个读取的参数并不想接在最后部分，而是想放在初始参数的中间，可以用-I选项来实现。
<code class="language-plaintext highlighter-rouge">-I replace-str</code>会将初始参数中的“replace-str”（不指定则默认为“{}”）替换为逐个读取的内容。
使用了-I选项的话，读取时的分隔符就只有换行了。</p>

<p>如果不想从标准输入读取参数，而是想从某个文件读取，可以使用-a（–arg-file）选项。
这种情况下，command命令执行时标准输入未经改动，还能用作它原本的用途。
而没有-a的情况下，在command命令执行时标准输入就会被改为从/dev/null重定向，也就是啥输入也接收不到了。</p>

<p>我自己几乎不用-a选项，因为<code class="language-plaintext highlighter-rouge">xargs -a filename ...</code>大多时候都可以用<code class="language-plaintext highlighter-rouge">cat filename | xargs ...</code>来等效实现。</p>]]></content><author><name></name></author><category term="技术" /><category term="Linux" /><category term="命令行" /><summary type="html"><![CDATA[xargs常常用于针对多个输入执行特定的命令。]]></summary></entry><entry><title type="html">HDMI和DP转换</title><link href="https://blog.shengbin.me/posts/hdmi-dp-adapter" rel="alternate" type="text/html" title="HDMI和DP转换" /><published>2026-06-04T08:00:00+08:00</published><updated>2026-06-04T08:00:00+08:00</updated><id>https://blog.shengbin.me/posts/hdmi-dp-adapter</id><content type="html" xml:base="https://blog.shengbin.me/posts/hdmi-dp-adapter"><![CDATA[<p>今天使用一根DP到HDMI转接线时总是无信号，排查了半天才发现二者转接是有方向性的。</p>

<!--more-->

<p>新拿到这台小电脑上只有HDMI输出口，而我显示器的其他接口已经被占用了，只剩个DP输入口。
我便找了根一头是HDMI一头是DP的转接线来连接二者。结果插上后显示器总是提示DP口无信号。</p>

<p>首先确认了小电脑的HDMI输出是正常的，因为连到显示器的HDMI口能正常显示。
然后确认了显示器的DP输入也是可用的，因为拿别的电脑和DP线试了下，结果也正常显示。
别的电脑通过HDMI到DP的转接线连到显示器上同样不行，那看来就是转接出了问题。
假设这个转接线坏了吧，于是我又换了一个转接头，发现还是不行。</p>

<p>在网上查找资料之后，总算搞清楚了问题在哪儿。原来，我手上这个转接线和转接头，都是仅支持DP转HDMI的单向转换。
DP到HDMI的信号转换一般由输出端显卡来实现（这称为DP的双模功能，目前大多数显卡都已支持），因此线缆只起到了引脚转接的作用即可。
而反过来，HDMI到DP的信号转换就需要专门的芯片来实现了。
这就导致HDMI转DP的线缆或转接头要贵不少，而且通常还额外带一个USB插头来给内部芯片供电。
去京东分别搜索“HDMI转DP”和“DP转HDMI”就能看出二者的区别了。</p>

<p>之前一直以为能插上就能用，如今遇到问题了才学到个所以然。算是吃了一堑长了一智。</p>]]></content><author><name></name></author><category term="技术" /><category term="知识" /><category term="硬件" /><summary type="html"><![CDATA[今天使用一根DP到HDMI转接线时总是无信号，排查了半天才发现二者转接是有方向性的。]]></summary></entry><entry><title type="html">万智牌竞技场中排名前列</title><link href="https://blog.shengbin.me/posts/mtga-high-rank" rel="alternate" type="text/html" title="万智牌竞技场中排名前列" /><published>2026-06-03T08:00:00+08:00</published><updated>2026-06-03T08:00:00+08:00</updated><id>https://blog.shengbin.me/posts/mtga-high-rank</id><content type="html" xml:base="https://blog.shengbin.me/posts/mtga-high-rank"><![CDATA[<p>我曾感觉自己在万智牌竞技场的某个赛季中排到了前1200名但因为没有收到奖励而向客服进行了<a href="/posts/the-courtesy-of-wizards">反馈</a>。
新的赛季中，不需要再反馈了，因为直接收到了奖励！</p>

<!--more-->

<p>本文单纯是来展示通知我排名前列的邮件的。话不多说，直接上图。</p>

<p><img src="/images/2026-06-03-mtga-email.jpg" alt="" /></p>]]></content><author><name></name></author><category term="生活" /><category term="游戏" /><category term="记录" /><summary type="html"><![CDATA[我曾感觉自己在万智牌竞技场的某个赛季中排到了前1200名但因为没有收到奖励而向客服进行了反馈。 新的赛季中，不需要再反馈了，因为直接收到了奖励！]]></summary></entry><entry><title type="html">少儿编程</title><link href="https://blog.shengbin.me/posts/kids-learn-coding" rel="alternate" type="text/html" title="少儿编程" /><published>2026-06-01T08:00:00+08:00</published><updated>2026-06-01T08:00:00+08:00</updated><id>https://blog.shengbin.me/posts/kids-learn-coding</id><content type="html" xml:base="https://blog.shengbin.me/posts/kids-learn-coding"><![CDATA[<p>当程序员成为父亲，总想把编程这一技能尽早教给儿子。
我家娃进入小学二年级没多久，我就开始了解少儿编程这一领域了。
如今已经实践了一段时间，有所总结和思考。</p>

<!--more-->

<h2 id="从图形化积木编程开始">从图形化积木编程开始</h2>

<p>图形化积木编程的代表是Scratch。如下图所示：</p>

<p><img src="/images/2026-06-01-scratch.png" alt="" /></p>

<p>这类可视化的东西更容易引起小孩子的感兴趣，适合用于入门。</p>

<p>不过作为整套软件，Scratch还是稍微有点复杂。我一开始选取的下面这样更简单的课程：</p>

<p><img src="/images/2026-06-01-code-org.png" alt="" /></p>

<p>等零基础的孩子掌握了鼠标操作和基本的编程概念（顺序执行、循环、事件等）之后，再系统地学用Scratch。</p>

<h2 id="结合图形的文本编程">结合图形的文本编程</h2>

<p>接下来，如果不想直接进入纯文本写代码的阶段，可以用结合图形的文本编程过渡一下。
例如下面这个<a href="https://reeborg.ca/index_en.html">Reeborg’s world</a>网站，可以用多种程序语言来写代码控制一个机器人行动。</p>

<p><img src="/images/2026-06-01-reeborg.png" alt="" /></p>

<p>这种方式既保持了图形界面的乐趣，又可以练习使用键盘输入代码，一举两得。</p>

<h2 id="python还是c">Python还是C++</h2>

<p>当要开始真正写代码时，会面临一个问题：是学Python还是C++？</p>

<p>Python相比C++，语法上更容易一些。另外据我了解，网上学Python的资料也比C++多。</p>

<p>不过，我最终还是决定直接从C++开始学。原因有以下几点。
首先，对于小孩子来说，编程语言都是新事物，语法上的难度差异体现不明显。
其次，C++比Python更接近底层一些，有助于打下更好的计算机基础（当然了，教的时候对于指针、内存等底层概念的介绍要注意节奏，尽量等后期再按需引入）。
最后也是最关键的，是因为国内的信息技术奥赛目前只支持C++。
孩子从小学编程多多少少会有参加考级和竞赛进而辅助升学之目的，如果从Python开始学，后面仍需转换语言，徒增时间成本。
综上考虑，我判断用Python做过渡是得不偿失的。
假如之后竞赛语言放开自选了，那么从Python开始学或许会是更好的选择。</p>

<p>无论怎样，从小学习编程都是有好处的。即使不写代码，培养一些解决问题的编程思维也是不错的收获。
如果对此感兴趣，欢迎联系。</p>]]></content><author><name></name></author><category term="技术" /><category term="娃" /><category term="编程" /><summary type="html"><![CDATA[当程序员成为父亲，总想把编程这一技能尽早教给儿子。 我家娃进入小学二年级没多久，我就开始了解少儿编程这一领域了。 如今已经实践了一段时间，有所总结和思考。]]></summary></entry><entry><title type="html">巫师的善意</title><link href="https://blog.shengbin.me/posts/the-courtesy-of-wizards" rel="alternate" type="text/html" title="巫师的善意" /><published>2026-05-17T08:00:00+08:00</published><updated>2026-05-17T08:00:00+08:00</updated><id>https://blog.shengbin.me/posts/the-courtesy-of-wizards</id><content type="html" xml:base="https://blog.shengbin.me/posts/the-courtesy-of-wizards"><![CDATA[<p>标题中的巫师（Wizards），更适当的翻译应该是威世智，即万智牌背后的公司（Wizards of The Coast）。
本文记录的是我与该公司客服的一次交道。</p>

<!--more-->

<p><a href="/posts/mtg-arena">之前一篇文章</a>中提到，在万智牌竞技场中进入月末排名的251至1200名将获得20点入围点数。
上个月我在离月末还有几个小时的时候，排名达到了937名。我还特意截了个图：</p>

<p><img src="/images/2026-05-17-screenshot.jpg" alt="" /></p>

<p>当时北京时间已经很晚了，我就去睡觉了。第二天，游戏中页面已经变为新的月初重置后的信息了。
因此，我并不知道最终排名是多少。</p>

<p>5月份过了两周，我一直没收到20点入围点数的奖励。难道最后几个小时排名从900多跌出了1200之外？
带着这个疑问，我联系了威世智的客服，希望核查一下。</p>

<p>下面是沟通的截图：</p>

<p><img src="/images/2026-05-17-request.png" alt="" /></p>

<p>可以看到，结果是令人满意的，客服很爽快地给我补发了奖励。</p>

<p>不过有意思的是，她（Marlin）提到这是“As a courtesy”。这个词表示出于礼貌、善意，有点非义务性、非必须的隐含意义。
客服没有明确给出核查的结果，甚至都无法确定她是否核查过。
存在下面这种可能，她核查后发现其实排名已经落后了，不过既然我联系了，就干脆出于善意额外发一份奖励吧，反正对公司也几乎没啥损失。</p>

<p>当然，这种可能性也是我出于善意的揣测。如果恶意揣测的话，那就是这公司的排名和奖励系统不靠谱，客服也不够严谨负责……</p>

<p>考虑到美国总统两天前刚来中国进行过善意的拜访，这时候中美两国人民互相表达善意倒也颇合时宜。</p>]]></content><author><name></name></author><category term="生活" /><category term="游戏" /><category term="记录" /><summary type="html"><![CDATA[标题中的巫师（Wizards），更适当的翻译应该是威世智，即万智牌背后的公司（Wizards of The Coast）。 本文记录的是我与该公司客服的一次交道。]]></summary></entry><entry><title type="html">万智牌竞技场</title><link href="https://blog.shengbin.me/posts/mtg-arena" rel="alternate" type="text/html" title="万智牌竞技场" /><published>2026-04-30T08:00:00+08:00</published><updated>2026-04-30T08:00:00+08:00</updated><id>https://blog.shengbin.me/posts/mtg-arena</id><content type="html" xml:base="https://blog.shengbin.me/posts/mtg-arena"><![CDATA[<p>万智牌（Magic The Gathering， MTG）是一种集换式卡牌，它的线上版本称为万智牌竞技场（MTG Arena）。</p>

<!--more-->

<p>我从去年五月份开始入坑万智牌。虽然也买过一些实体卡牌，方便和孩子在家玩，但我主要还是使用万智牌竞技场在线玩。
从定位上看，万智牌的线上版本是为辅助其实体版本而存在的。这点不同于我之前喜欢玩的三国杀。三国杀恐怕已经变得以线上为主，线下基本没什么存在感了吧。</p>

<h2 id="游戏模式">游戏模式</h2>

<p>万智牌竞技场中的游戏模式也和实体一样，分为构筑（Construct）和限制（Limit）两大类。
构筑模式允许玩家从自己拥有的整个牌库中选取卡牌来构筑牌组，前期需要收集卡牌来充实牌库，有了好的牌组后就可以无限次免费游玩了。
而限制模式则不同，每次都要花费购买新的卡牌包，并局限在新拆的包中来选取牌组（这也是“限制”名称的由来）。
两种模式都有需要付入场费的活动场，参与后根据输赢情况得到或多或少的奖励。</p>

<p>此外，玩家还可以选择是否参与排名（Ranked），也就是很多游戏都会有的天梯机制。
如果参与，则每次游戏的输赢都会最终决定其每个月的等级和名次。
不参与排名的话，就没有输赢的压力了（尤其是免费游玩时），不过似乎也就没什么动力了。</p>

<h2 id="竞技之路">竞技之路</h2>

<p>玩家一旦参与排名，便算是走上了竞技之路。</p>

<p>线上竞技的最终目标是在竞技场锦标赛（Arena Championship）中胜出。
这个赛事一年有3次，每隔4个月的周末两天举办。
竞技场锦标赛的参赛者主要通过每月一次的周末预选赛（Qualifier Weekend）来选拔。
而要参加周末预选赛，也需要在平时的线上游玩中提升排名、证明自己的实力。</p>

<p>每个月末所有玩家计算排名，前250名可以参加下个月的周末预选赛。
其他玩家如果想要参加，就需要先进行一次资格入围赛（Qualifier Play-In）。
资格入围赛在周末预选赛之前一周举行，人人都可以付费或是通过消耗20点入围点数（Play-In Points）来参加。</p>

<p>赚取入围点数有两个途径：一是进入月末排名的251至1200名，将直接获得20点；二是在平时的活动中胜利通关，每次可获得1点。</p>

<p>总之，参加入围赛可以靠钱也可以靠技术，但接下来参加预选赛和锦标赛则只能靠技术。</p>

<h2 id="从线上到线下">从线上到线下</h2>

<p>竞技场锦标赛的优胜者除了获得奖金，前2名将直接受邀参加万智牌领域的最高规格赛事：世界锦标赛（Magic World Championship）。
前16名也将受邀参加职业巡回赛（Pro Tour），从中争取世界锦标赛的名额。这些线下赛事等有机会再另写一篇文章细说。</p>]]></content><author><name></name></author><category term="生活" /><category term="游戏" /><summary type="html"><![CDATA[万智牌（Magic The Gathering， MTG）是一种集换式卡牌，它的线上版本称为万智牌竞技场（MTG Arena）。]]></summary></entry><entry><title type="html">虚惊一场</title><link href="https://blog.shengbin.me/posts/false-alarm" rel="alternate" type="text/html" title="虚惊一场" /><published>2026-04-18T20:00:00+08:00</published><updated>2026-04-18T20:00:00+08:00</updated><id>https://blog.shengbin.me/posts/false-alarm</id><content type="html" xml:base="https://blog.shengbin.me/posts/false-alarm"><![CDATA[<p>不知道是否因为我刚写了上一篇文章<a href="/posts/sudden-cardiogenic-death">《心源性猝死及其救治》</a>的缘故，最近经历了心脏相关的虚惊一场。</p>

<!--more-->

<p>事情开始于大概两周前。当时，我带孩子去游戏厅玩，回来的路上感觉到有点心跳不稳和大脑眩晕。
因为不久前才了解过心源性猝死，所以我十分担心，立即就去医院胸痛中心做了急诊检查。
检查的目的是排除心肌梗死。结果指标都正常，我就回家了。</p>

<p>谁料接下来这几天症状越来越多，越来越吓人。我记录的有：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>左胸口刺痛，隔几分钟一次，持续一两小时。
睡觉前躺下的时候出汗、眩晕；正胸口堵得慌，像压了块石头似的。
走路快一点或上下楼梯时，左心口闷痛；有时感觉胃痛。
早上进电梯时有点晕；站立一会儿左肩刺痛，隔一分钟一次，持续多次。
多次左胸口闷痛、左下腹痛、左后背痛、左上臂痛……
</code></pre></div></div>

<p>网上一搜，这些都符合心肌梗死或心肌缺血的症状。于是我再次约了门诊去看医生。
这次医生听了我的描述，看了心电图没啥异常，就问我最近是不是焦虑。
我当时挺纳闷，最近没什么焦虑的事情啊。
医生也不好明确下结论，只是比较轻描淡写的说道“应该不是心脏的问题”。
我提前做过了调研，便商量道：“我看网上说心梗的话做心脏彩超也查不出啥来，心电图也是发作后才能看出来，是不是得做动态心电图、冠脉CTA或冠脉造影啊。”
医生说，“你这种情况一般还没到需要做那些的时候，你要实在担心的话我给你开个运动心电图单子吧，你去看啥时候能约上。”
最后医生还补充了一句，“别老去网上看”，“去神经内科看看”。</p>

<p>运动负荷心电图约到了一周后。等待期间，我症状还在，而且继续上网到处查资料。
在查资料时，我发现原来有一种病叫做“<a href="https://baike.baidu.com/item/%E5%BF%83%E8%84%8F%E7%A5%9E%E7%BB%8F%E5%AE%98%E8%83%BD%E7%97%87">心脏神经官能症</a>”。
它是说心脏本身并没有器质性病变，纯心理作用导致的心血管相关的不适感；而且患者越是担心忧虑，症状反而越持续不消失。
再联想到前面医生说的话，我有点明白了。
她估计已经猜到我是得了这种神经症，但没法把话说绝对，只能通过进一步检查来排除心脏问题。</p>

<p>后来的运动负荷心电图没发现任何异常，而且为了更加放心，运动完我又立即抽血查了肌钙蛋白等心肌损伤的指标，最终也都正常。
这下基本可以排除心梗了。确实是虚惊一场。</p>

<p>经历了这一事件，我应该会更加重视身体健康了。
我之所以心理负担这么重，除了受心源性猝死的新闻影响外，还有个因素是近几年体检中血脂相关指标一直偏高。
虽然给医生看的时候她说你这高了一点没事，我还是不免为之焦虑（甚至得了医学意义上的焦虑症）。
此后，我将开始控制饮食，争取下次体检血脂正常。</p>]]></content><author><name></name></author><category term="生活" /><category term="知识" /><category term="记录" /><category term="健康" /><summary type="html"><![CDATA[不知道是否因为我刚写了上一篇文章《心源性猝死及其救治》的缘故，最近经历了心脏相关的虚惊一场。]]></summary></entry><entry><title type="html">心源性猝死及其急救</title><link href="https://blog.shengbin.me/posts/sudden-cardiogenic-death" rel="alternate" type="text/html" title="心源性猝死及其急救" /><published>2026-03-25T08:00:00+08:00</published><updated>2026-03-25T08:00:00+08:00</updated><id>https://blog.shengbin.me/posts/sudden-cardiogenic-death</id><content type="html" xml:base="https://blog.shengbin.me/posts/sudden-cardiogenic-death"><![CDATA[<p>猝死就是突然的死亡。医学上将猝死分为了两类：心源性和非心源性，其中心源性猝死占比80%。
可见心源性猝死的重要性。</p>

<!--more-->

<p>顾名思义，心源性猝死就是由来源于心脏的因素导致的突然死亡。
绝大部分情况下，这一致命因素是心室颤动，简称室颤。</p>

<p>室颤，即心室无规律地颤动，丧失了正常情况下有序跳动的泵血功能。
这种情况也称作心搏骤停。一旦心跳停了，最严重的后果就是大脑缺血，造成不可逆的损伤，最终导致死亡。
发生心搏骤停后的4分钟是抢救的关键期。
这期间实施心肺复苏术（CPR）并使用自动体外除颤仪（AED）可大大提高存活率。</p>

<p>CPR主要操作包括两方面：一是胸外按压来帮助泵血，二是人工呼吸来帮助供氧。
胸外按压约每秒两次，按压起伏要达到5厘米；每按30次做两次人工呼吸。
人工呼吸时捏住鼻子吹气1秒使其胸廓隆起，然后松开鼻子让其自然呼气。</p>

<p>如果说CPR是临时替代心脏的功能，那么AED的作用则是使心脏消除颤动、恢复正常功能。
AED一般都附带使用说明和语音提示，遵照使用即可。
需要注意的是，AED没到位之前，要先进行CPR；AED电击后，如果患者未恢复呼吸和心跳，则继续进行CPR，两分钟后AED会再次分析心律并提示操作。</p>

<p>现场的急救如果保住了大脑等重要器官，送医之后存活的概率就大大增加，也就防止了猝死。</p>

<p>心脏骤停的危急程度高于另一个容易与之混淆的概念：心肌梗死，简称心梗。
心梗是心血管的梗阻导致了心脏局部肌肉缺血坏死，虽然也影响心脏功能，但一般不会那么快危及生命。
急性心梗发作时会有持续30分钟左右的心前区疼痛和憋闷感，可舌下含服硝酸甘油缓解，然后就医。
和心梗类似的脑梗，是脑部组织因脑血管梗阻而坏死，症状有眩晕、瘫痪等。
心脑梗死的根源在于血脂异常、动脉硬化等一系列血管疾病，虽然也应重视，但和猝死的关系就另说了。</p>

<p>最后，要避免心源性猝死的发生，应尽量减少其诱发因素，例如过度劳累、剧烈运动、情绪异常等。
如果出现了先兆，如胸痛胸闷、心慌心悸、晕厥、疲乏等，更要警惕了！</p>

<p>爱情诚可贵，自由价更高，若为生命故，二者皆可抛。人到中年，愈加惜命。</p>]]></content><author><name></name></author><category term="生活" /><category term="知识" /><summary type="html"><![CDATA[猝死就是突然的死亡。医学上将猝死分为了两类：心源性和非心源性，其中心源性猝死占比80%。 可见心源性猝死的重要性。]]></summary></entry><entry><title type="html">Windows热点自动开启</title><link href="https://blog.shengbin.me/posts/auto-start-windows-hotspot" rel="alternate" type="text/html" title="Windows热点自动开启" /><published>2026-02-09T08:00:00+08:00</published><updated>2026-02-09T08:00:00+08:00</updated><id>https://blog.shengbin.me/posts/auto-start-windows-hotspot</id><content type="html" xml:base="https://blog.shengbin.me/posts/auto-start-windows-hotspot"><![CDATA[<p>我在自己的Windows电脑上设置了热点，但它默认情况下不会随着电脑启动而自动开启，而我又容易忘记手动操作。
为解决此问题，我增加了一个脚本来开启热点，并让该脚本开机自动执行。</p>

<!--more-->

<p>脚本内容如下：</p>

<div class="language-ps highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nf">;@Findstr</span> <span class="nf">-bv</span> <span class="nf">;@F</span> <span class="nf">"</span><span class="c1">%~f0" | powershell -command - &amp; goto:eof</span>

<span class="nf">Add-Type</span> <span class="nf">-AssemblyName</span> <span class="nf">System.Runtime.WindowsRuntime</span>

<span class="nf">$connectionProfile</span> <span class="nf">=</span> <span class="p">[</span><span class="nf">Windows.Networking.Connectivity.NetworkInformation,Windows.Networking.Connectivity,ContentType=WindowsRuntime</span><span class="p">]</span><span class="nf">::GetInternetConnectionProfile</span><span class="s">()</span>
<span class="nf">$tetheringManager</span> <span class="nf">=</span> <span class="p">[</span><span class="nf">Windows.Networking.NetworkOperators.NetworkOperatorTetheringManager,Windows.Networking.NetworkOperators,ContentType=WindowsRuntime</span><span class="p">]</span><span class="nf">::CreateFromConnectionProfile</span><span class="s">($connectionProfile)</span> 

<span class="nf">Function</span> <span class="nf">EnableHotspot</span> <span class="p">{</span>
    <span class="kr">if</span> <span class="s">($tetheringManager.TetheringOperationalState -eq 1)</span> <span class="p">{</span>
        <span class="nf">"Hotspot</span> <span class="nf">is</span> <span class="nf">already</span> <span class="nf">On!"</span>
    <span class="p">}</span> <span class="nf">else</span> <span class="p">{</span>
        <span class="nf">"Hotspot</span> <span class="nf">is</span> <span class="nf">off!</span> <span class="nf">Turning</span> <span class="nf">it</span> <span class="nf">on"</span>
        <span class="nf">$tetheringManager.StartTetheringAsync</span><span class="s">()</span> <span class="nf">|</span> <span class="nf">Out-Null</span>
    <span class="p">}</span>
<span class="p">}</span>

<span class="nf">Function</span> <span class="nf">DisableHotspot</span> <span class="p">{</span>
    <span class="kr">if</span> <span class="s">($tetheringManager.TetheringOperationalState -eq 0)</span> <span class="p">{</span>
        <span class="nf">"Hotspot</span> <span class="nf">is</span> <span class="nf">already</span> <span class="nf">Off!"</span>
    <span class="p">}</span> <span class="nf">else</span> <span class="p">{</span>
        <span class="nf">"Hotspot</span> <span class="nf">is</span> <span class="nf">on!</span> <span class="nf">Turning</span> <span class="nf">it</span> <span class="nf">off"</span>
        <span class="nf">$tetheringManager.StopTetheringAsync</span><span class="s">()</span> <span class="nf">|</span> <span class="nf">Out-Null</span>
    <span class="p">}</span>
<span class="p">}</span>

<span class="nf">EnableHotspot</span>
</code></pre></div></div>

<p>这里面的大部分内容是Windows PowerShell的代码，但它其实是作为批处理文件（.bat）来保存和运行的。
其中第一行的意思是将该文件之后的字符串都作为参数传给<code class="language-plaintext highlighter-rouge">powershell -command</code>命令。
该命令即调用系统的powershell解释器来执行传给它的脚本代码。
之所以这样做，是因为Windows不支持开机直接运行PowerShell的脚本文件，或许觉得其过于强大（Power），容易有安全隐患吧。
批处理文件不受这一限制，但它又不便于实现热点的开启，所以最终做成了上面这种PowerShell代码嵌入到批处理文件中的形式。</p>

<p>为使上述批处理文件开机自动运行，将其放在<code class="language-plaintext highlighter-rouge">C:\Users\Shengbin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup</code>文件夹下即可。
此外还能通过添加任务计划程序或者修改注册表来实现，不过感觉没那么便捷了。</p>]]></content><author><name></name></author><category term="技术" /><category term="Windows" /><category term="Wi-Fi" /><summary type="html"><![CDATA[我在自己的Windows电脑上设置了热点，但它默认情况下不会随着电脑启动而自动开启，而我又容易忘记手动操作。 为解决此问题，我增加了一个脚本来开启热点，并让该脚本开机自动执行。]]></summary></entry><entry><title type="html">今年读的书</title><link href="https://blog.shengbin.me/posts/the-books-i-read-this-year" rel="alternate" type="text/html" title="今年读的书" /><published>2025-12-31T08:00:00+08:00</published><updated>2025-12-31T08:00:00+08:00</updated><id>https://blog.shengbin.me/posts/the-books-i-read-this-year</id><content type="html" xml:base="https://blog.shengbin.me/posts/the-books-i-read-this-year"><![CDATA[<p>2025年要结束了，并没有太多感慨要发。不过回顾了今年读的书，发现还是比较有特色的。
如果用一个关键词来概括的话，那就是：经典。</p>

<!--more-->

<p>下面是我今年<a href="https://book.douban.com/people/msb91/collect">读书</a>的汇总图。</p>

<p><img src="/images/2025-12-31-douban-books.jpg" alt="" /></p>

<p>图中显示读过14本，不过总册数应该有20了，因为其中的《银河帝国》，副标题“基地七部曲”，其实包括了7册。</p>

<p>今年读的“基地”系列和“太空漫游”系列，都是科幻小说的经典名著。
我之前看过改编的影视，印象就很深，尤其是《太空漫游2001》电影里那个猴子扔骨头变成飞船的场景。
几年前，我就收集了这两个系列的电子书，不过一直没能坚持读下去。
今年总算清掉了这两大存货。基地七部曲是买的纸质书，一口气看完；太空漫游系列则是读的电子版。</p>

<p>在找存货的时候，我发现自己的电子书文件夹里还有另一个未读的经典：《悲惨世界》。
这部小说的剧情我自以为很熟悉，因为我曾把它改编的歌剧和电影各个版本几乎都刷了个遍。
但遗憾的是之前一直没读原著。今年读完之后，确实酣畅淋漓，大为满足。
我特意再去看了一遍电影，才发现自己印象中震撼无比的电影与原著比起来，也只能说相形见绌了。
雨果这位文学大师，果然名不虚传。</p>

<p>另一部今年开读的经典是《计算机程序设计艺术》（The Art of Computer Programming，TAOCP）。
该书分为好几卷，我刚读完第一卷。作者实力不凡，据说仍在写作后面几卷。
我是慕名而读的，感觉这部书除了太难，倒也的确是本好书。</p>

<p>有时候对某些书多少会有点情结吧，不读不快。今年着实爽快了几次。</p>]]></content><author><name></name></author><category term="生活" /><category term="总结" /><category term="记录" /><summary type="html"><![CDATA[2025年要结束了，并没有太多感慨要发。不过回顾了今年读的书，发现还是比较有特色的。 如果用一个关键词来概括的话，那就是：经典。]]></summary></entry><entry><title type="html">我们的医保情况</title><link href="https://blog.shengbin.me/posts/our-medical-insurance" rel="alternate" type="text/html" title="我们的医保情况" /><published>2025-12-12T08:00:00+08:00</published><updated>2025-12-12T08:00:00+08:00</updated><id>https://blog.shengbin.me/posts/our-medical-insurance</id><content type="html" xml:base="https://blog.shengbin.me/posts/our-medical-insurance"><![CDATA[<p>最近孩子学校通知家长为明年的医保缴费，趁此机会我详细了解了下我们的医保情况。</p>

<!--more-->

<h2 id="费用和待遇">费用和待遇</h2>

<p>我们所在地北京，和其他城市应该一样，医保按人群分为两类：职工医疗保险和居民医疗保险。</p>

<h3 id="职工医疗保险">职工医疗保险</h3>

<p>对于职工医疗保险，每月需要缴纳的费用大概是工资的8%，由个人和所在单位分担。
我之前写的一篇文章<a href="/posts/social-insurance-and-housing-fund">《社保与公积金》</a>，里面提到过相关信息。</p>

<p>职工医疗保险的待遇如下图所示。这里只包含门急诊，另有住院的，因我们没涉及过，暂时忽略。</p>

<p><img src="/images/2025-12-12-employee-benefits.png" title="职工医疗保险的待遇（网图侵删）" width="500px" /></p>

<p>图中的起付线是指一年累计的就医花费超过这个值之后的部分才能由医保报销。
以在职职工为例，如果当年看病花的钱还没有超过1800元，是都要自费的。
不过挂号费似乎不受此限制，每次都可以报销一大部分。</p>

<h3 id="居民医疗保险">居民医疗保险</h3>

<p>居民包括老人、小孩、失业人员、农民等没有就职单位的人群。
居民医保费用一年仅需几百元，较职工的每月几百元甚至几千元要低不少。
我刚给两个孩子交的2026年费用，每人435元。</p>

<p>相比职工，居民医保的待遇也大不一样，起付线和报销比例要低很多。具体可参见下图。</p>

<p><img src="/images/2025-12-12-resident-benefits.png" title="居民医疗保险的待遇（网图侵删）" width="600px" /></p>

<p>这个差异的初衷大概是考虑居民群体收入低、小病多、买药频繁等特点，让他们不用花太多钱就很容易得到报销。
按医院级别区分，则明显是鼓励大家多去小医院，没事别都往三甲挤……</p>

<h2 id="家庭共济和代办">家庭共济和代办</h2>

<p>从前几年开始，职工每月缴纳的医保个人部分无法再提取出来了，只能放在帐户里消费。
与之配套出台的政策是家庭共济制度，也就是说，家庭成员可以花我医保帐户里的钱了。
此后，我家两个孩子的（包括我自己的）就医花费就全由我的医保缴费（个人部分）来覆盖了。</p>

<p>不仅他们看病时直接由我代扣费用，甚至他们每年缴纳的医保费用也是如此。
前面说到，我刚给孩子交的每人435元钱，其实是自动从我医保帐户里扣除的，都没经我操作！</p>

<p>当然，这样便捷扣费的前提是我将俩娃绑定为了家庭共济成员。
此外，我发现医保系统还支持将我绑定为他们的代办人，在线代其办理查询、变更等各项事务。
于是，我登录系统查询了自己和两个孩子过去几年的医疗消费情况，下面做个回顾。</p>

<h2 id="历年回顾">历年回顾</h2>

<p>从北京市医保局的医保服务网站（<a href="https://ybfw.ybj.beijing.gov.cn/">https://ybfw.ybj.beijing.gov.cn/</a>，网址是拼音首字母，还算美观）可以很方便查询本人和代查他人的数据。
查询我家二娃今年的医疗消费信息结果截图如下：</p>

<p><img src="/images/2025-12-12-zhengyan-2025-cost.png" alt="" /></p>

<p>可以看出，这小家伙2025年上半年和下半年各去了一趟海淀医院，共花了6笔费用，总计841.96元，其中医保给报了93.37元。
这和上面展示的居民医保门诊（二级和三级医院）起付线550元，报销比例50%大致是相符的。</p>

<p>由于今年他的医保报销（仅93元左右）少于缴费（400元左右），因此从结果来看是“亏钱”的，算是为医保基金做了贡献。
2024年，其医疗费用总额2256元，医保支付总额717元，算是“赚到”了一点。
2023年，花费693元，报销40元，更是亏了不少……
不过呢，这方面的亏赚不能只看钱，如果我们认为健康更重要，那么赚即是亏，亏即是赚！</p>

<p>下表列出我家大娃和我自己近几年的医疗费用（括号外是总额，括号内是医保报销的部分）：</p>

<table>
  <thead>
    <tr>
      <th> </th>
      <th>2021年</th>
      <th>2022年</th>
      <th>2023年</th>
      <th>2024年</th>
      <th>2025年</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>我家大娃</td>
      <td>2286（845）</td>
      <td>5475（2197）</td>
      <td>8183（3361）</td>
      <td>4522（2016）</td>
      <td>1631（528）</td>
    </tr>
    <tr>
      <td>我自己</td>
      <td>327（80）</td>
      <td>605（80）</td>
      <td>588（40）</td>
      <td>2246（238）</td>
      <td>5004（2255）</td>
    </tr>
  </tbody>
</table>

<p>可以看到，老大过去这几年看病花了不少钱。
其实都是感冒、鼻炎这类我觉得不去医院也行但他妈妈非要去的病症，今年开始没那么多了。
今年我自己的花费突增，是因为做了一个牙齿根管治疗。</p>

<p>临近年底了，对医疗花费情况做个年度回顾，倒也不失为一种颇合时宜的跟风之作。</p>]]></content><author><name></name></author><category term="生活" /><category term="知识" /><category term="记录" /><category term="娃" /><summary type="html"><![CDATA[最近孩子学校通知家长为明年的医保缴费，趁此机会我详细了解了下我们的医保情况。]]></summary></entry><entry><title type="html">从Windows克隆Git仓库</title><link href="https://blog.shengbin.me/posts/git-clone-from-windows" rel="alternate" type="text/html" title="从Windows克隆Git仓库" /><published>2025-08-26T08:00:00+08:00</published><updated>2025-08-26T08:00:00+08:00</updated><id>https://blog.shengbin.me/posts/git-clone-from-windows</id><content type="html" xml:base="https://blog.shengbin.me/posts/git-clone-from-windows"><![CDATA[<p>Windows不如Linux更适合开发者。当我试图从Windows上克隆一个Git仓库时再次深刻体会到了这一点。</p>

<!--more-->

<p>如果Git仓库是在Linux系统上，例如位于<code class="language-plaintext highlighter-rouge">/projects-path/my-repo</code>，我们可以直接通过加上远端机器地址前缀（host）来将它克隆下来：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone host:/projects-path/my-repo
</code></pre></div></div>

<p>和从本地目录克隆一样简单。</p>

<p>不过我面临的情况下，仓库位于另一台Windows机器上（<code class="language-plaintext highlighter-rouge">Z:\projects-path\my-repo</code>），上述命令就没那么容易成功了。</p>

<p>首先，Windows默认是没有开启SSH服务的，需要操作一番。这包括安装这一可选功能、启动服务、设置为自启动。
好在启动SSH服务时Windows系统会自动增加防火墙规则来允许22端口的通信。</p>

<p>如果你像我一样，曾怀疑连接到Windows机器的网络有问题，想通过ping命令测试一下，那就容易被误导。
默认情况下是ping不通的，并非因为网络不通，而是因为Windows防火墙禁用了ping命令所依赖的ICMP协议。
这在Linux上理所当然能用的功能在Windows上还要手动配置一下。</p>

<p>接下来，Git能通过SSH访问Windows了，但执行<code class="language-plaintext highlighter-rouge">git clone host:/Z:/projects-path/my-repo</code>总是报如下错误：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>fatal: ''/Z:/projects-path/my-repo'' does not appear to be a git repository
</code></pre></div></div>

<p>看到这一报错第一感觉是路径形式没写对。
可是试了把<code class="language-plaintext highlighter-rouge">/Z:/projects-path/my-repo</code>换为<code class="language-plaintext highlighter-rouge">Z:/projects-path/my-repo</code>、<code class="language-plaintext highlighter-rouge">/Z/projects-path/my-repo</code>等多种形式都报错，斜杠换成反斜杠也不行。</p>

<p>查到网上<a href="https://superuser.com/a/1841390/3112705">一个帖子</a>才总算弄清楚了，原来是Windows的SSH服务默认使用的终端Cmd.exe存在路径兼容性问题。
这时也才注意到，上面报错中有两个引号，Cmd.exe把<code class="language-plaintext highlighter-rouge">'/Z:/projects-path/my-repo'</code>（包括引号）当作路径去使用了。
按照该帖子的方法替换Git内部工具（git-upload-pack）果然就可以成功克隆了。</p>

<p>在替换Git内部工具的过程中，需要修改<code class="language-plaintext highlighter-rouge">PATH</code>环境变量。为使修改生效，SSH服务也要重启。此外，对于SSH服务使用的环境变量，不能用<code class="language-plaintext highlighter-rouge">%USERPROFILE%</code>代替用户目录（我干脆直接写了绝对路径），因为会被替换为另一个配置项……这都是操作过程中踩出的坑啊。</p>

<p>最后虽然达到了目的，但我总觉得魔改Git内部工具的方法有点不优雅。
既然是Cmd.exe的兼容性导致的问题，那是不是将SSH服务的终端换为PowerShell也能解决呢？
这个方法经验证也是可行的。
不过要替换SSH服务所用的终端呢，就只能通过Windows代表性手段——修改注册表——来实现了！
具体参见我在<a href="https://superuser.com/a/1841390/3112705">那个帖子</a>下面评论里做的补充。</p>]]></content><author><name></name></author><category term="技术" /><category term="Windows" /><category term="Git" /><summary type="html"><![CDATA[Windows不如Linux更适合开发者。当我试图从Windows上克隆一个Git仓库时再次深刻体会到了这一点。]]></summary></entry></feed>