<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.2.2">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2024-09-08T02:15:08+00:00</updated><id>/feed.xml</id><title type="html">Home of Derican</title><subtitle>A simple blog for Derican</subtitle><entry><title type="html">当我们在选择保研的时候，究竟在选择什么</title><link href="/blog/%E5%BD%93%E6%88%91%E4%BB%AC%E5%9C%A8%E9%80%89%E6%8B%A9%E4%BF%9D%E7%A0%94%E7%9A%84%E6%97%B6%E5%80%99-%E7%A9%B6%E7%AB%9F%E5%9C%A8%E9%80%89%E6%8B%A9%E4%BB%80%E4%B9%88" rel="alternate" type="text/html" title="当我们在选择保研的时候，究竟在选择什么" /><published>2024-05-16T00:00:00+00:00</published><updated>2024-05-16T00:00:00+00:00</updated><id>/blog/%E5%BD%93%E6%88%91%E4%BB%AC%E5%9C%A8%E9%80%89%E6%8B%A9%E4%BF%9D%E7%A0%94%E7%9A%84%E6%97%B6%E5%80%99%EF%BC%8C%E7%A9%B6%E7%AB%9F%E5%9C%A8%E9%80%89%E6%8B%A9%E4%BB%80%E4%B9%88</id><content type="html" xml:base="/blog/%E5%BD%93%E6%88%91%E4%BB%AC%E5%9C%A8%E9%80%89%E6%8B%A9%E4%BF%9D%E7%A0%94%E7%9A%84%E6%97%B6%E5%80%99-%E7%A9%B6%E7%AB%9F%E5%9C%A8%E9%80%89%E6%8B%A9%E4%BB%80%E4%B9%88"><![CDATA[<pre><code class="language-line-chart">{
    "id": "fall-2019",
    "class": "line-chart",
    "title": "本科四年学分绩及排名走势",
    "subtitle": "",
    "yAxis": [{
        "title": {
            "text": "GPA"
        },
        "min": 0,
        "max": 4
    },{ 
        "title": {
            "text": "绝对排名"
        },
        "opposite": true,
        "reversed": true
    },{ 
        "title": {
            "text": "百分比排名"
        },
        "opposite": true,
        "reversed": true
    }],
    "xAxis": {
    },
    "series": [
        {
            "name": "单学期必限任GPA",
            "data": [
                3.7643, 3.8545, 3.6333, 3.64, 3.9058, 4, 4, 4
            ]
        },
        {
            "name": "累计必限任GPA",
            "data": [
                3.7643, 3.7897, 3.6963, 3.6831, 3.7155, 3.7468, 3.7520, 3.78
            ]
        },
        {
            "name": "单学期年级排名",
            "data": [
                52, 92, 132, 118, 37, 1, null, null
            ],
            "yAxis": 1
        },
        {
            "name": "累计年级排名",
            "data": [
                52, 90, 116, 117, 106, 93, 93, null
            ],
            "yAxis": 1
        },
        {
            "name": "单学期年级百分比排名",
            "data": [
                30, 44, 62, 56, 18, 0, null, null
            ],
            "yAxis": 2
        },
        {
            "name": "累计年级百分比排名",
            "data": [
                30, 43, 55, 55, 51, 44, 40, null
            ],
            "yAxis": 2
        }
    ]
}
</code></pre>

<h2 id="intro">Intro</h2>

<p>每当到了每年的保研季，各种往年的保研数据以及各种保研出路介绍、经验分享层出不穷，比如我被问到时经常给出的贵系著名的八字班统计数据<a href="https://mp.weixin.qq.com/s/OOSe12KPnS61zfnbTAg_JQ">《云开月明》</a>，以及零字班的非官方发布的全院系统计数据<a href="https://mp.weixin.qq.com/s/8UE02vkukE3y34PnnIWtkg">《闻道无际》</a><sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>，以及谈到交叉推延时当时的分享经验。其实保研季远远不止大三暑假和大四九推这么简单，随着保研形势的扑朔迷离和日渐严峻，许多同学开始提前准备保研或是其他的同等出路，更有甚者从进入清华的第一个月开始就四处打听保研的计划、准备等等。但其实很多人，包括我在内，都很难去估计准备保研在本科生活中的价值，以及付出这些努力在未来所能获得的无论是自身还是外界的所谓的<em>价值</em>。</p>

<h2 id="一定要保研吗">一定要保研吗</h2>

<p>大学生们可能在本科开始时就开始思考未来的去路问题，似乎已经习惯了三年一次的人生选择——从小升初、初升高、大学填报到深造，如果先读的硕士则免不了在硕士二年级结束时决定继续留在学校还是校招去工作。就像大学填报志愿的时候许多高考生对专业的认知停留在高中参加的竞赛培训和招生老师和志愿者的只言片语中一样，许多学生从进入大学所接触到的学长学姐和老师，无一例外都是保研体系下的成功者，而且这对于清华这样主打研究型大学的氛围来说更是如此。因此大多数人即使读了两三年，脑子里也只有“保研”二字也不足为奇，因为如果不是年级和班级组织各种活动<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup>，学生们能遇到、交流到的其他赛道的人真的寥寥无几。</p>

<p>但从保研本身来说，恰恰也是官方提供的平均意义上性价比最高的出路选择。不像其他级别的学校所拥有的宝贵的保研名额，清华的老师本身其实非常希望为学生争取更多的保研名额，保研率和竞争强度虽然与清华本身的定位不算匹配，但终究还是好过其他学校太多。并且清华的同学如果放低对去向学校的级别需求，选择也更多。这就造就了保研路径的绝对统治地位。对于出身平凡的大多数人来说，稳稳保研的成本相比于去花费精力提高语言成绩、广投简历争取海外暑研、毕设之余忙于实习等等实在是过于低了，而对于本就不在这一层次的同学，当然本身就已经熟知各个赛道的要求和出路，也具有更好的条件，所以也不在该讨论之列。</p>

<p>所以当保研成为大多数人高考后的又一条独木桥后，随之而来的自然是普遍的焦虑。独木桥虽然不会犯错，宽一点的独木桥也走着稳当，但只要是桥，就会有人掉下去。如果没有保研之外的第二条路，那么每个人都会担心自己从桥上掉下去。这种焦虑自然而然地从高年级向低年级蔓延。在我大一大二的时候，很少听到和讨论未来出路的选择，哪怕是“学术新星”的时候也没有想着这是作为保研的一个跳板。然而随着外界形势的愈发严峻，当我到了如今的高年级，则肉眼可见地看到许多学弟学妹对于保研的价值需求。从如何与老师交流进组打杂，到需不需要一作成果表明自己的学术能力和志趣，再到保研资格、名额筛选和发放，最后是笔试面试的准备，越是接近九推系统的正式确认，焦虑的程度越是加深。这种焦虑和恐慌不仅一定程度上干扰了学术活动，也从根本上破坏了本科教育本应该提供的人生体验。</p>

<h2 id="选择的意义">选择的意义</h2>

<p>无论学生们是以何种缘由选择保研的，他们总会在保研前后的某个时间点开始思考所做出的选择的意义。对于保研顺利的同学来说，或许很多人要么一开始就明确自己的学术志向，他们熟悉各类研究方向的冷热，并对自己所选择的道路有着独到的见解，要么浑浑噩噩觉得保研只是像高考填志愿那样按部就班，只是“正常”地过渡到人生的下一个阶段。而对于保研磕磕绊绊的人，他们可能会更早地思考所选择的意义，因为他们总是面临着一定的保研失败的风险，需要去了解所谓的备用方案，因此也更容易经常思考这个选择所带来的后果。</p>

<p>经常有人保研后对于现状的不满，表达于“如果当初选择另一种方式就会怎样怎样”的假设。一方面这类假设在普通人身上其实早有预见——“如果当初高考填志愿的时候填的是哪个学校专业就会怎样怎样”，我们本科在清华的一站式服务让很多人忘记了其他人早就在三四年前就开始面对这类困境；另一方面这个假设只是人生选择中的一小部分，就像高考是人生的大考，却不是唯一一次大考一样，即使对上一次选择耿耿于怀、吸取经验，下一次选择时总会有这样或者那样的遗憾。</p>

<p>对于我来说，一开始并未思考如果没地方收我怎么办这种问题，原因在于我对未来所预设的不高的期待。说是不高的期待，其实去实习工作也好，被推荐去香港或是哪里继续读也好，终究是我对“车到山前必有路”的侥幸。我也常常思考当初选择的结果，例如很多人其实好奇为什么我会从这个系转到那个系，其实原因可以很简单，就是不想待下去了，想去一些新的环境，感受一些新的体验，而选择其他的那些出路又何尝不是如此？没有哪个选择是能让我们一帆风顺地走完一程的，也没有哪个选择会使你永无翻身之日。虽说时代的风口浪尖错过了就不会再来，但是如果不是你创造的时代，又何知哪时是所谓风口浪尖呢？对我来说选择的意义就在于确定一条我即将走出的世界线，而这条世界线是不是好的，不好的话有多么坏，其实又和我有多大关系。我本身并不能改变什么，世界上所有会发生的变革都将和计划一样地发生。</p>

<h2 id="所以在选择什么">所以在选择什么</h2>

<p>可能对于大多数人来说，选择保研只是为了最大程度上的确定性。迷茫和焦虑其实都来自于对于现状和未来的不可知，而这条明晃晃的、有最多人所替你试错过的道路，也毫无意外地成为了最稳妥的选择。还记得当时去和老师了解名额时，虽然我对我的定位有了一些预期，但当老师问我他的问题的时候，我也一时语塞。</p>

<blockquote>
  <p>“你觉得你在我这里继续科研，你的独特的优势是什么？”</p>
</blockquote>

<p>所以是什么呢？我思考了一会儿也没法给出准确的答案，或者说我也根本没想到这个问题。虽然在一些人看来无非是面试的套路或者八股，但依我的性格，如果我确实没有我也很难给自己一个具有说服力的答案。其实老师对于这些都有自己的考虑，最后给了我几个他认为比较合适的选择。我拿到这些选择之后，严肃地评估了各类去向的所谓难度、成本、收益和风险。虽然这个时间很短暂，我也只是简单地搜索了一下其中一位老师的方向并约了讨论，但我也就在那短短的几天作出了可能影响我未来三年甚至五年的选择。听起来可能很违和，但回想初高中和高考志愿填报的那些选择，又比这个思考地多了几个小时呢？而那些选择的重要性又比读研不重要多少呢？</p>

<h2 id="注释-notes">注释 Notes</h2>
<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>其实九字班的数据只在零字班的保研说明大会上见过，之后便作为内部数据不予公开了。 <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2" role="doc-endnote">
      <p>并且这些活动的质和量都需要比较高，许多邀请的前辈其实也有为自己所在单位或企业打广告的私心，容易喧宾夺主。 <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="贵系风云" /><category term="" /><summary type="html"><![CDATA[{ "id": "fall-2019", "class": "line-chart", "title": "本科四年学分绩及排名走势", "subtitle": "", "yAxis": [{ "title": { "text": "GPA" }, "min": 0, "max": 4 },{ "title": { "text": "绝对排名" }, "opposite": true, "reversed": true },{ "title": { "text": "百分比排名" }, "opposite": true, "reversed": true }], "xAxis": { }, "series": [ { "name": "单学期必限任GPA", "data": [ 3.7643, 3.8545, 3.6333, 3.64, 3.9058, 4, 4, 4 ] }, { "name": "累计必限任GPA", "data": [ 3.7643, 3.7897, 3.6963, 3.6831, 3.7155, 3.7468, 3.7520, 3.78 ] }, { "name": "单学期年级排名", "data": [ 52, 92, 132, 118, 37, 1, null, null ], "yAxis": 1 }, { "name": "累计年级排名", "data": [ 52, 90, 116, 117, 106, 93, 93, null ], "yAxis": 1 }, { "name": "单学期年级百分比排名", "data": [ 30, 44, 62, 56, 18, 0, null, null ], "yAxis": 2 }, { "name": "累计年级百分比排名", "data": [ 30, 43, 55, 55, 51, 44, 40, null ], "yAxis": 2 } ] }]]></summary></entry><entry><title type="html">四年的账单</title><link href="/blog/%E5%9B%9B%E5%B9%B4%E7%9A%84%E8%B4%A6%E5%8D%95" rel="alternate" type="text/html" title="四年的账单" /><published>2024-05-11T00:00:00+00:00</published><updated>2024-05-11T00:00:00+00:00</updated><id>/blog/%E5%9B%9B%E5%B9%B4%E7%9A%84%E8%B4%A6%E5%8D%95</id><content type="html" xml:base="/blog/%E5%9B%9B%E5%B9%B4%E7%9A%84%E8%B4%A6%E5%8D%95"><![CDATA[<pre><code class="language-line-chart">{
    "id": "fall-2019",
    "class": "line-chart",
    "title": "本科四年各类花销汇总",
    "subtitle": "",
    "yAxis": {
        "title": {
            "text": "开销(RMB)"
        }
    },
    "xAxis": {
        "type": "datetime",
        "dateTimeLabelFormats": {
            "month": "%b %Y"
        }
    },
    "series": [
        {
            "name": "总计",
            "data": [
                ["2019-08-10", 4698.38],
                ["2019-10-02", 2259.33],
                ["2019-11-02", 1083.54],
                ["2019-12-03", 1263.79],
                ["2020-01-11", null],
                ["2020-02-11", null],
                ["2020-03-11", null],
                ["2020-04-11", null],
                ["2020-05-11", null],
                ["2020-06-11", null],
                ["2020-07-11", null],
                ["2020-08-21", 2406.24],
                ["2020-10-01", 1426.03],
                ["2020-11-02", 2451.2],
                ["2020-12-09", 1036.69],
                ["2021-02-20", 1443.33],
                ["2021-04-01", 1082.05],
                ["2021-05-01", 2290.24],
                ["2021-07-30", 1430.25],
                ["2021-09-01", 1859.46],
                ["2021-10-01", 1342.54],
                ["2021-11-01", 1085.04],
                ["2021-12-01", 916.67],
                ["2022-01-01", 772.97],
                ["2022-02-18", 1539.78],
                ["2022-04-01", 944.7],
                ["2022-05-01", 1024.79],
                ["2022-06-01", 1197.68],
                ["2022-07-01", 984.5],
                ["2022-08-01", 724.62],
                ["2022-09-01", 1136.3],
                ["2022-10-01", 1267.62],
                ["2022-11-01", 916],
                ["2022-12-01", 899.97]
            ]
        },
        {
            "name": "饮食",
            "data": [
                ["2019-08-10", 1570.59],
                ["2019-10-02", 672.83],
                ["2019-11-02", 788.15],
                ["2019-12-03", 930.17],
                ["2020-01-11", null],
                ["2020-02-11", null],
                ["2020-03-11", null],
                ["2020-04-11", null],
                ["2020-05-11", null],
                ["2020-06-11", null],
                ["2020-07-11", null],
                ["2020-08-21", 1015.69],
                ["2020-10-01", 832.15],
                ["2020-11-02", 906.24],
                ["2020-12-09", 864.54],
                ["2021-02-20", 1177.31],
                ["2021-04-01", 898.15],
                ["2021-05-01", 1159.79],
                ["2021-07-30", 1190.25],
                ["2021-09-01", 1376.52],
                ["2021-10-01", 915.8],
                ["2021-11-01", 950.04],
                ["2021-12-01", 856.67],
                ["2022-01-01", 678.05],
                ["2022-02-18", 1407.77],
                ["2022-04-01", 923.5],
                ["2022-05-01", 954.79],
                ["2022-06-01", 994.23],
                ["2022-07-01", 624.35],
                ["2022-08-01", 482.8],
                ["2022-09-01", 935.87],
                ["2022-10-01", 638.55],
                ["2022-11-01", 851.44],
                ["2022-12-01", 732.4]
            ]
        }
    ]
}
</code></pre>

<p>我的记账的习惯起源于初中，当时每个星期还是从父母那里拿到饭钱，充到学生卡里<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>，为了了解我一个星期究竟吃了多少，大概在什么时候需要充钱，我便开始了记账的习惯。当时每个学期都准备了一个小笔记本，专门用来记账以及记录一些奇奇怪怪的东西<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup>。每天三餐吃完之后，回到教室我就把开销记在本子上，以防一会儿之后忘记<sup id="fnref:3" role="doc-noteref"><a href="#fn:3" class="footnote" rel="footnote">3</a></sup>。也正是有了这个习惯，我和别人说60块钱吃了一个星期的事才不是玩笑，而是有迹可循。到后来对每周的开销关注少了之后，记账的习惯一直保留，作为每天记录的一部分，毕竟我不是会写日记的那种人<sup id="fnref:4" role="doc-noteref"><a href="#fn:4" class="footnote" rel="footnote">4</a></sup>，等到毕业的时候，十二个学期的笔记本堆在一块儿，很简单就能从中整理出时间的脉络和痕迹。这对后来选学校的学生也有一些参考，毕竟一星期吃多少是实实在在的开销，对于留在家附近或者去公立中学来说，这部分开销都是能被缩减的。</p>

<p>而到了大学，每天记账显然不现实，并且在目前的信息化程度下，学生卡的消费记录也是自然地记录在系统里，想要批量导出来也不困难。于是我就转变了思路，每过一段时间就从学校系统里导出学生卡的消费记录<sup id="fnref:5" role="doc-noteref"><a href="#fn:5" class="footnote" rel="footnote">5</a></sup>，再结合微信记账本，大概就能总结大部分的开销。而开销的最重要一环自然是饮食，所以在上面的开销图中也只加入了对饮食部分的统计。需要注意的一点是，这里的开销也很难做到完全收集，例如美团外卖上的开销，很多都是直接从银行卡里扣，就不会进入微信记账本；微信支付本身也有零钱和银行卡等多种方式，所以我就懒得再统一支付方式或者综合各个APP的信息了。</p>

<p>除了饮食的开销是每天都会有的支出外，剩下的部分就相对不是那么规律了。例如生活日用品，根据消耗程度不同再次购买的时间也不同；对于理发来说，很大程度上受到我在家理发情况的影响；再例如游戏月卡上的开销，在皇室战争分服前，同时月卡的性价比也是很高的时候，月卡每月都会开，但是分服之后，国际服支付上的困难以及氪金的性价比的降低也逐渐减少了开月卡的次数；而在交通方面更不必说，且不说中间疫情三年扼杀了很多出行的可能性，就日常安排来说也不会频繁地出校，所以交通方面其实也不会每月都有，就算有也可能是一两次共享单车的花费。</p>

<h2 id="注释-notes">注释 Notes</h2>
<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>现在学校里都是刷脸识别，直接从绑定的父母微信里扣了，自然也不需要人工来记录。 <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2" role="doc-endnote">
      <p>包括但不限于抄写的歌词、设计的Logo。 <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3" role="doc-endnote">
      <p>但到后面其实还是挺容易忘的，要找补就只能根据钱数的变化来推断吃了什么。 <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:4" role="doc-endnote">
      <p>虽然我也确实写了，还不少，但并不会每天都写。 <a href="#fnref:4" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:5" role="doc-endnote">
      <p>之所以是每过一段时间而不是每月，是因为固定时间的话很容易因为一些事情耽搁，所以就挑方便的时候整理。 <a href="#fnref:5" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="贵系风云" /><category term="" /><summary type="html"><![CDATA[{ "id": "fall-2019", "class": "line-chart", "title": "本科四年各类花销汇总", "subtitle": "", "yAxis": { "title": { "text": "开销(RMB)" } }, "xAxis": { "type": "datetime", "dateTimeLabelFormats": { "month": "%b %Y" } }, "series": [ { "name": "总计", "data": [ ["2019-08-10", 4698.38], ["2019-10-02", 2259.33], ["2019-11-02", 1083.54], ["2019-12-03", 1263.79], ["2020-01-11", null], ["2020-02-11", null], ["2020-03-11", null], ["2020-04-11", null], ["2020-05-11", null], ["2020-06-11", null], ["2020-07-11", null], ["2020-08-21", 2406.24], ["2020-10-01", 1426.03], ["2020-11-02", 2451.2], ["2020-12-09", 1036.69], ["2021-02-20", 1443.33], ["2021-04-01", 1082.05], ["2021-05-01", 2290.24], ["2021-07-30", 1430.25], ["2021-09-01", 1859.46], ["2021-10-01", 1342.54], ["2021-11-01", 1085.04], ["2021-12-01", 916.67], ["2022-01-01", 772.97], ["2022-02-18", 1539.78], ["2022-04-01", 944.7], ["2022-05-01", 1024.79], ["2022-06-01", 1197.68], ["2022-07-01", 984.5], ["2022-08-01", 724.62], ["2022-09-01", 1136.3], ["2022-10-01", 1267.62], ["2022-11-01", 916], ["2022-12-01", 899.97] ] }, { "name": "饮食", "data": [ ["2019-08-10", 1570.59], ["2019-10-02", 672.83], ["2019-11-02", 788.15], ["2019-12-03", 930.17], ["2020-01-11", null], ["2020-02-11", null], ["2020-03-11", null], ["2020-04-11", null], ["2020-05-11", null], ["2020-06-11", null], ["2020-07-11", null], ["2020-08-21", 1015.69], ["2020-10-01", 832.15], ["2020-11-02", 906.24], ["2020-12-09", 864.54], ["2021-02-20", 1177.31], ["2021-04-01", 898.15], ["2021-05-01", 1159.79], ["2021-07-30", 1190.25], ["2021-09-01", 1376.52], ["2021-10-01", 915.8], ["2021-11-01", 950.04], ["2021-12-01", 856.67], ["2022-01-01", 678.05], ["2022-02-18", 1407.77], ["2022-04-01", 923.5], ["2022-05-01", 954.79], ["2022-06-01", 994.23], ["2022-07-01", 624.35], ["2022-08-01", 482.8], ["2022-09-01", 935.87], ["2022-10-01", 638.55], ["2022-11-01", 851.44], ["2022-12-01", 732.4] ] } ] }]]></summary></entry><entry><title type="html">小巷子里的墨香</title><link href="/blog/%E5%B0%8F%E5%B7%B7%E5%AD%90%E9%87%8C%E7%9A%84%E5%A2%A8%E9%A6%99" rel="alternate" type="text/html" title="小巷子里的墨香" /><published>2024-05-04T00:00:00+00:00</published><updated>2024-05-04T00:00:00+00:00</updated><id>/blog/%E5%B0%8F%E5%B7%B7%E5%AD%90%E9%87%8C%E7%9A%84%E5%A2%A8%E9%A6%99</id><content type="html" xml:base="/blog/%E5%B0%8F%E5%B7%B7%E5%AD%90%E9%87%8C%E7%9A%84%E5%A2%A8%E9%A6%99"><![CDATA[<p>不久前曾去紫荆操场的国风主题活动凑热闹，发现那里有笔墨纸砚共大家感受软笔书法的文化，才想起来已经好久没有接触毛笔了。虽然再次拿起毛笔的话手法一定生疏不少，可能写出一个正经的字都十分困难，但我始终都无法忘记，那缕从小巷子里飘出来的墨香。</p>

<p>最初去学毛笔书法是在小学三年级还是四年级已经记不清了，当时是我妈一是美其名曰“为了锻炼我的耐心”<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>，二是为了消耗我的课余时间，特别是减少我坐在电脑前的时间。当然她也可能希望我有一些兴趣爱好，自然一开始的时候我是不太愿意的，可我最后还是拗不过答应了。</p>

<p>教毛笔书法的是一位老爷爷，姓欧阳<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup>，年纪明显很大了，在我刚认识他的时候就已经有些耳背，但每天的生活依旧是非常地积极，对于来求学的学生都是热情地招待。当然他对于跟着他学习的学生要求也十分严格，即从报名去开始，每天去的时间一定要够，每周去的天数也一定要够，每天练习临摹和书写的质量要过关，检查完成之后才能在一张用宣纸绘制的类似打卡表上记录。如果有几次表现出来敷衍了事或者其他不认真的行为，欧阳公公<sup id="fnref:3" role="doc-noteref"><a href="#fn:3" class="footnote" rel="footnote">3</a></sup>大概率会直接进行劝退。</p>

<p>我想既然给我报了名那我就练练看，坚持一段时间。平时上课的时候都是周末去，早上八九点钟其实就可以去敲他家的门了。他家就在离我家不远的一条小巷子里，我在家吃完早饭就直接走到他家，轻叩墨绿色的大门，他的老伴儿就会来开门，问好之后便去二楼——那是属于我们学生的练习区。有时去得太早，欧阳公公还没起，我们便轻手轻脚地走到二楼<sup id="fnref:4" role="doc-noteref"><a href="#fn:4" class="footnote" rel="footnote">4</a></sup>，安静地开始自行接着上次的进度练习；有时刚好去的时候碰见他在吃早饭，还会招呼我们一起喝一碗刚打出来的油茶。欧阳公公在有学生去的时候，一天的活动区域就是在二楼，或是坐在大房间的位子上看书，或是给学生们裁剪和装订临摹用的练习簿，或是在大小房间之间来回踱步，看见有问题就帮助解决。大房间有几张大木桌拼成的超大桌子，可供十二三个学生同时练习；若是那天去的人多了，则可以在小房间摆一两张桌子凑合一下；要是实在不够，只能嫌自己去得太晚，下次早一些来抢占地方。不过大部分时候，同一天去的人也不会太多，而且去的人多了就会比较吵，不符合练习书法的环境要求。</p>

<p>最开始学的时候欧阳公公会从拿笔开始教，然后是每个笔画，基本掌握了之后就会让学生在练习簿上重复简单的笔画和字。如今已经忘了一本练习簿是二十页还是四十页了，只记得当时虽然摸起来薄，但是真要认真写完还是费些时间的，一天下来基本上是写完两本半到三本这样，如若是运气好拿到了薄一些的本子，勉强可以写到第四本。初学者一本写完之后，都要给欧阳公公检查一遍，如果是认真完成了，则会教其署名在第一页左侧，也将其作为自己的一份作品，这样一来，即使是简单的练习簿，也需要认真对待。完成后练习簿可以放在他家，觉得写得好的也可以拿走。当然练习一段时间之后，欧阳公公觉得不需要再每本都看了，学生就可以自己一本一本地练了。最开始的时候我们都是从楷书练起，应该是柳公权和欧阳洵吧，练得比较好之后就会转去练行楷和行书，基本是赵孟頫和王羲之的字帖。若是有非常勤奋或者很有天赋的学生，会继续往下练习行草到草书，在我短暂的练字生涯里也仅仅见过一两个能够比较轻松驾驭的。</p>

<p>练习到一定程度之后，欧阳公公就会鼓励大家参加各类比赛和活动，基本上是选择自己练得最好、最熟悉的字来参加<sup id="fnref:5" role="doc-noteref"><a href="#fn:5" class="footnote" rel="footnote">5</a></sup>。这时欧阳公公就会拿出收藏的好的宣纸，根据学生要写的内容教学如何布局，哪里是正文，哪里是落款。练习的时候一般用普通的纸写很多遍，再在比赛用的纸上写，写完之后放置一段时间再整理寄送给比赛主办方。有的时候也会出现学生要写的字没在字帖里出现过，这时欧阳公公就会拿出一本厚厚的字典，上面对每个汉字的简繁体和各个字体的写法都有收录。大家写的基本上是两个四字成语或是两句七字的诗词，只有很厉害的学生会写整首的诗词或者是像《兰亭集序》这样的文章。由于我练习的时间不多，自然参赛的机会也少，在仅有的几次投稿中似乎也就中了一次二等奖，不过这种奖项也就平时拿来图一乐罢了。</p>

<p>在那个小巷子的小楼里练习之外，最重要的活动自然是每年春节组织的卖对联活动。临近春节的几天，江边的人行道上就会排列满了卖年货的商家，大致那些年的年味儿都是从这其中的热闹而来的吧。我们参加的学生会先分好工，有的负责早些去占摊位，有的会负责搬桌椅，有的会负责带上好的笔墨纸砚。由于我们临摹的字帖里就有专门的一本收录各种对联的，所以我们自然也有底气定价不是那么低。即使是临时点的内容，也有练得好的学生依靠自己的才华完成。又因为我们都是本地的学生，来买对联的人们也都比较宽容。不过有一年的一天倒是和旁边的门面起了一些争执，原因是我们的摊位影响到了他的营业，在纠缠一番之后我们第二天还是搬到了其他地方。除了这种小插曲之外，我参加的几次卖对联活动也都比较顺利。那几年我家门口的对联也是我来写的<sup id="fnref:6" role="doc-noteref"><a href="#fn:6" class="footnote" rel="footnote">6</a></sup>。</p>

<p>在我去练习书法的几年中，也结识了许多同桌练习的好友，有的是幽默风趣的学姐，有的是勤奋刻苦的同龄人。他们大都比我在那个楼里待的时间长，比我更早地开始学，也比我更晚退出。在那些被一本本白花花的练习簿消耗的时间中，他们也给我带来了不少欢声笑语。偶尔出现的误解和摩擦，他们也都能表示理解。像这种本身也算是熟人生意，在我不去练字之后我们或我们的家长也都或多或少保持着联系，偶尔会说起“那个以前和你一起练字的谁谁谁怎样怎样”。在我初中去市里读书之后，前两年还能勉强一周或两周回县里，作业少的时候偶尔去练一下字，到初三之后就完全没有时间了，也就很少再见到他们，以及欧阳公公。初二的时候我还给学校的一个书法活动投了作品，写的是“虚怀若竹气若兰，取情于山寄于水<sup id="fnref:7" role="doc-noteref"><a href="#fn:7" class="footnote" rel="footnote">7</a></sup>”，还因为多次表现出会写软笔而不积极参加学校活动而被美术老师埋怨<sup id="fnref:9" role="doc-noteref"><a href="#fn:9" class="footnote" rel="footnote">8</a></sup>。最后这幅作品被装裱起来挂在了学校一栋教学楼的楼梯转角，每次回去我都会去看看它有没有被换掉<sup id="fnref:8" role="doc-noteref"><a href="#fn:8" class="footnote" rel="footnote">9</a></sup>。</p>

<p>自我淡出练字圈子之后，我也只能从我们当时建立的QQ群和家长的小道消息中了解到一些关于书法班和欧阳公公的消息。在上大学之后的某天，我也是从群里了解到，欧阳公公仙逝了。其实从一开始就能看得出来，每年我们组织去拜年的时候也都担心他的身体状况，但是听到这个消息还是非常难过。不像其他兴趣班一样，老师辞职了就换个老师，下周末依旧还在某个教室上课。从此以后也不会有人会在放假的早晨，提着小包走进那个小巷子，轻轻推开虚掩的墨绿色的已经充满岁月痕迹的大门，迈上老旧木梯到二楼，坐下来沉浸在墨香之中。在外求学的我也赶不上他们也许组织了的送别，不过我想二楼大房间里，书架上积攒着的几本我写过的练习簿，也算是我能够附上的追思。</p>
<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>虽然说没什么用，我现在还是比较毛躁。 <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2" role="doc-endnote">
      <p>由于这个姓以及他的名字在本地方言中发音类似“欧阳洵”，故我们有时说笑是书法名家的署名。 <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3" role="doc-endnote">
      <p>这个称呼是我们都这样叫他。 <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:4" role="doc-endnote">
      <p>由于是木制的老楼梯，光是踩上去就会发出不小的声响。 <a href="#fnref:4" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:5" role="doc-endnote">
      <p>所以也见到有学生一参赛就基本都是那几个字。 <a href="#fnref:5" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:6" role="doc-endnote">
      <p>在我初三之后，由于不能稳定周末去练习，自然也就退出了这个行列。自那以后，我家的对联又换成了批量生产的那种。 <a href="#fnref:6" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:7" role="doc-endnote">
      <p>以前写的时候也不知道是什么意思，大致是取自《兰亭集序》“清气若兰，虚怀若竹。 乐情在水，静趣在山”。 <a href="#fnref:7" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:9" role="doc-endnote">
      <p>突然想起来刚入学的时候还加入了书法学社，不过从来没参加过相关活动。 <a href="#fnref:9" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:8" role="doc-endnote">
      <p>截至写作本文时，已过去将近十年，即使学校分家校名更换，它依旧没有被换掉。 <a href="#fnref:8" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="童年回忆" /><category term="" /><summary type="html"><![CDATA[不久前曾去紫荆操场的国风主题活动凑热闹，发现那里有笔墨纸砚共大家感受软笔书法的文化，才想起来已经好久没有接触毛笔了。虽然再次拿起毛笔的话手法一定生疏不少，可能写出一个正经的字都十分困难，但我始终都无法忘记，那缕从小巷子里飘出来的墨香。]]></summary></entry><entry><title type="html">基于绝对定位技术的大屏遥控器交互设计</title><link href="/blog/%E5%9F%BA%E4%BA%8E%E7%BB%9D%E5%AF%B9%E5%AE%9A%E4%BD%8D%E6%8A%80%E6%9C%AF%E7%9A%84%E5%A4%A7%E5%B1%8F%E9%81%A5%E6%8E%A7%E5%99%A8%E4%BA%A4%E4%BA%92%E8%AE%BE%E8%AE%A1" rel="alternate" type="text/html" title="基于绝对定位技术的大屏遥控器交互设计" /><published>2023-10-23T00:00:00+00:00</published><updated>2023-10-23T00:00:00+00:00</updated><id>/blog/%E5%9F%BA%E4%BA%8E%E7%BB%9D%E5%AF%B9%E5%AE%9A%E4%BD%8D%E6%8A%80%E6%9C%AF%E7%9A%84%E5%A4%A7%E5%B1%8F%E9%81%A5%E6%8E%A7%E5%99%A8%E4%BA%A4%E4%BA%92%E8%AE%BE%E8%AE%A1</id><content type="html" xml:base="/blog/%E5%9F%BA%E4%BA%8E%E7%BB%9D%E5%AF%B9%E5%AE%9A%E4%BD%8D%E6%8A%80%E6%9C%AF%E7%9A%84%E5%A4%A7%E5%B1%8F%E9%81%A5%E6%8E%A7%E5%99%A8%E4%BA%A4%E4%BA%92%E8%AE%BE%E8%AE%A1"><![CDATA[<h2 id="intro">Intro</h2>

<p>这个项目自2022年夏天始，历经各种波折和推延，涉及到校企联合和毕业设计等多方利益，最终随着本科毕业终于盖棺定论。</p>

<h2 id="实习-internship">实习 Internship</h2>

<p>大三和大四之间的暑假，按照惯例系里会安排去各个互联网公司实习。说是实习，其实很多公司给的岗位和工作都比较清闲，加上基本所有的实习都是没有工资的<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>，所以这门<em>专业实践</em>自然也广为诟病。而这门课又是自动计P/F<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup>的，自然大部分同学也和公司领导一块儿能混则混。</p>

<p>而就在实习摸鱼的过程当中，导师找到我并安排了一个企业的项目。当时我还没有所谓<em>纵向</em>、<em>横向</em>之类的概念，并且我也早早确定了推研的去向，所以当时也没有太将这个项目放在心上。我还记得当时第一次开会，是在实习公司的某层楼的楼梯拐角，那里不会影响工位那边的环境，并且堆放了很多物资和凳子，我可以有一个比较方便的开会环境。在那个线上会议上，我认识了之后要互相拉扯近一年的负责人，以及在我科研路程上帮助良多的学长。负责人在会议里展现了这个项目的伟大宏图，并且确定了几个清晰的研究问题<sup id="fnref:3" role="doc-noteref"><a href="#fn:3" class="footnote" rel="footnote">3</a></sup>。而由于我名义上确实有在实习，并且随着疫情暂时转好实习转为线下，我能分配的时间比较少，所以开始的几周并没有太多的开发任务布置。</p>

<h2 id="绝对定位-optitrack">绝对定位 Optitrack</h2>

<p>实习结束之后，这个项目成为了大四的主要工作。在实习和大四开学的空挡，是我项目进展最快的几周。项目的主要交互方式是遥控器的指向，这其中包含了绝对和相对。相对指向比较容易，毕竟基于IMU的设备还是太多了，而且相应的算法也比较成熟。普通手机就能模拟交互。难办的是绝对指向，由于企业方面使用UWB的硬件设计并未确定下来，所以我也没办法用上，从而需要基于光学动捕设备——Optitrack<sup id="fnref:4" role="doc-noteref"><a href="#fn:4" class="footnote" rel="footnote">4</a></sup>。</p>

<p>Optitrack并不是新朋友，在上个项目我曾经接触过，但由于只是使用，并未涉及设备的搭建和环境的配置。当时由于使用空间小，五六个红外摄像头可以较好地重叠，但是如果要把场景扩展到大屏，当时的小办公室就不够用了。随之而来的问题，是实验室所配备的设备似乎并不能覆盖大屏场景所需要的3米长、1.5米宽的区域。我花了一些时间，将所有设备从小办公室搬到了旁边的大房间，同时也询问了学长关于设备参数的问题，经过计算和实践检验之后，发现能较好追踪的最大区域也不过边长为1米的正方形。</p>

<p>为了解决这个问题，我先进行了简单的尝试。既然没办法覆盖包括大屏在内的区域，那么也许可以只追踪包含用户在内的小区域，并且通过一些计算提前获得大屏的位置和参数。毕竟在用户的使用过程中，大屏的位置应该是不会频繁移动的。我开始将大屏相对于能被追踪的桌子的位置固定下来，并且大屏的尺寸也是能提前获取的<sup id="fnref:5" role="doc-noteref"><a href="#fn:5" class="footnote" rel="footnote">5</a></sup>。这样就能通过将坐标系和桌子固定下来，简单地获得大屏的大致坐标。为了获得用户的指向，我直接用两个反光标记定义一条射线，并且在使用过程中觉得这样简单的布置已经能够获得不错的效果。</p>

<p>我将这个问题和方案汇报之后，得到的仍然是关于精度不够的质疑。大屏的位置坐标等等参数的精度到底怎么样，遥控器的指向误差到底有多少等等，甲方的对接人似乎还是对这个问题穷追不舍——到底能不能将整个空间都纳入光学追踪。我再三解释，基于现有的设备这已经是最好的解决方案了，直观，并且效果好。但是针对这个问题仍然拉扯了两月之久。直到我后来将激光测量仪、3D打印模具引入项目，给出了指向误差不超过10厘米的结果后，争论才逐渐消退。</p>

<h2 id="原型-prototype">原型 Prototype</h2>

<p>由于这个项目的硬件和软件算法是同步进行的，所以我的实验中只能通过借用友商的设备来作为设备原型进行开发。由于我没有苹果开发设备，负责人方面也帮助开发了Apple TV的遥控器相关插件，我这边只需要借用苹果设备进行部署就可以接入后续的平台使用<sup id="fnref:6" role="doc-noteref"><a href="#fn:6" class="footnote" rel="footnote">6</a></sup>。而指向方面则不依赖于遥控器事件，实现方式则是将遥控器、反光标记固定在设计好的模具上，这样便实现了绝对定位的简单原型设置。</p>

<h2 id="球形模型-smart-spherical">球形模型 Smart Spherical</h2>

<p>项目的核心之一，是负责人要求实现并且调整的一种新的指向算法——球形模型。这是一种结合了绝对指向和相对指向的算法，但是其可行性、参数和效果都有待考证。在简单实现了指向后，我便开始开发球形模型的算法。在半个月一次的会上，我将这种算法的基本原理、实现和初步实验结果进行了汇报，但是随之而来的是甲方的不解和质疑。对于远距离大屏定位、指向算法和球形模型的实现，似乎甲方们并不感冒，而且还对我的实验结果汇报颇有微词。那次会议也让我感受到了所谓大厂的人机交互和高校实验环境的区别<sup id="fnref:7" role="doc-noteref"><a href="#fn:7" class="footnote" rel="footnote">7</a></sup>。在那之后负责人也单独和我聊过几次，我的主张还是各种交互设计至少要经过简单的定量实验后才能断定其表现，不能依据开发者或用户主观的评价，而负责人则是希望能够尽快地试一试所有可能的设计。虽然开始时对于这种模型的参数，包括用户端的和遥控器端的，以及更复杂的显控比函数都有着很多的设计，但由于时间原因最终没能全部试用。</p>

<p>并且负责人对于交互的要求也存在一些甲方特有的反复横跳。最难接受的其实是我要求做一些定量实验时，他希望能通过一些主观感受来判断；而我给出一些显然较差的交互结果时，他又总是追问相关的数据支持。导致我后期总是倾向于否定新的交互设计，只是在最初的设计的基础上进行一些参数和算法的优化和微调。</p>

<h2 id="滑动设计-move-or-slide">滑动设计 Move or Slide</h2>

<p>第二个问题是滑动的设计。由于设备的设计初衷是想表现为遥控器一般的鼠标，自然是需要除了移动光标外，还能有等同于滚轮的滑动功能。在项目初期，负责人曾经画过四种滑动设计的大饼<sup id="fnref:8" role="doc-noteref"><a href="#fn:8" class="footnote" rel="footnote">8</a></sup>，到后来研究问题变成了如何对用户移动光标和滑动操作进行分类。对这个问题一开始是讨论了简单的阈值规则，后来导师又建议使用机器学习的方法。在进过几次数据采集和训练，而且还同时尝试了多种学习和网络结构后，我逐渐发现了数据中的瓶颈——用于开发的遥控器触摸板的触点帧率不足<sup id="fnref:9" role="doc-noteref"><a href="#fn:9" class="footnote" rel="footnote">9</a></sup>，或者说即使是原生的信号似乎也经过了硬件本身的滤波处理，导致在用户的动作一旦慢下来，即容易被滤波器消除时，两种操作是不可避免地混淆的。在充分研究了触点数据之后，我将结论和算法模拟结果作了汇报，这也导致了这个问题在之后的实际产品中并未使用我的设计和解决方案。</p>

<p>然而我并未完全放弃这个问题，在最后的毕设中，我仍然将其作为成果的一部分，一方面存在沉没成本的影响，我还是花了不少甚至可以说很多时间在这些算法和实验上的，包括将神经网络嵌入我的前端平台，以及招募被试来体验我的模式切换算法。尽管最后的报告采用的仍然是传统的统计和阈值规则，但总之最后的结果能比较好看。</p>

<h2 id="点击抖动-heisenberg-effect">点击抖动 Heisenberg Effect</h2>

<p>第三个问题是点击抖动，当时提出是基于使用遥控器点击时会产生瞬时抖动的观察。负责人开始时提供了一个思路，即从当前点击事件往前一段时间，找到用户<em>真正</em>想点击的位置。当时我做了简单的统计，我触碰到触摸板准备点击到真正按下按钮的时间间隔，结果是平均值是可接受的，但是标准差异常的大，并且各用户间的差异也很大。再后来我又基于开发平台进行了模拟的测试，发现按照一定时间回溯的方法虽然比较呆，但是对于典型的抖动行为的修正的效果还是比较好的。关键在于什么是<em>典型</em>的抖动行为，因为从各种维度上考虑，修正需求差异很大的行为表现是几乎相同的。由于前两个问题也一直在纠缠，这个问题就暂时搁置了，停留在一些简单的结论上。</p>

<h2 id="疫情封控和开题-the-pandemic-isolation-and-proposal">疫情、封控和开题 The Pandemic, Isolation and Proposal</h2>

<p>时间从十一月一转就到了十二月，秋天时乐观的疫情也在这个到来的冬天变得形式严峻。随着校园内外的感染情况增多，同学们也变得人心惶惶，开始传出提前遣送回家的小道消息。十一月末，一些同学已经开始将回家提上日程，而我由于项目的关系一直留在学校。楼层里和实验室的同学越来越少，被试也逐渐变得难以招募，大部分的时间都是我一个人在实验室进行开发和调试。到十二月上旬，正式的遣送通知出来后，校园也和这个冬天一样迅速萧瑟。食堂也针对校园的人数作了调整，连菜品的种类也变少了。大批返乡的另一个隐患是，如果程序链中的苹果生态的软件不幸崩溃<sup id="fnref:10" role="doc-noteref"><a href="#fn:10" class="footnote" rel="footnote">10</a></sup>，我必须找还在校的同学借用Mac来操作，这在疫情蔓延的背景下也是极其困难的。负责疫情防控的辅导员多次私聊我，询问我的返乡计划，我也都只能坦言等导师和甲方方面的通知。开会时我也反映了校内的情况，对返乡意愿进行了一些旁敲侧击，但是依然没有得到正面的回复。</p>

<p>十二月中旬，随着封控日益缩紧，基本上我每天的行程都是早上起床后在宿舍吃早饭，工作一会儿到中午，去听涛拿盒饭直接到FIT楼实验室旁边的空间吃，然后在实验室忙到六点左右，再去紫荆拿盒饭回宿舍吃。那几天在吃午饭的时候，经常会遇到同楼层的保洁阿姨，她也会在那儿吃盒饭。我们就在那个会议桌的两端默默地吃着，有一天我一下打不开盒饭的盖子，她还笑着说“你那样、那样开，对”。后来就没太看见她了，估计也是感染了或者返乡了吧。</p>

<p>果不其然没几天我的情况也恶化了。其实从月初我感觉体温就有一些高，以及头有些晕，但是一直以来没有发烧，而且也有实验室的暖气通风确实也没那么好。所以我怀疑是当时有一些轻状的感染，但是由于病毒的浓度较低，一直没有爆发出来。后来由于我每天都去实验室，也没有每天消毒，病毒浓度上去之后免疫系统就不太够用了。当时已经有了放开的风声，所以也只是和辅导员汇报了一下，并且由于之前发了很多抗原和母亲提前预备的药品，也没有太缺物资。桃李也专门开放了阳性窗口和通道，只负责给阳性的同学拿饭，阿姨也是比较贴心，总是会给多一些饭菜和水果<sup id="fnref:11" role="doc-noteref"><a href="#fn:11" class="footnote" rel="footnote">11</a></sup>。第一周几乎每天都只有中午一段时间比较清醒，烧迷糊了就往床上一躺，洗澡也是尽量减少次数以避免着凉。<em>刀片嗓</em>也是前几天比较严重，也是多亏了北京舍友的家长送来的润喉糖，后面几天也不是那么难受了。第二周基本退烧之后，身体也基本恢复过来了，就是每天仍然比较嗜睡。一开始汇报我阳的结果之后，负责人也说他阳了<sup id="fnref:12" role="doc-noteref"><a href="#fn:12" class="footnote" rel="footnote">12</a></sup>，所以这半个月基本没啥进度。到月底我和导师单独问返乡的事情，他表示会和负责人沟通一下。</p>

<p>因为之前的安排是十二月底结题，结果给疫情整这一出直接推迟了。而且我觉得结论也比较清晰之后，他还是觉得有一些问题没解决。但是好说歹说还是让我回家了，并且提前录入一些数据回去好分析。同时由于开题也是基于这个项目，所以我的进度也是很快，将给甲方的报告小改一下直接开题其实没问题。回家过年期间，项目的事情也总是让人焦虑，甚至大年三十下午还通知要开会对进度<sup id="fnref:13" role="doc-noteref"><a href="#fn:13" class="footnote" rel="footnote">13</a></sup>。我也尽量把事情推到开学后，到线下结合设备试一下效果再汇报。</p>

<h2 id="忙碌的春天-busy-spring">忙碌的春天 Busy Spring</h2>

<p>大四也像之前一样很早就回学校了，甚至由于回校过早把高中宿舍聚会给提到了大年初八。回来之后依然是投入项目中，针对滑动和点击抖动的问题。滑动问题主要是验证了之前的<em>假60帧</em>猜想，数据精度实在不支持行为预测，哪怕是使用机器学习的方法。而且算法表现也和用户的使用方式关系很大，所以之后也逐渐放弃了这个问题。点击抖动成为了重点，我也找到了以前工作中的相关做法，发现对于这个场景的帮助也聊胜于无。在几次讨论后，问题又聚焦在了<em>用户意图点击位置</em>上，为了收集到正确的数据，我又再引入了压力膜，贴在遥控器上，以压力显著增大的时刻作为用户<em>真正想</em>点击的位置。在做了用户实验后，把数据进行综合分析，发现还是一开始的时间回溯法效果最好，其他方法似乎都需要一些复杂的自适应过程。</p>

<p>在压力膜引入并且给出结论后，终于用数据终结了更多的需求的提出。我的舍友则在接了下游的文本输入任务后，也要和我这边的平台进行对接，后面的需求更换和用户实验也搞得他挺emo的。在其他同学都在忙碌着毕设的进度和中期汇报时，我则在忙碌地准备项目的中期和结题汇报。负责人给导师发了PPT的参照，要不就是内容和数据非常多要不就是充满了很多文献的调研总结，这对于我们的交互设计报告属于是太为难了<sup id="fnref:14" role="doc-noteref"><a href="#fn:14" class="footnote" rel="footnote">14</a></sup>。我按照要求好说歹说修改了几版，由于之前的拉扯已经太久，所以汇报时也没有更多的问题，我就直接棒读完PPT就草草结束。</p>

<h2 id="结题-the-end">结题 The End</h2>

<p>结题也就在中期之后不久，除了汇报的PPT，还需要一些所谓调研的材料、技术文档之类，我们也不想多搞，稍微凑凑字数了事。也是由于项目的结题，我直接将工作整理成毕设的文章，一些被负责人否决的问题又被我整理到了论文里，也显得整体思路比较连贯。在结题之后我和负责人的联系终于停止了，只有他不时对项目里的一些细节有一些提问，我都尽量显得不耐烦地回答<sup id="fnref:15" role="doc-noteref"><a href="#fn:15" class="footnote" rel="footnote">15</a></sup>。</p>

<h2 id="注释-notes">注释 Notes</h2>
<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>本来还是有一些公司给出按日的工资和补贴，但后来居然被负责老师叫停了。 <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2" role="doc-endnote">
      <p>Pass or Fail，只要总评及格统一计P，并且不计入GPA计算。 <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3" role="doc-endnote">
      <p>在当时看来还是比较清晰的，但是随着研究深入可能后期走偏了。 <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:4" role="doc-endnote">
      <p>红外光学动捕系统，利用特定的反光标记来绝对定位，需要至少三个配套红外摄像头，精度可达0.1毫米。 <a href="#fnref:4" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:5" role="doc-endnote">
      <p>甚至其中某些参数也可以先用校准好的配置进行精细测量。 <a href="#fnref:5" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:6" role="doc-endnote">
      <p>但这也为后来的开发埋下了伏笔，在疫情严重的时候，如果插件不幸崩溃了，将导致整个实验和遥控器事件有关的交互都无法实现。 <a href="#fnref:6" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:7" role="doc-endnote">
      <p>后来在和参加了前一次校企合作的学长交流时，他吐槽到有次汇报提到了球坐标系，结果被问什么是球坐标系，一时不知该怎么回答。 <a href="#fnref:7" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:8" role="doc-endnote">
      <p>这些设计出现在前端平台的代码中，但从未被实现过，最后优化时删除了。 <a href="#fnref:8" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:9" role="doc-endnote">
      <p>虽然可以调整插件频率，但是Apple TV最多也就跑到60帧，而且触点的60帧是<em>假的</em>，前后相邻两帧是完全相同的数据。 <a href="#fnref:9" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:10" role="doc-endnote">
      <p>有时是太久不清理后台导致的崩溃，但也会有其他因素，比如系统自动更新等等。 <a href="#fnref:10" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:11" role="doc-endnote">
      <p>不知道当时关于阳后免疫力和二阳之类的研究如何，在<em>Positive Only</em>的食堂工作还是需要一些勇气的吧。 <a href="#fnref:11" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:12" role="doc-endnote">
      <p>怎么这么巧，怀疑是故意的。 <a href="#fnref:12" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:13" role="doc-endnote">
      <p>虽然最后也没开成吧，但是搞得我拖到了下午五点才会老家。 <a href="#fnref:13" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:14" role="doc-endnote">
      <p>导师也吐槽说之前的合作汇报没那么麻烦，说可能是KPI啥的不够了。 <a href="#fnref:14" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:15" role="doc-endnote">
      <p>说实话，我是真想在结题后拉黑他。 <a href="#fnref:15" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="科研长河" /><category term="" /><summary type="html"><![CDATA[Intro]]></summary></entry><entry><title type="html">基于指尖微操作的压力文本输入技术</title><link href="/blog/%E5%9F%BA%E4%BA%8E%E6%8C%87%E5%B0%96%E5%BE%AE%E6%93%8D%E4%BD%9C%E7%9A%84%E5%8E%8B%E5%8A%9B%E6%96%87%E6%9C%AC%E8%BE%93%E5%85%A5%E6%8A%80%E6%9C%AF" rel="alternate" type="text/html" title="基于指尖微操作的压力文本输入技术" /><published>2023-09-25T00:00:00+00:00</published><updated>2023-09-25T00:00:00+00:00</updated><id>/blog/%E5%9F%BA%E4%BA%8E%E6%8C%87%E5%B0%96%E5%BE%AE%E6%93%8D%E4%BD%9C%E7%9A%84%E5%8E%8B%E5%8A%9B%E6%96%87%E6%9C%AC%E8%BE%93%E5%85%A5%E6%8A%80%E6%9C%AF</id><content type="html" xml:base="/blog/%E5%9F%BA%E4%BA%8E%E6%8C%87%E5%B0%96%E5%BE%AE%E6%93%8D%E4%BD%9C%E7%9A%84%E5%8E%8B%E5%8A%9B%E6%96%87%E6%9C%AC%E8%BE%93%E5%85%A5%E6%8A%80%E6%9C%AF"><![CDATA[<h2 id="intro">Intro</h2>

<p>这次科研历程自21年暑假始，中间历经多次波折，最后还是仓促结束于22年秋天。</p>

<h2 id="金手指-golden-finger">金手指 Golden Finger</h2>

<p>该项目起源于舍友的<em>金手指</em>项目，最开始是致力于研制一款智能指套，通过侦测用户手指尖（一般是食指）的压力变化（一般是手指与某一平面作用），来达到交互的目的。该项目从<em>学术新星</em>开始，又成为了舍友的挑战杯项目，最后决定整理成论文冲击CHI<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>。考虑到需要增加新的交互方式和现有人手问题，舍友在暑假的某一天通过微信问我：</p>

<blockquote>
  <p>要不要过来帮我们赶paper？</p>
</blockquote>

<p>当时我还在家里做上一份研究的数据录入<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup>，由于是同一个学长带，我勉强答应了下来。一来现在在做的项目也要回学校线下讨论好推进，二来我蹭一篇paper也对之后寻找出路有益。由于我对他们之前的项目有所耳闻，所以理解整个流程并不算困难。在7月底，我提前收假回到了学校<sup id="fnref:3" role="doc-noteref"><a href="#fn:3" class="footnote" rel="footnote">3</a></sup>。</p>

<h2 id="指尖交互-golden-gain">指尖交互 Golden Gain</h2>

<p>从挑战杯的项目得到的也只是指尖的压力数据，如何设计有效的交互成为了这一个多月的重点。而大家希望能使用这个压力膜控制一个光标，有了光标之后不外乎几个层次的交互：光标移动、手势交互、文本输入。最初我们打算就聚焦于光标移动，因为本身这种交互的硬件就足够新颖了，关键在于怎么稳定地提供光标指向的交互。而光标移动的任务无外乎几个维度上的考虑：绝对还是相对、显控比（Control-Display Ratio, CdRatio）、移动外的交互（点击、双击、拖拽、滑动等等）。前两个其实是交互设计的核心：如何将用户指尖的移动映射到屏幕上的光标的移动。</p>

<p>这一方面我们主要参考的工作是AutoGain<sup id="fnref:4" role="doc-noteref"><a href="#fn:4" class="footnote" rel="footnote">4</a></sup>，一个基于用户使用过程中不断自适应显控比的系统。我主要负责的，是将硬件提供的压力信号，具体来说是一个8×8的矩阵，输出为实时的光标坐标，并且编写一个前端展示出来。在压力矩阵转换坐标的过程中，有几个难点：</p>

<ul>
  <li>如何处理压力矩阵？作为一个二维的矩阵来计算还是压缩为一个平均值？</li>
  <li>如何将AutoGain的框架应用上来？需不需要设计其他的模式？</li>
  <li>压力矩阵的分辨率是否满足任务需求？</li>
</ul>

<p>对于压力矩阵，其实两种方法我们都尝试了。如果看待为矩阵，那么我们需要一个从二维矩阵到屏幕坐标的映射，当时甚至还尝试了诸如二维插值、高次多项式拟合之类的方法，效果欠佳；如果取平均值，那么其实也就获得了用户目前所在的指尖坐标系的坐标，从这个坐标到屏幕坐标的映射是自然的。对于AutoGain，我前几周都在根据其论文使用python复现其框架，后面发现其实AutoGain在我们的工作中其实是一个点睛之笔而非必要组成部分，我们可以先实现一个朴素的绝对或者相对的模式，再考虑实现混合的或者自适应的显控比映射。最后是压力矩阵的分辨率，当时我们采用的硬件在指尖做到64个压力单元其实已经接近极限了，但是这个压力矩阵实际上来说也并没有太能满足交互的需求，加上重复实验的压力下硬件的负荷超出了其使用极限，到后期磨损也极大地影响了数据质量。</p>

<p>在狙击论文的最后阶段，实验硬件的质量和效果极大地影响了进度，以至于一直没有做出满意的效果，最终论文也没能赶得上会议投稿。现在想来除了硬件的问题之外，我们当时似乎过于追求最后达到的效果，而没有先做出一个简单朴素的Demo，再在这之上扩展一些更高级的交互技术。但是这个项目并不会因为投稿的截至而结束，而是会继续展望之后的会议。</p>

<h2 id="指尖输入-golden-touch">指尖输入 Golden Touch</h2>

<p>在折戟CHI后，我们的项目开始发生了奇妙的转变。学长由于其他项目而很少参与我们之后的讨论，基本上我们两个本科生相当于直接由导师带着。在经过几次讨论之后，项目的方向从光标移动移动到了文本输入。</p>

<h3 id="字母输入-character-level-input">字母输入 Character Level Input</h3>

<p>最简单、容易实现的文本输入自然是按照字母输入。而为了将这个交互技术从硬件条件中抽出，避免之前出现的硬件问题，我们选择了Sensel Morph<sup id="fnref:5" role="doc-noteref"><a href="#fn:5" class="footnote" rel="footnote">5</a></sup>作为新的输入设备。这个压力采集设备能够采集到更高分辨率和帧率的压力数据，我们使用白纸刻画出指尖的形状，将压力板的采集区域局限于指尖这一部分，模拟了佩戴我们之前压力膜指套的数据，从而获得了稳定的硬件条件和更高的数据质量。这时我们将书写的方法规定为手指在板子上<strong>滚动</strong>，为了和佩戴指套的操作相匹配。</p>

<p>最初我们做pilot study，采集了几个同学的使用这个硬件书写a、b、c、d小写字母的压力数据<sup id="fnref:6" role="doc-noteref"><a href="#fn:6" class="footnote" rel="footnote">6</a></sup>。一个方法是使用简单粗暴的机器学习方法来做分类和预测，在当时数据量比较小的情况下表现地还算不错，并且实时Demo也能够跑得起来。但是当时并未继续沿着这个方法研究，可能是因为缺乏解释性、在算法上的贡献不够等等。另一个方法是通过分析数据的特征（例如特殊模式、极值等等），开发一些白盒的算法来进行分类和预测。我们想从后者上打开思路，毕竟这个任务可能非常简单，并且利于扩充论文的体量。</p>

<h3 id="滑行输入-gesture-typing">滑行输入 Gesture Typing</h3>

<p>由于在指尖上控制所谓光标完成逐个字母的输入似乎过于简单并且毫无实用性，我们决定将目标放在滑行输入上。滑行输入即将光标扫过的路径和字母连线路径进行<em>距离</em>的计算，将最近的<em>匹配</em>给出作为输入结果。这个和之前的SHARK^2有很大的关系。显而易见的，最直接的方式是将我们压力板上采集到的平均值在时间序列上的路径和词库进行逐一匹配，输出最接近的答案。虽然流程非常清晰，但是其中存在几个核心问题：</p>

<ul>
  <li>用户的指尖运动控制得如何？用户的能力是否能完成该任务？</li>
  <li>用户的输入需要预处理吗？如何处理？</li>
</ul>

<p>这其实来源于我们pilot study中所遇到的问题。一是有的用户很难学会在我们预设的板子上设定的使用方法，可能用户在指尖上的运动不足以完成模拟在QWERTY键盘上的滑行输入；二是用户的输入很容易有开头、结尾、和犹豫区。开头和结尾很容易理解，用户可能在书写的时候并没有提前准备好路径，从而在书写开始时才去思考，造成开头的噪声；结尾部分同理。最难处理的是中间的犹豫区，即用户可能在书写过程中出现噪声：包括但不限于某些部分过快过慢、某些部分幅度过大过小、某些部分因思考停滞。像滑行输入这种技术下，过程性的噪声的影响非常大，故我们需要提醒用户对自己即将书写的路径有清晰的规划。这在无形中增加了用户的负担。我们采用了经典的McKanzie的文本输入词库<sup id="fnref:7" role="doc-noteref"><a href="#fn:7" class="footnote" rel="footnote">7</a></sup>，收集了一定量的用户滑行输入的数据，之后一段时间我们都在探索算法。</p>

<p>算法可以说是在简单流程上的缝缝补补。理想情况下，我们借鉴SHARK^2的算法，配合我们的词库应该能达到比较好的效果，但其实并没有，调参后效果也提升有限。后来我邂逅了DTW，一个命中注定的算法<sup id="fnref:8" role="doc-noteref"><a href="#fn:8" class="footnote" rel="footnote">8</a></sup>，主题改用DTW来做距离的计算和匹配。在此基础上，我们又扩充了对于开始和结尾段的噪声消除、对用户的输入路径进行特征提取和整合、对DTW匹配的<em>标准路径</em>的优化等等算法，其中大部分都由我当时的室友兼科研伙伴在寒假左右推进<sup id="fnref:9" role="doc-noteref"><a href="#fn:9" class="footnote" rel="footnote">9</a></sup>。最后他将我们收集的数据，调参到了60%~70%的Top1正确率。尽管这在这样低的用户能力下很高了，但作为一种交互技术来说远远不够。</p>

<h3 id="笔画输入-direction-write">笔画输入 Direction Write</h3>

<p>寒假回来，由于滑行输入的正确率太低，我们需要设计新的输入方式。在受到EdgeWrite<sup id="fnref:10" role="doc-noteref"><a href="#fn:10" class="footnote" rel="footnote">10</a></sup>的启发后，我设计了一种基于方向笔画的字母输入方式。将每个字母分解成若干离散方向的组合，再指导用户逐一写出这些方向的组合，从而达到输入字母的目的。这种方式首先将用户的输入降维、离散处理了，从而对用户的输入噪声的敏感性降低。并且这对用户的输入能力的要求也降低了。在简单的pilot study后，我们决定将重心移到这上面来。</p>

<p>于是目前的论文故事就比较清晰，并且实现难度<strong>似乎</strong>也更低了。首先我们需要衡量用户输入方向的能力，具体体现为用户使用这种技术时，能够区分多少种方向。其次我们提出一种基于方向笔画的字母输入技术，设计了字母的离散笔画，并且这种设计也符合一些设计理念。然后我们收集了用户使用这种输入方式的数据并且进行算法模拟，最后进行用户实验来评估。似乎这个故事很好听，行云流水，也非常地有贡献，但是这个计划上飘荡着两朵乌云：</p>

<ul>
  <li>实际使用中的输入正确率如何？</li>
  <li>这种技术的实用性如何？有什么具体的适用场景？</li>
</ul>

<p>这其实也成为了之后该项目未能完成的两大痛点。虽然降低了输入难度，但是当用户无法适应这种输入方式的时候，正确率仍然很难提升，而这一点在用户之间呈现出极大的方差。这些难以学习的被试的表现极大地拉低了正确率，我们前后做了近二十位被试，平均下来的正确率仍然很低。他们常常需要我们进行逐步的指导和及时的提醒，才能勉强达到总体的平均水平。至于实用性，是一直被争论的一个点。我们开始设想的时候，想到强调<em>隐私性</em>会使这个故事比较好讲，因为从一开始我们觉得指尖这种小动作输入能够带来更高的隐私性，从而在公共空间进行输入时能够更好地保护个人隐私。但是这需要我们在论文中追加特定的实验来说明，否则最多只能起到画龙点睛的作用。而不谈隐私性，似乎这种输入技术在当下没有使用的场景，从而给论文带来了极大的基础困难。</p>

<p>在努力挣扎了两个月的用户评估实验后，实验结果仍然没有达到期望，所以似乎这种交互方式也走到了探索的尽头。又恰逢毕业年我们开始毕业设计的选题和研究，我们便想采取一直搁置的退路——将目前的算法和进度交付给其他同学来完成。一是我们目前的探索方向很多，即使别人来做这个方向也能提前排除做不出来的方向；二是基于目前这套硬件设备的情况下，我们的实验平台、数据处理的一些框架的部分算法都能继续使用，从而接手的同学能够很快上手。</p>

<h2 id="微操作输入-tinywrite">微操作输入 TinyWrite</h2>

<p>在项目移交其他同学之后，我们又参加了最初的几次讨论，而之后也只是偶尔跟进了项目的状态。到其完成论文写作和投稿为止，又与之前的交互设计和故事有了很大的改变。首先是书写方式，不再是之前强调的<em>滚动</em>，而是允许滑动，但滑动范围要尽量的小；其次是从用户的指尖方向变成了用户书写时对书写范围的感知，即用户最小能在多大的面积里书写；第三是强调了隐私性，补充了对应的实验，而不是以正确率为唯一指标。我后来也参加了一些项目验收和评估实验等环节，体验了他们完全使用神经网络预测来做黑盒输入的效果和防偷窥效果，感觉就正确率来说，大抵是接近这种交互输入的极限了。</p>

<h2 id="注释-notes">注释 Notes</h2>
<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>CHI, Conference on Human Factors in Computing Systems, 人机交互领域顶会。 <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2" role="doc-endnote">
      <p>自那之后之前那份项目就无人问津了。 <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3" role="doc-endnote">
      <p>说来也巧，如果那时候不提前回校，再迟几天就因为疫情爆发而回不了了。 <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:4" role="doc-endnote">
      <p><a href="https://dl.acm.org/doi/10.1145/3313831.3376244">AutoGain: Gain Function Adaptation with Submovement Efficiency Optimization</a>. <a href="#fnref:4" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:5" role="doc-endnote">
      <p><a href="https://morph.sensel.com/">商用压力板设备</a>. <a href="#fnref:5" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:6" role="doc-endnote">
      <p>其中一个同学我们一直招募作为使用的被试，可能总计需要发八到十份被试费了。 <a href="#fnref:6" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:7" role="doc-endnote">
      <p><a href="https://www.yorku.ca/mack/chi03b.html">Phrase Sets for Evaluating Text Entry Techniques</a>. <a href="#fnref:7" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:8" role="doc-endnote">
      <p>Dynamic Time Warping，动态时间规整算法，一种对时间序列的相似性进行度量的动态规划算法。命中注定是之后的项目老是频繁用到该算法。 <a href="#fnref:8" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:9" role="doc-endnote">
      <p>说实话当时他在一些零零碎碎的算法和数据处理的优化上也是费了很多功夫，寒假的时候包括寒假之前，我们的汇报和讨论都非常地紧张，进展却因为各种原因非常缓慢，所以当时调出来六七成的正确率已经惊为天人了。并且做到这个时候大家也都很累了，可能需要一些时间来思考这个项目的始末和未来的规划。 <a href="#fnref:9" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:10" role="doc-endnote">
      <p><a href="https://dl.acm.org/doi/abs/10.1145/964696.964703">EdgeWrite: a stylus-based text entry method designed for high accuracy and stability of motion</a>. <a href="#fnref:10" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="科研长河" /><category term="" /><summary type="html"><![CDATA[Intro]]></summary></entry><entry><title type="html">滑动输入中的键盘布局研究</title><link href="/blog/%E6%BB%91%E5%8A%A8%E8%BE%93%E5%85%A5%E4%B8%AD%E7%9A%84%E9%94%AE%E7%9B%98%E5%B8%83%E5%B1%80%E7%A0%94%E7%A9%B6" rel="alternate" type="text/html" title="滑动输入中的键盘布局研究" /><published>2023-09-18T00:00:00+00:00</published><updated>2023-09-18T00:00:00+00:00</updated><id>/blog/%E6%BB%91%E5%8A%A8%E8%BE%93%E5%85%A5%E4%B8%AD%E7%9A%84%E9%94%AE%E7%9B%98%E5%B8%83%E5%B1%80%E7%A0%94%E7%A9%B6</id><content type="html" xml:base="/blog/%E6%BB%91%E5%8A%A8%E8%BE%93%E5%85%A5%E4%B8%AD%E7%9A%84%E9%94%AE%E7%9B%98%E5%B8%83%E5%B1%80%E7%A0%94%E7%A9%B6"><![CDATA[<h2 id="intro">Intro</h2>

<p>这次经历自大二年级秋季学期开始，大概到春季学期结束。这是我第一次接触科研，也是从这一次经历开始踏入了人机交互的领域。</p>

<h2 id="学术新星">学术新星</h2>

<p>“学术新星”是计算机系特有的类似于学校的SRT<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>课程的学术活动，但是相对于SRT来说，它并不是一门课程，不占任何学分；来去自由，进入和退出没有特别的手续；成果和所谓验收尺度宽松，根据目标会有大的经费额度。每学年的秋季学期都会有新的招新活动<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">2</a></sup>，由同学在系内平台上报名，再由老师筛选，进而开启讨论、研究等等。</p>

<p>当时只是怀着好奇要报名这个项目，并没有说要借此机会入门科研什么的。当时和舍友一起从众多的项目主题中挑出几个备选，然后从中选取了人机交互的项目。报名之后我们还不知道要怎么操作，我还发了一封邮件给老师询问相关的信息，或者会有午餐局什么的。后来通知所有报名人机交互的同学一起开了个会<sup id="fnref:3" role="doc-noteref"><a href="#fn:3" class="footnote" rel="footnote">3</a></sup>，会上由学长学姐们介绍各自的项目，并由我们按志愿法选择。我报名了“空中滑行输入”之类的项目，而舍友报名了“智能指环上的文本输入”之类<sup id="fnref:4" role="doc-noteref"><a href="#fn:4" class="footnote" rel="footnote">4</a></sup>，恰巧这两个项目又是同一个学长负责。就在一系列巧合之后，我也算是一只脚踏进了科研之中。</p>

<h2 id="shark2">SHARK^2</h2>

<p>一般来说进组打工是从阅读文献开始的，我也不例外。当时我们的主题是“滑行输入”，最经典的文章之一是SHARK^2<sup id="fnref:5" role="doc-noteref"><a href="#fn:5" class="footnote" rel="footnote">5</a></sup>。按照安排是每周一次的讨论，前几次也都是在讨论这一篇文章。而且由于各种活动的存在，秋季学期一共也没有几次完整的讨论。这篇文章中所给出的滑行输入的概念、步骤和算法给了我之后开发这一方面的交互提供了很多的帮助。</p>

<h2 id="键盘布局">键盘布局</h2>

<p>当时在几次讨论之中，一直悬而未决的问题是我们这个项目的问题是什么。一开始有想做滑行输入的综述，并且聚焦在设备和键盘布局上，但是后来放弃了；后面还是想抓住键盘布局这件事，于是想在XR的环境下进行空中滑行输入的交互中探究键盘布局的影响。于是寒假我把Oculus Quest 2带回家进行开发，主要是针对键盘的大小、位置（相对用户）和形状（弯曲弧度），探究最适合该场景下的参数。而如何定义“适合”，还停留在用户输入文本时指尖所走过的路径的长度。</p>

<h2 id="afterword">Afterword</h2>

<p>自寒假结束后，该项目的进度就停滞不前了。我已记不清为何当时停止了，大概也是因为他们的另一个项目需要参加“挑战杯”而被迫暂停，从而没有再重启。这段经历说长不长，说短不短，但是还是让我稍微碰到了一些人机交互的凤毛麟角，也是这一次经历成为了接下来研究的铺垫。</p>

<h2 id="注释-notes">注释 Notes</h2>
<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>Scientific Research Training. <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2" role="doc-endnote">
      <p>发展到现在也有暑假的项目。 <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3" role="doc-endnote">
      <p>没有想到当时在会上的所有同学，都已经是潜在的争夺名额的对手了。 <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:4" role="doc-endnote">
      <p>对于他来说也是命运的选择了。 <a href="#fnref:4" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:5" role="doc-endnote">
      <p><a href="https://dl.acm.org/doi/10.1145/1029632.1029640">SHARK^2: a large vocabulary shorthand writing system for pen-based computers</a>. <a href="#fnref:5" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="科研长河" /><category term="" /><summary type="html"><![CDATA[Intro]]></summary></entry><entry><title type="html">计95的快乐篮球</title><link href="/blog/%E8%AE%A195%E7%9A%84%E5%BF%AB%E4%B9%90%E7%AF%AE%E7%90%83" rel="alternate" type="text/html" title="计95的快乐篮球" /><published>2023-06-05T00:00:00+00:00</published><updated>2023-06-05T00:00:00+00:00</updated><id>/blog/%E8%AE%A195%E7%9A%84%E5%BF%AB%E4%B9%90%E7%AF%AE%E7%90%83</id><content type="html" xml:base="/blog/%E8%AE%A195%E7%9A%84%E5%BF%AB%E4%B9%90%E7%AF%AE%E7%90%83"><![CDATA[<h2 id="intro">Intro</h2>

<p>随着紫荆之巅赛制的更换、酒井3v3的未报名和5v5的未举办，计95的快乐篮球就这样仓促地画上了句号。在临近毕业的这个时刻，让我们整体回顾一下计95一波三折的篮球路程<sup id="fnref:1" role="doc-noteref"><a href="#fn:1" class="footnote" rel="footnote">1</a></sup>。</p>

<h2 id="19-20-那年初见">19-20 那年初见</h2>

<p>2019年，初入清华园的计95班的同学们，开始了他们四年的篮球之旅。</p>

<p>这只球队迎来的第一个挑战是来自计85的新老对抗赛。</p>

<p>在新老对抗赛上，计85的学长们好好地给初出茅庐的小队员们上了一课。尽管遗憾落败，我们仍旧看到了这只班级队伍的潜力——内线的拼抢、外线的突投。而在随之到来的紫荆之巅比赛又给了这只队伍当头一棒。尽管都是新生班级，烽火9似乎是更有策略和拼劲的一方。在无休止的快节奏进攻和逼抢反击下，计95很快地结束了他们的第一次紫荆之巅的旅程。又由于开始时并未选择报名酒井3v3<sup id="fnref:4" role="doc-noteref"><a href="#fn:4" class="footnote" rel="footnote">2</a></sup>，计95班的第一年篮球活动也就此沉寂下来。</p>

<h2 id="20-21-跌宕起伏">20-21 跌宕起伏</h2>

<p>经历了2020年春的特殊学期，在相继错过系内篮球赛和校内新生杯后，计95的小伙子们再聚在球场上一起打球，已经是2020年秋天了。进过分流和转系后，班里的新鲜血液不少，但篮球队却开始捉襟见肘。特别是失去内线大将后，队伍的体型被迫再次缩小。</p>

<p>这一年的紫荆之巅外卡赛，换成了组内双淘4进2的赛制。计95班连续匹配到两个更有经验的七字班的队伍——工72和建管7。尽管奋力拼抢，屡次在追分时打停对手，队员们仍然无法弥补体型、轮换和经验的差距，最后遗憾落败。</p>

<p>这一年的酒井5v5，虽然和计97班联队搭配出了更合理的阵容，但面对茶园零字班的强大阵容还是败下阵来。在比赛的最后时间，我们终于开始贯彻“快乐篮球”的理念，疯狂的外线出手和攻守转换，甚至让对手在一瞬间都升起一阵寒意。</p>

<p>这一年的酒井3v3让人眼前一亮。虽然不敌老牌劲旅计74，但面对计97的加时三分逆转，再次展现了这只队伍隐藏的外线火力<sup id="fnref:2" role="doc-noteref"><a href="#fn:2" class="footnote" rel="footnote">3</a></sup>。虽然没有从小组赛出线，但未来可期。</p>

<h2 id="21-22-计九之光">21-22 计九之光</h2>

<p>2021-2022赛季，是计95的运动员们成绩井喷的一个赛季，对于篮球队来说同样如此。随着专业课压力的加重，他们错过了第三十九届学生节，却没错过一场篮球比赛。</p>

<p>蛰伏两年的紫荆之巅队伍终于在这个赛季抽到了老生赛区的好签，队员们也用更果断、积极的赛场表现把握住了机会。在2021年10月24日，程序员节当天，计95班用防守反击和三分，击败机械04带来了紫荆之巅的第一场胜利（也是唯一一场非弃赛胜利）。在第二轮外卡赛中由于对手忙于学生节选择弃赛，计95班终于在园子的第三年打入春季学期的正式赛。尽管在正式赛中连续不敌兄弟班级计91和英82-日8，遗憾止步64强，但队员们展现了极佳的精神风貌和竞技状态。</p>

<p>这个赛季的酒井5v5，计95班和计91、计94班组成了九字班的豪华阵容，在半决赛轻取计12-15-17联队，并在决赛的加时赛中惊险战胜计08-经02-计06联队夺冠。这也是计九年级在酒井杯篮球赛上的唯一一座冠军奖杯<sup id="fnref:3" role="doc-noteref"><a href="#fn:3" class="footnote" rel="footnote">4</a></sup>。</p>

<p>这个赛季的酒井3v3，计95班深入贯彻了小球理念，拉满了机动性和空间，将外线优势发挥得淋漓尽致。小组赛连克计科02、计91、计02，虽然最后不敌计11，仍然以小组头名出线。虽然在之后的半决赛中面对综体的篮筐失去准星，被计15班在加时赛中以一记弧顶三分还施彼身，但还是在季军战中找回场子，大胜计科02夺得季军。</p>

<h2 id="22-23-仓促谢幕">22-23 仓促谢幕</h2>

<p>2022-23赛季，随着队伍中核心成员因系队比赛缺席紫荆之巅，计95的最后一年将以快乐篮球画上休止符。</p>

<p>2022年10月29日，凑齐人数压线报名成功的计95班队迎来了大四的第一场5v5比赛。由于当天还是最后一天体测，队员们还险些因为迟到超出规定而被直接判负。赛场上大家贯彻了赛前制定的快乐篮球理念，疯狂的增加回合数、外线无理由的出手和放弃可能的内线逼抢来提升推进速度。全场队员们一共扔进13个三分，每个人都有持球表现的机会。没有了战绩的压力，场上充满了欢声笑语。然而，没有人意识到这竟是最后一次班级篮球赛。</p>

<p>随着2022年末的疫情爆发与放开，紫荆之巅赛程也受到了影响，直到次年春天才重新开启。即使后两轮小组赛对手相继弃赛，计95在一场未赢的情况下拿到了2胜1负，也因4进1的赛制再次无缘正式赛。加上酒井3v3未报名和5v5未举办，计95的快乐篮球就这样仓促地画上了句号。</p>

<h2 id="总结">总结</h2>

<p>4年，10位队员，23场比赛，12场胜利。</p>

<p>每个人都为这个团队奉献了自己的力量，无论是在训练场上还是比赛中，都展现了出色的技术和团队合作精神。在这个过程中，我们每个人都得到了成长。我们学会了互相支持和鼓励，学会了坚持不懈和永不放弃的精神。我们共同经历了困难和挫折，但正是这些挑战塑造了我们的性格，并让我们更加坚强和自信。除了技术上的提升，我们还建立了深厚的友谊和团队精神。在比赛中，我们相互激励，相互扶持，成为了彼此最可靠的伙伴。无论胜利还是失败，我们都一起度过了难忘的时光，创造了属于我们的篮球传奇。</p>

<p>感谢每一位队员对班级篮球队的贡献，无论在球场上担任什么角色，都始终保持着无止境的热情、毅力和奉献。同样感谢班级成员和联队的兄弟班级的努力和支持（特别是到现场观战的观众们），荣誉簿上值得写上所有同学的大名。</p>

<p>4年的篮球旅程即将画上句号，但这段经历将永远留在我们心中。我们将继续保持这种团队精神和追求卓越的态度，不仅在篮球场上，而且在生活的各个方面。无论将来去往何处，我们都会记住这段珍贵的回忆，感激这段美好时光。</p>

<h2 id="战绩表">战绩表</h2>

<h3 id="计95班队5v5战绩">计95班队5v5战绩</h3>

<table>
  <thead>
    <tr>
      <th>时间</th>
      <th>胜负情况</th>
      <th>对手</th>
      <th>比分</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>2019.09.19</td>
      <td>负</td>
      <td>计85</td>
      <td>33-52</td>
    </tr>
    <tr>
      <td>2019.10.19</td>
      <td>负</td>
      <td>烽火9</td>
      <td> </td>
    </tr>
    <tr>
      <td>2020.10.24</td>
      <td>负</td>
      <td>工72</td>
      <td> </td>
    </tr>
    <tr>
      <td>2020.11.14</td>
      <td>负</td>
      <td>建管7</td>
      <td>29-41</td>
    </tr>
    <tr>
      <td>2021.10.24</td>
      <td>胜</td>
      <td>机械04</td>
      <td>35-12</td>
    </tr>
    <tr>
      <td>2021.11.13</td>
      <td>胜</td>
      <td>计03</td>
      <td>弃赛</td>
    </tr>
    <tr>
      <td>2022.03.13</td>
      <td>负</td>
      <td>计91</td>
      <td> </td>
    </tr>
    <tr>
      <td>2022.03.20</td>
      <td>负</td>
      <td>英82-日8</td>
      <td> </td>
    </tr>
    <tr>
      <td>2022.10.29</td>
      <td>负</td>
      <td>行健-车辆0</td>
      <td> </td>
    </tr>
    <tr>
      <td>2022.11.26</td>
      <td>胜</td>
      <td>机械12</td>
      <td>弃赛</td>
    </tr>
    <tr>
      <td>2023.03.11</td>
      <td>胜</td>
      <td>计科03</td>
      <td>弃赛</td>
    </tr>
  </tbody>
</table>

<h3 id="计95联队5v5战绩">计95联队5v5战绩</h3>

<table>
  <thead>
    <tr>
      <th>时间</th>
      <th>胜负情况</th>
      <th>对手</th>
      <th>比分</th>
      <th>联队班级</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>2021.05.24</td>
      <td>负</td>
      <td>茶0</td>
      <td>27-60</td>
      <td>计97</td>
    </tr>
    <tr>
      <td>2022.04.30</td>
      <td>胜</td>
      <td>计02</td>
      <td>弃赛</td>
      <td>计91计94</td>
    </tr>
    <tr>
      <td>2022.05.15</td>
      <td>胜</td>
      <td>计12-15-17</td>
      <td>58-40</td>
      <td>计91计94</td>
    </tr>
    <tr>
      <td>2022.06.05</td>
      <td>胜</td>
      <td>计08-经02-计06</td>
      <td>57-51(OT)</td>
      <td>计91计94</td>
    </tr>
  </tbody>
</table>

<h3 id="计95班队3v3战绩">计95班队3v3战绩</h3>

<table>
  <thead>
    <tr>
      <th>时间</th>
      <th>胜负情况</th>
      <th>对手</th>
      <th>比分</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>2020.10.30</td>
      <td>负</td>
      <td>计74</td>
      <td>10-14</td>
    </tr>
    <tr>
      <td>2020.11.02</td>
      <td>胜</td>
      <td>计97</td>
      <td>12-11</td>
    </tr>
    <tr>
      <td>2021.10.17</td>
      <td>胜</td>
      <td>计科02</td>
      <td>10-7</td>
    </tr>
    <tr>
      <td>2021.10.24</td>
      <td>胜</td>
      <td>计91</td>
      <td>7-5</td>
    </tr>
    <tr>
      <td>2021.11.14</td>
      <td>胜</td>
      <td>计02</td>
      <td>12-7</td>
    </tr>
    <tr>
      <td>2021.11.21</td>
      <td>负</td>
      <td>计11</td>
      <td>11-13</td>
    </tr>
    <tr>
      <td>2022.03.19</td>
      <td>负</td>
      <td>计15</td>
      <td>12-14</td>
    </tr>
    <tr>
      <td>2022.03.19</td>
      <td>胜</td>
      <td>计科02</td>
      <td>15-5</td>
    </tr>
  </tbody>
</table>

<h2 id="注释-notes">注释 Notes</h2>
<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:1" role="doc-endnote">
      <p>本文首发于计95班微信公众号“旧屋记”<a href="https://mp.weixin.qq.com/s/_RDl2ZZmMHRj8SgNACKudw">计95的快乐篮球</a>。 <a href="#fnref:1" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:4" role="doc-endnote">
      <p>根据聊天记录，当时选择不报名的原因竟是觉得比赛太多。 <a href="#fnref:4" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:2" role="doc-endnote">
      <p>当天恰逢我的生日，于是这场战报与生推合二为一了，请移步<a href="https://mp.weixin.qq.com/s/_RDl2ZZmMHRj8SgNACKudw">人类历史最辉煌的一刻</a>。 <a href="#fnref:2" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:3" role="doc-endnote">
      <p>半决赛及决赛的高光时刻可移步<a href="https://www.bilibili.com/video/BV1NB4y1s7Ax/">2022年清华大学计算机系酒井杯5v5篮球联赛计91-94-95联队夺冠混剪</a>。 <a href="#fnref:3" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name></name></author><category term="贵系风云" /><category term="" /><summary type="html"><![CDATA[Intro]]></summary></entry><entry><title type="html">Euler and Complex</title><link href="/blog/Euler-and-Complex" rel="alternate" type="text/html" title="Euler and Complex" /><published>2023-04-30T00:00:00+00:00</published><updated>2023-04-30T00:00:00+00:00</updated><id>/blog/Euler%20and%20Complex</id><content type="html" xml:base="/blog/Euler-and-Complex"><![CDATA[<h2 id="链接-link">链接 Link</h2>

<p><a href="https://www.bilibili.com/video/BV1RE411J7Wd/">复数本原根里出现了欧拉函数？！</a></p>

<h2 id="缘由-cause">缘由 Cause</h2>

<p>当时正在学习《高等线性代数选讲》，讲到本原根的相关内容，像复数这种可视化帮助极大的知识点，非常适合数学动画。</p>

<h2 id="注释-notes">注释 Notes</h2>]]></content><author><name></name></author><category term="Manim" /><category term="" /><summary type="html"><![CDATA[链接 Link]]></summary></entry><entry><title type="html">Exponential Matrix</title><link href="/blog/Exponential-Matrix" rel="alternate" type="text/html" title="Exponential Matrix" /><published>2023-04-30T00:00:00+00:00</published><updated>2023-04-30T00:00:00+00:00</updated><id>/blog/Exponential%20Matrix</id><content type="html" xml:base="/blog/Exponential-Matrix"><![CDATA[<h2 id="链接-link">链接 Link</h2>

<p><a href="https://www.bilibili.com/video/BV1Vv411z76L/">如果把指数函数中的数换成矩阵该怎么计算呢？</a></p>

<h2 id="缘由-cause">缘由 Cause</h2>

<p>当时正在学习《高等线性代数选讲》，讲到矩阵的指数计算，和谱半径、约当表达式这些联系比较大，况且对于矩阵来说可视化是比较好的帮助理解方式，所以就选择了这个内容来制作视频。</p>

<h2 id="注释-notes">注释 Notes</h2>]]></content><author><name></name></author><category term="Manim" /><category term="" /><summary type="html"><![CDATA[链接 Link]]></summary></entry><entry><title type="html">Infinite Lava Fabric</title><link href="/blog/Infinite-Lava-Fabric" rel="alternate" type="text/html" title="Infinite Lava Fabric" /><published>2023-04-30T00:00:00+00:00</published><updated>2023-04-30T00:00:00+00:00</updated><id>/blog/Infinite%20Lava%20Fabric</id><content type="html" xml:base="/blog/Infinite-Lava-Fabric"><![CDATA[<h2 id="起因-intro">起因 Intro</h2>

<p>最初是21年寒假在家自己做了以科技复兴（Tech Reborn）为核心的整合包，然后对于几乎所有的科技模组来说，能量的充足供应是一个逃不开的话题。一种无限能源的方式是地毯机配合燃料发电机，然而其存在卡顿严重、效率低等问题。而岩浆作为较高效率的燃料，如果能像水一样再生，那么对于能源的产生将产生很大帮助。</p>

<h2 id="类似模组-related-work">类似模组 Related Work</h2>

<p>在此之前也有很多像控制流体无限性的模组，既有单纯以岩浆为主题的，也有兼有功能性和扩展性的模组，有开发者制作了<a href="https://modwiki.miraheze.org/wiki/Instant_Lava">相关wiki</a>，用于查询不同版本对应可用的模组。对于1.18.1的Fabric来说，正好缺乏这个功能的模组，故我选择进行重新开发。</p>

<h2 id="历程-story">历程 Story</h2>

<p>本身无限岩浆是一个很简单的功能，只需要找到原版里对应的岩浆的属性方法，对返回值进行Mixin就可以。主要是整个模组打包的过程，其中一些配置文件的修改也比较考验信心。</p>

<h2 id="注释-notes">注释 Notes</h2>]]></content><author><name></name></author><category term="Minecraft" /><category term="" /><summary type="html"><![CDATA[起因 Intro]]></summary></entry></feed>