<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.1">Jekyll</generator><link href="https://www.songchaow.cn/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.songchaow.cn/" rel="alternate" type="text/html" /><updated>2025-03-29T14:59:46+00:00</updated><id>https://www.songchaow.cn/feed.xml</id><title type="html">Doggie’s Blog</title><subtitle>一只爱音乐的程序汪</subtitle><author><name>songchaow</name><email>songchaow@outlook.com</email></author><entry><title type="html">主剧情 大一下（二）</title><link href="https://www.songchaow.cn/ustc-memo/gradeoneII-2/" rel="alternate" type="text/html" title="主剧情 大一下（二）" /><published>2023-01-08T00:00:00+00:00</published><updated>2023-01-08T00:00:00+00:00</updated><id>https://www.songchaow.cn/ustc-memo/gradeoneII-2</id><content type="html" xml:base="https://www.songchaow.cn/ustc-memo/gradeoneII-2/"><![CDATA[<h2 id="选专业的那些事">选专业的那些事</h2>

<p>大一下开始，选专业的讨论气氛就愈来愈浓。科大的一大特色便是鼓励学生自由选专业。原先该政策仅在少院实施，后来学校觉得不错，就在全校推广。原则上，只要你的绩点不过于拉胯（要求真的不高），便可以在大二时自由转一次专业。
这真是赞不绝口的良心政策，因为专业的选择实在是太重要了。我觉得，如果别的C9高校仍然对转专业有各种硬性限制，那高考后选科大便是非常有说服力的选择，如果你有得选。
（我见过一些读完本科再转专业的同学被动局面，转当然没问题，但我认为太晚转之后的专业性与深入程度，都会比本科直接学该专业的人要落后不少。）
<!-- 尤其是现在竞争激烈的人才市场，理想情况就是在本科毕业时就能把一个合适的专业的基础技术掌握的很好。 --></p>

<!-- 对于大多数职业来讲，现在的社会希望你能专精一门技能，而非是各个技能的基础课都懂一点点。比如，你完全可以做到生物、化学等知识停留在高中水平，但计算机知识非常突出，在互联网市场这样就会非常受欢迎。 -->
<!-- 因此，如果专业是自己不喜欢的， -->

<h3 id="选物理">选物理？</h3>

<p>当时选专业时，少院有好多人都一窝蜂想学物理。</p>

<p>当时他们选物理专业的动机，不外乎以下几种：</p>

<ol>
  <li>
    <p>物理是科大的王牌专业，不学这个可惜了。这个理由有一定道理，但显然没有抓住选专业的主要矛盾。</p>
  </li>
  <li>
    <p>觉得自己很擅长物理。确实有人会有这种错觉，因为很多少院的学生都是高中学过物理竞赛。但同样也站不住脚，因为我们擅长的只是高等物理的基础课，我们确实有基础，但挖深了，谁也难说谁擅长。</p>
  </li>
  <li>
    <p>觉得物理专业容易出国，可以作为出国跳板。我身边确实有学长学姐是这么做的。要么他们刚开始就打算这么做；要么是一开始没想那么多，只是喜欢物理，结果出国了又转成干别的了。就我认识的人而言，他们目前过的好像也都还不错。</p>
  </li>
  <li>
    <p>还有一个看起来非常有道理的理由，当年不少前辈都会这么说：先学物理，可以让你打好数理基础，之后呀，做什么方向都会很容易转。</p>
  </li>
  <li>
    <p>随大流。</p>
  </li>
</ol>

<p>包括我自己，一开始因为不了解别的，也是想选物理。但后来因为C语言，写爬虫等经历，觉得计算机也是非常的有意思，就陷入了纠结。
最后，应该是觉得计算机的实用性和可玩性还是要比物理多，而且当时已经感受到，自己对于编程有一种强烈的适应性，觉得它就是我想画大部分时间去干的事情，才定了下来学计算机。</p>

<p>现在想来，第3点理由真是好奇怪。当时包括我，即使确定自己想选计算机了，也总是在纠结，以后能不能争取出国。</p>

<p>当时我已经确定喜欢计算机了。但我也是希望自己能够有远大的“勇攀科学高峰理想”，至少不要放弃出国的可能性。当时总是在群里求证，计算机容不容易出国呀，直到得到学长答复“计算机毕业出国深造的也挺多的”，才安心了一些。</p>

<p>可以看看我当时给教授发的请教如何选专业的傻邮件，充分的应证了上述想法：</p>

<p><img src="/assets/images/ustc-memo/choose_major_email.png" alt="chose_email" /></p>

<p>当时教授还认真的回了我，大概是说，还是要遵从兴趣，不要以容不容易出国来决定选哪个专业；计算机如果学得好，也有机会出国的。</p>

<p>但是大一的我，就一直没去深究：为什么要出国呢？为什么出国更好呢？</p>

<p>科大学生都是很上进的，我觉得当时，我们都默认“出国”为上进的比较合理的体现。归根到底，我觉得这还是受科大传导的价值观引导：勇攀科研高峰。我认为，当时很多同学的想法，甚至直到今天，也有很多同学的想法，是这样：</p>
<ul>
  <li>出国 = 深造 = 追求更高层次的东西 = 高大上；</li>
  <li>与此相比，就业 = 就这样了 = 到此为止。</li>
</ul>

<p>这当然是很片面的，更要分具体行业来讨论。但我相信，直到今天，也有很多人心底里仍持有着上述这两行所反映出的评价体系，只不过没有这么公开说出来而已。</p>

<p>真正的事实是，“不出国 读研”，乃至“不读研直接就业”，同样可以“深造”，同样可以”追求更高层次“，更同样可以“高大上”，绝不是“到此为止”。
以上的正确观点，在本科，绝不会成为科大的主流校方舆论导向（这是可以理解的。在宣传口径上，科大本来就是以科研成果居多为优势，当然需要寄希望新的学生能够继承学校的优秀传统）。</p>

<p>但让人欣慰的是，有一部分群体在本科时，为我们指点迷津。这个群体就是科大的校友会。科大的一些事业有成的90至00级的校友们，热心的为我们15级的本科生建了群，答疑解惑，虽然我们问题不算多，但校友们都很畅所欲言。他们告诉我们，整个少年班学院，只有百分之10几的同学还留在纯学术界，你们大可不必限制自己做科研，而是要多了解一下现在工业界在发生什么。</p>

<p>他们的一些话语，慢慢的引导我开始去不顾传统的评价体系，一心去想自己真正喜欢专业，喜欢什么行业。现在觉得，前辈们的话可真是肺腑良心之言。</p>

<p>上面这些价值主张，是我整个文章系列一直想强调的东西之一。我不知道现在的科大学生有没有受学校这些传统价值观导向的影响，只希望未来的新学生，能够像清北复交那样，走向多元化的评价体系，抛弃唯分数与科研论。<strong>找到自己喜欢做的事情永远比GPA多那么零点几，多发几篇论文，更让人佩服。</strong></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>另外有个题外话：客观来说，国外的科研环境很多地方确实要比国内好。
所以，如果你认同并践行科大勇攀科研高峰的价值观，那出国确实是更优的选择。


当然，后来过了几年，等我读研究生以后，随着贸易战影响美国签证，以及美国的种种社会矛盾现象以及咱们祖国的许多事迹被国人看到，出国的意愿在学弟学妹们中应该是大有减弱，同时，15年以后的计算机的就业热潮也引起了本科大二转专业时CS的转入条件水涨船高。这都是后话了。
</code></pre></div></div>

<p>选专业的思考讲到这里，该讲一些故事了。</p>

<h2 id="电磁学课">电磁学课</h2>

<p>大一下的课业仍然以物理、数学为主。主要是电磁学、热学、线性代数、数分II。电磁学的教授cfz老师年纪不小了，上课仍然精神得很，平时沟通课业时也是笑眯眯的和我们讲话。不过遇到不遵守课堂规矩的行为的学生，比如上课吃东西，会直接呵斥或者赶出教室，是十分重视课堂纪律的老师了。
这门课还组织了两次学生参观，有一次去合肥的科学岛看EAST与强磁场中心，另一次是去科大西区的一个科研机构。不愧是科大的招牌课程，详细介绍可看<a href="https://icourse.club/course/4942/">这里</a>。</p>

<h3 id="爬虫">爬虫</h3>

<p>不过那年的电磁学课，我还有些别的收获。</p>

<p>电磁学课的大概第二周左右，座位旁边来了一只妹子，选课选的晚，仓仓促促地找我问以前作业是啥，前几周课程讲了啥。原来她是大二的学姐，重修的这门课。
因为她的学习态度也很好，那门课我们俩就成为了学习伙伴，交流变得很多。当时我们的书生气都挺浓，课间都会讨论问题，课后也会交流作业对答案。
其实学习伙伴倒不是重点，重点是，妹子竟然还是USTC评课社区网站的创始人，jenny42。
因为jenny42接触过评课系统的Web开发，有不少计算机背景，她向我展示了她或者她的同学写过的数个爬虫代码，有的爬虫会帮她在教务系统刷课，有的爬虫纯粹是搞破坏用的。真是大开眼界，直接让我迷上了写爬虫。写爬虫的知识、技术、设备门槛，真的不算高。你只要有一台有开发者工具的浏览器，比如Chrome，再有个Python，就可以开始实践。</p>

<p>当时写了几个简单的爬虫，比如在学校的图书馆页面的搜索历史界面，刷出“废理兴工”之类的关键字。
直到今天，我还是很喜欢写爬虫。</p>

<p>也就是那个时候，我开始接触到了计算机网络相关的知识，也体会到了使用工具和编程帮助自己自动化的完成任务的好处。</p>

<h3 id="小论文">小论文</h3>

<p>物理我仍然是喜欢的。只不过，鱼和熊掌不可兼得。大一下学期，基本就是我对物理最后认真的一段时期了。
当时电磁学课有个“电磁学小论文”需要写。</p>

<h2 id="别的课">别的课</h2>

<p>别的课就没啥好玩的。</p>

<p>热学课的老师是zpf，课程介绍在<a href="https://icourse.club/course/21640/">这里</a>。这个老师看得出来很热爱物理学术，用latex整理的课件教材也是严谨细致，但讲课水平就十分有待提高了。</p>

<p>我还记得他讲课总是面带微笑，情绪平静、声调平稳、语速均匀地把讲课内容给念出来，而当时的热学课又刚好是下午两点，所以老师讲课的催眠效果就特别棒。</p>

<p>夏天诺大的教室，只有老师干燥的声音在回荡，下面的人都东倒西歪。有时候老师提了个问题想和我们互动下，结果过了几秒，下面都是鸦雀无声。
老师就会略带惊讶，但依然是情绪平静、声调平稳、语速均匀地道出：</p>

<p>“怎么都不说话……”</p>

<p>“都被难倒啦？……”</p>

<p>“啊？……”</p>

<p>我们就在底下憋着笑，静观老师表演。现在想来，真是没礼貌。</p>

<p>数学课就更无聊了。无聊，只是说自己的感受，并不关联老师的行为。线代老师、数分老师都是非常敬业的。只是自己当时已经开始只觉得计算机有意思。数学课相对而言就没那么有意思了，数学对我来讲只是个工具。</p>

<p>而且我的计算能力差也开始体现，因为下学期的数分II课程，主要讲的是多变量微积分，题目的计算量显然要比单变量微积分要大一些。那学期的数学课好像都考得不太好，不是算错就是没算完。</p>

<p>之后就要开始写大二的经历了。计算机专业课会有意思很多，操作系统、编译原理、体系结构的实验都让我觉得很刺激。</p>]]></content><author><name>songchaow</name><email>songchaow@outlook.com</email></author><category term="ustc-memo" /><category term="memo" /><summary type="html"><![CDATA[选专业的那些事]]></summary></entry><entry><title type="html">我在科大的故事——新目录</title><link href="https://www.songchaow.cn/ustc-memo/newpreface/" rel="alternate" type="text/html" title="我在科大的故事——新目录" /><published>2023-01-07T00:00:00+00:00</published><updated>2023-01-07T00:00:00+00:00</updated><id>https://www.songchaow.cn/ustc-memo/newpreface</id><content type="html" xml:base="https://www.songchaow.cn/ustc-memo/newpreface/"><![CDATA[<p>原本”我在科大的故事“这个系列是在本科毕业的那年写的，那年比较闲，想写一下当时在科大经历的一些事（即使这样，也依然是烂尾了哈哈哈）。转眼间三年过去了，旧的事情没有写完，在科大的研究生和公司里又有了不少新的故事。
我自己，15少，19计，现在人在深圳的鹅厂，从事游戏行业，每天吭哧吭哧写代码和修bug。现在忙也是很忙，修bug也是挺累，但总归是找到自己喜欢的行业了，这一点我是很满足的。</p>

<p>这个系列，我之前也写过一个序（<a href="/ustc-memo/preface/">这里</a>），现在看来，当时的文笔真是稚嫩的很。现在我再重新写一个罢。
还是主要回忆一些校园相关的事情。</p>

<p>回想这七年，又看到现今2022的就业形势，不少感慨与庆幸一言难尽。
我有时会看到一些计算机系的学弟学妹存在着选择的困惑，我亲眼看着他们走过我曾今的迷惘之处，看到他们中的一部分人摸索出自己的方向走了出来，也看到他们的有的人始终处在迷茫，最后要毕业了，陷入被动。
很多时候我帮不了他们，一方面没多的时间，另一方面，背后也有着利益链条，我帮助了某些人，就可能会坏了另一些人的事情。可能说夸张了点，但在指点学弟学妹如何找好的工作这一点上，我确实很为难。</p>

<p>但我也许能起的作用就是自己写一下自己的经历，这个没啥利益冲突：我把经历、事实和现状都摆给你看，你自己做决定。
有人在GitHub，在微信里如果刷到了我的blog，就可以看到这里。感兴趣的便可以一条一条接着看。</p>]]></content><author><name>songchaow</name><email>songchaow@outlook.com</email></author><category term="ustc-memo" /><category term="memo" /><summary type="html"><![CDATA[原本”我在科大的故事“这个系列是在本科毕业的那年写的，那年比较闲，想写一下当时在科大经历的一些事（即使这样，也依然是烂尾了哈哈哈）。转眼间三年过去了，旧的事情没有写完，在科大的研究生和公司里又有了不少新的故事。 我自己，15少，19计，现在人在深圳的鹅厂，从事游戏行业，每天吭哧吭哧写代码和修bug。现在忙也是很忙，修bug也是挺累，但总归是找到自己喜欢的行业了，这一点我是很满足的。]]></summary></entry><entry><title type="html">难忘的drama与刺激的抢课</title><link href="https://www.songchaow.cn/drama/" rel="alternate" type="text/html" title="难忘的drama与刺激的抢课" /><published>2019-11-02T00:00:00+00:00</published><updated>2019-11-02T00:00:00+00:00</updated><id>https://www.songchaow.cn/drama</id><content type="html" xml:base="https://www.songchaow.cn/drama/"><![CDATA[<p>不知道别的大学有没有类似的，但我觉得科大EPC（English Practice Center）里的drama绝对是科大最有意思的课程之一。</p>

<p>作为口语训练的一种形式，Drama其实就是话剧表演。老师们会准备好剧本，让选到课的10个学生去演。前一个多小时是熟悉剧本和排练的时间，后半小时就是多个小组轮流出演各自的小节目。</p>

<p>当我第一次在EPC网站上发现drama这种课程类型时，就被吸引住了。这种偏表演的英语口语形式是我比较喜欢的，与Debate、Discussion不同，Drama需要你在说话时注重你的感情，句子的语调——嗯，英语的语调其实是很值得考究的，就像我之前写过的 
<a href="/dialects/">漫谈方言</a>一样。虽然英语只有升调和降调，但每个音节到底是升还是降，升多少，降多少，都有很大的灵活性。这也是我觉得语言最有意思的地方之一。</p>

<p>其实以上这种通过丰富的语调变化来表达不同情感的能力，基本上是属于声优的技能了。在一些比较有童话色彩的影视作品中，这种活泼的语调是很常见的。在其他题材的电影里可能体现地少一些，因为片子内的话题可能很成熟，演员们都不屑于这么说话。有一些英语的有声读物也可以体现这些精彩的语调变化，如<a href="https://www.jianshu.com/p/0fc635afbf4a">书虫系列</a>。</p>

<p>扯远了。虽然我一开始就很感兴趣，但我选的时间太晚，等我开始选的时候，Drama就已经排到第6周了。由于对其他类型的课程实在不感兴趣，就直接从第6周开始选了。丝毫没考虑先上几节早一点的课的问题。</p>

<p>于是我在10月9日参加了我的第一门drama课：Butterfly Lovers，也就是梁祝。周三的drama课是由Beata和Hanna老师上的。两位女老师都挺nice，会详细地引导我们排练，并在动作、道具上给出建议。
考虑到我自己特有的变声技能，这一次我机智地选择扮演祝英台的母亲。我帅气的室友ypluo则主动提出演梁山伯，10个人中的唯一的妹子演祝英台，其他人则扮演祝英台的父亲，仆人，马文才等角色。</p>

<p>果然没让我失望！所有人的表演都非常精彩。先上图：</p>

<p>老婆子（我）和老爷子：
<img src="/assets/images/drama/parents.jpg" alt="parents" /></p>

<p>梁兄在和马文才打架：
<img src="/assets/images/drama/fighting.jpg" alt="fighting" /></p>

<p>梁祝最后化蝶的情景：
<img src="/assets/images/drama/butterfly.jpg" alt="butterfly" /></p>

<p>剧本里的故事对原梁祝故事进行了魔改，当然主线没有变，比如把学校改成了中科大。可能是因为已经熟悉故事，每个人都在认真地揣摩如何演的更有表现力：老爷子在生气时上气不接下气的喘气和咳嗽，老婆子在悲伤时惊呼与尖叫的语调（算是我的特长了。。），祝英台灵动的表情与动作，梁山伯的一身正气，都很精彩。</p>

<p>虽然道具和音乐都比较简陋，但丝毫不影响演员们的热情。</p>

<p>演了第一次，就想演爹二次。这时迟钝的我才意识到，drama课已经被抢了太多，可选的drama都排到了第9周开外。</p>

<h2 id="程序诞生">程序诞生</h2>
<p>也就是这时，我下定决心写一个抢课脚本。最开始没打算写那么复杂，只打算实时爬取最早课时，并显示在程序里，自己定期<strong>主动</strong>去看，发现更早的课就去自己操作。</p>

<p>然而，现实是残酷的，第6周周末我发现我的手速并比不上别人。如下图所示，每行的4门课代表4个类型。每门课的新余位，往往只能存在几十秒：</p>

<p><img src="/assets/images/drama/competition.png" alt="butterfly" /></p>

<p>课从自己的手指间溜过的感觉非常不爽，我决定把自动抢课的功能也加上去。第6周的周末基本就花在写代码上去了。</p>

<p>功夫不负有心人，我很幸运，在第6周周日晚上11点多的时候，我抢到了第二天(周一)的drama。</p>

<p>这次轮到Jamie老师来负责我们剧组。然而Jamie不打算自己指导，而是希望让我们自导自演…因为其他人都没经验，无奈之下我就成了那个导演。我们仓促地熟悉剧情，分配角色，划分场景，排练，以及为某些片段挑选配乐，再加上故事本身也不有趣(叫How the Camel Gets His Hump，大家以后记住啦，这个故事非常无聊，讲的就是骆驼是怎么被一个魔法师变得有驼峰的故事)，最后演的有些尬。</p>

<h2 id="换课的支持">换课的支持</h2>
<p>换课是迟早要实现的feature。因为同时选上的课是有限的，所以选课是一个不断优化（不断用更优的课去替换已选上的课）的过程。而换课操作是具有一定的风险的。选课本身其实并不会有什么而风险，大不了没选上而已。而换课就很可能出现退了课却没选上新课，然后旧课又被别人抢走了的尴尬。那段时间里，我不敢懈怠，过几分钟就得主动检查一下换课过程有没有运行正确。</p>

<p>该功能稳定后，程序就强大许多了，我于是可以接二连三地抢到drama。
在学期的早期，随便退课的憨憨同学还挺多，所以我经常能在周日时蹲到周一的drama，在周二时抢到周三的drama。甚至有个别时候，还能为两个人抢到同一节课😄。</p>

<h2 id="更多的drama">更多的drama</h2>
<p>附上一些其他drama课的截图（侵删啊）：</p>

<p>西游记
<img src="/assets/images/drama/xiyouji.jpg" alt="xyj" /></p>

<p>睡觉的狮子
<img src="/assets/images/drama/sleeping_lion.jpg" alt="sleepinglion" /></p>

<p>独处深闺的少女
<img src="/assets/images/drama/alone.jpg" alt="girl" /></p>

<p>后来有孩子了
<img src="/assets/images/drama/withchild.png" alt="withchild" /></p>

<p>另外幸福的一对
<img src="/assets/images/drama/couple.jpg" alt="cp" /></p>

<h2 id="合作">合作</h2>
<p>国庆过后，这个小项目引起了室友们的浓厚兴趣。</p>

<p>勤奋的罗博看了一下午代码，立马就加上了自定义上课时间段的功能。可惜我一直对此功能不感兴趣，因为我只选周一、周三晚上的drama，其他时间段都不在考虑范围内。于是我犯懒，一直没把罗博的功能合到master。罗博和我的代码在之后就分道扬镳，各自实现了各自的功能，有些功能（比如识别验证码，日志）甚至各自都写了一遍。。这种事其实是应该避免的，不过罗博倒也挺乐意把我分支里已有的功能再自己写一遍，反正是练习嘛。</p>

<p>后来汪博也开始用了。对于EPC英语课，汪博一直是很佛系的，在翘了2次课，被限制上课后，略为重视了一些，于是找我要来程序，开始疯狂刷课。他经常是一边用，一边吐槽：怎么抢到了程序就停了，不会接着跑吗？怎么连个日志都没有？</p>

<p>之后的寝室日常就很有趣了。经常是一人大呼：“我抢到了！”，其他几人赶紧打开程序，结果发现一无所获。各种得瑟、嫉妒与埋怨的声音就响起来了：
“你咋强这么快！卧槽你居然开了3个进程……”
“那我开4个！”
“你们小心把网站弄崩了……”
“崩了最好哈哈哈哈……”</p>

<h2 id="推广">推广</h2>
<p>抢课这种灰色产业，我和室友都没打算明目张胆地在朋友圈/空间里面做广告。一方面觉得影响不好，另一方面觉得抢的人多了，怕是自己都抢不到想要的课。
不过到了学期末尾，当和同学聊天，如果对方当面诉苦说抢不到课，我们多半就会主动提起这个工具，并表示愿意帮忙。</p>

<p>这个小工具先后迎来了好几位使用者，他们的评价基本都是积极的，我很开心。但是由于易用性不及GitHub上的同类抢课工具，它并没有广泛的流传开来。</p>]]></content><author><name>songchaow</name><email>songchaow@outlook.com</email></author><summary type="html"><![CDATA[不知道别的大学有没有类似的，但我觉得科大EPC（English Practice Center）里的drama绝对是科大最有意思的课程之一。]]></summary></entry><entry><title type="html">一件小事</title><link href="https://www.songchaow.cn/a-small-thing/" rel="alternate" type="text/html" title="一件小事" /><published>2019-06-22T00:00:00+00:00</published><updated>2019-06-22T00:00:00+00:00</updated><id>https://www.songchaow.cn/a-small-thing</id><content type="html" xml:base="https://www.songchaow.cn/a-small-thing/"><![CDATA[<p>每天都会发生各种各样的小事，我一般不会记，最多只是走在路上和别人闲聊时随便讲下。今天发生的这件事也是小事，但我想详细地记录下来。</p>

<p>我们毕业生都会有一堆书要出掉。我和舍友大师的书在这几天都堆在一起，打算哪个时候一起处理掉。我们打算卖的都很便宜，更多只是希望能留一些资源给学弟学妹们，顺便能有些小收入的话也不排斥。但我们不想让有心之人借此从我们这里低价购得旧书，再到外面高价卖出去。为了防止这种事情发生，我会问收书的人要每本书的目的，如果他什么都不解释只想一股脑全部收走，我就不会答应。</p>

<p>当时，由于忙于毕业期间的各种事务，我还没来得及在跳蚤市场平台发卖书的消息。而就在这时，有两个同学地礼貌地敲了敲宿舍的门，主动来问我们有没有不需要的旧书。</p>

<p>当时我的第一反应是：现在的学弟都这么机灵啦，都学会主动找学长要书了。怀着一点点赞许，我把那一堆书拿给他们看。</p>

<p>他们便认真地开始筛选，选了GRE、TOEFL的单词书和几本物理教材。我看他们把热学、光学、电磁学都选了，就随口问了一句，你们是大几啊，这些课是都要上吗？</p>

<p>他们就说是大一的，但具体是哪些课，就说的支支吾吾，只是说想当参考书。行吧，都是物理书，那就当参考书吧。</p>

<p>选完了之后，他们问我如何收钱。这时我就纠结了，首先纠结的是收不收钱的问题。犹豫了一阵后才判定：收钱是很正当的。</p>

<p>我问了问站在一旁的大师，你觉得这么处理怎么样？大师一语不发。于是我随口提了一个大概每本3块的价钱。</p>

<p>他们就给我讲，他们找其他学长买书的时候，基本都是按1元一本的。</p>

<p>听他们这么解释，我也不想多讲价，就依他们了，还说了一句“本来我也不打算收多少钱”之类的话。</p>

<p>那两位同学连连摆手，说：“还是要给一点钱的，直接拿太不好意思了。” 这时我的心似乎为他们的有教养而感动……</p>

<p>等两位同学走后，我看大师从头到尾都沉默不语，又想到大师平时也经常是一副愣愣的可爱样子，就调戏了他几句。</p>

<p>没想到大师严肃地给我说：“你太天真了，他们两个根本就不是科大的。” 大师说，他们多半是把这些书收了，拿到外面再卖出去。</p>

<p>刚开始我还有点不服气，没想到之前表现得愣愣的大师居然看出了这一点。我首先问：“你怎么知道他们不是科大的？”</p>

<p>大师便从他们的穿着，言行举止，问的问题等方面仔细分析…</p>

<p>噢！今天是毕业典礼，什么人都可以进宿舍楼的。这个时候我就开始气了，首先是气自己，怎么就这么容易被骗了呢？然后是气那两个人，想想他们不眨眼地说他们是大一的时候的样子，简直太狡猾了，怎么能撒谎呢？</p>

<p>我便继续问大师：“那你为什么不阻止他们呢？”</p>

<p>大师说，他看我都如此支持他们了，也就想算了。</p>

<p>我说：“我不是问过你的意见吗？你不想卖给他们的话，你可以提出不卖啊。”</p>

<p>大师说，当着他们两个的面，我不方便揭穿他们啊，我们应该到阳台私下商量的。</p>

<p>我当时觉得有点荒谬，就提高了音量，加重了语气，质问大师：“那你为什么不把我叫到阳台上呢？”</p>

<p>大师显得很委屈，也有点气，但不再反驳我了。</p>

<p>好在我们两个在面对矛盾的时候，都是对事不对人。过了一会儿，我们就互相安慰，都认为并没有造成什么损失，无非是让他们两个多赚了一些罢了。</p>

<p>气很快就消掉了，确实没什么。只是由这件事可以看出，我实在是太好欺负了。确实在科大内的绝大多数交流场景下，我都是100%地假设别人是不会说谎的，根本就没怀疑过那两个人，实在是太天真。</p>

<p>反而是因为自己之前对大师不好的语气，让我感到愧疚良久，因为大师并没有什么错，我是无端地把怒火洒在了人家身上。</p>

<p>大师当时沉默不语，可能是因为：他更希望这件事能够优雅地解决，而不是挑起冲突。优雅地解决就是指，我们知道他们的伎俩，但我们不揭穿，而只是拒绝卖给他们，这样他们也会知趣地走了。</p>

<p>结末的教训是：</p>

<ul>
  <li>
    <p>最直接的教训就是以后与陌生人交往时多一条心眼咯。具体到卖书给学弟学妹的场景，我们完全可以提各种问题要求对方明确回答：哪门课要用？是哪个学期上的？当然了，如果你不介意把书卖给书贩子，那这条当我没说。</p>
  </li>
  <li>
    <p>即使你自己不差钱，卖东西、买东西的时候也要有理性，有原则，而不是顺从对方。</p>
  </li>
  <li>
    <p>出书这种事情，收钱是十分正当的事情。即使对方真的是同一学校的学弟学妹，虽然你作为师兄师姐，舆论上似乎要有些照顾关怀，但收钱仍然是十分正当的，如果你想收的话就没必要犹豫。除非对方真的和你有友谊（如在社团里和你感情很好的学弟学妹），而且你自己心甘情愿地愿意送给别人。</p>
  </li>
  <li>
    <p>即使你不差钱，买卖东西的时候也需要有良好的价格观（价格观就是指对什么质量档次的商品，大概能卖什么价钱的认识），在别人提出的价格离谱时，要有理由辩解，这不是为了节约钱，而是一个好习惯。我们可以通过查看各种跳蚤市场平台的交易信息来建立自己的价格观。</p>
  </li>
</ul>]]></content><author><name>songchaow</name><email>songchaow@outlook.com</email></author><summary type="html"><![CDATA[每天都会发生各种各样的小事，我一般不会记，最多只是走在路上和别人闲聊时随便讲下。今天发生的这件事也是小事，但我想详细地记录下来。]]></summary></entry><entry><title type="html">漫谈方言（一）</title><link href="https://www.songchaow.cn/dialects/" rel="alternate" type="text/html" title="漫谈方言（一）" /><published>2019-06-21T00:00:00+00:00</published><updated>2019-06-21T00:00:00+00:00</updated><id>https://www.songchaow.cn/dialects</id><content type="html" xml:base="https://www.songchaow.cn/dialects/"><![CDATA[<p>这是我最近最想写的一个系列文章了，由于前一段时间突如其来的兴趣，了解了许多声韵学的知识，并仔细体会了几种方言的声韵规律，很想尽快分享出来。</p>

<h2 id="序兴趣的养成">序——兴趣的养成</h2>

<p>我对方言的兴趣大概可以追溯到高中时期。因为在武汉读书，我每天都可以听到同学说地道的武汉话。武汉话说起来十分豪爽洒脱，同时又带着点娘娘腔，当时我很喜欢，很想能学会。于是我经常琢磨武汉话与我熟悉的仙桃话的音调有什么不同（根据已掌握的方言来学习新的方言，是很有效的一种方法）。很快我就发现了最基本的从普通话、仙桃话到武汉话的三个声调变换：</p>

<table>
  <thead>
    <tr>
      <th>普通话</th>
      <th>仙桃话</th>
      <th>武汉话</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>去声</td>
      <td>阴平</td>
      <td>阳平</td>
    </tr>
    <tr>
      <td>上声</td>
      <td>阴平（音调不随时间变化，但音高是普通话中三声的最低的位置）</td>
      <td>阴平</td>
    </tr>
    <tr>
      <td>N/A</td>
      <td>入声</td>
      <td>轻声</td>
    </tr>
  </tbody>
</table>

<blockquote>
  <p>注：阴平、阳平、上声、去声，分别是我们熟悉的一声、二声、三声、四声，但前面的名词更为标准。</p>

  <p>上述表格这种描述方式是非常不准确的。我们应该使用五度标记法来准确地描述音调。</p>

  <p>当时上高中，我也不知道有入声，但已经感受到了仙桃话的好多发音都是这种与众不同的声调，武汉话也有与之对应的很低的音调（轻声），所以在当时也总结出来了。
轻声在武汉话中音调很低，可近似认为是把上声读的很快时的音调。</p>
</blockquote>

<p>有了这个标准，我就发现我可以像模像样地说一些简单的武汉话了。如：</p>

<p><code class="language-plaintext highlighter-rouge">“你吃饭了吗？”</code></p>

<p><code class="language-plaintext highlighter-rouge">“利启烦乐骂？”</code></p>

<p>其中吃是入声字，在武汉话中就发为类似“启”的轻声。</p>

<p>然后我发现，有些句子中字的读音，不是像上面的规则那么好确定的。它们的音调会与上下文有关，也会与句子本身所表达的意义有关，甚至会与发音人自己想表达的情感有关。所以音调是非常灵活的，这也是我觉得一门语言/方言最有意思的地方。</p>

<p>后来整个高中，以及大学前三年，我也就止步于此，没再进一步了解有关方言的知识了。</p>

<p>直到今年，不知是哪个因素触发的，我把8年前的电影《金陵十三钗》再次看了一遍。除了电影本身带来的感动，电影里的老南京话深深地吸引住了我。我觉得它比武汉话更好听。南京话我们之后再谈，我们在这篇文章里先介绍一些基础概念</p>

<h2 id="基础知识">基础知识</h2>

<h3 id="腔的表示汉语拼音方案国际音标南京官话拼音方案">“腔”的表示：汉语拼音方案、国际音标、南京官话拼音方案</h3>
<p>在这一小节里我们只讨论如何表示“腔调”中的“腔”，而不区分声调，也就是说我们只考虑声母韵母。</p>

<p>上面的小标题列了三个平行的概念。这三个名词都属于<a href="https://zh.wikipedia.org/wiki/标音">标音符号</a>。标音符号就是指用来标注文字的发音方式及语调的一组符号。</p>

<h4 id="汉语拼音的不优雅">汉语拼音的不优雅</h4>
<p>我们应该都是从小被教汉语拼音长大的。显然汉语拼音用于普通话教学应该没什么大问题，但若是为了细致区分一些元音音素（音素可以认为是最小的可分辨的发音单元。如“好”就可以认为是[h]。当然[a]、[o]可以一起被认为是一个双元音，但这里我们是在辨认音素，所以还是把它们视为两个音素），汉语拼音描述地就不准确了。</p>

<p>最典型的问题可由如下三个字的发音来说明：</p>

<ul>
  <li>
    <p>“记”的元音音素，用国际音标表示，应是<a href="https://zh.wikipedia.org/wiki/閉前不圓唇元音">闭前不圆唇元音</a>，国际音标字母为i。汉语拼音使用的字母也是i，这个没毛病。</p>
  </li>
  <li>
    <p>“自”的元音音素，用国际音标表示，应是<a href="https://zh.wikipedia.org/wiki/閉央不圓唇元音">闭央不圆唇元音</a>，国际音标字母为ɨ。汉语拼音使用的字母仍是i。</p>
  </li>
  <li>
    <p>“知”的元音音素，用国际音标表示应是<a href="https://zh.wikipedia.org/wiki/閉後不圓唇元音">闭后不圆唇元音</a>，国际音标字母为ɯ。汉语拼音使用的字母还是i。</p>
  </li>
</ul>

<p>这么看的话，汉语拼音好像不严谨了，但它自有解释：汉语拼音方案里搞了一个说法叫“整体认读音节”，意思就是规定了几个特例，说拼音zhi,chi,shi,ri中的i就是要发国际音标的ɯ；ji,qi,xi中的i就是要发国际音标中的i。这样就严谨了。</p>

<p>但总的来说我觉得汉语拼音不是一个优雅的方案，正是因为上述的：一个拉丁字母在一套方案里的发音，居然有多个，还要根据上下文来确定，太不讲道理了。当然，当时制定汉语拼音时，也有当时的困难：当时没有电脑，只有打字机，其所支持的编码估计只有ASCII，所以用于编码拼音的字符基本就限定在了26个字母。而26个字母中根据习惯，大多数字母都要来表示辅音，剩下能做元音的就只有aoeiuv，然而汉语的元音音素是不止这些的，怎么办，只能复用呗。</p>

<h4 id="国际音标">国际音标</h4>
<p>接下来再简要介绍下国际音标。大家应该都在英语课中接触过国际音标，但也许没那么重视（毕竟高考不考），但如果你是把英语当作一门要掌握的语言来学，而不是因为要考六级、GRE而学，那么国际音标还是很有用的。毕竟，你有听说过学汉语不学拼音的吗？国际音标就是英语的拼音。</p>

<p>话虽这么说，英语只用到了国际音标的一部分元音和辅音音素。国际音标里还有许多音素是用来表示其他语言的发音的，如上文提到的ɨ和ɯ。</p>

<p>国际音标有一个很优雅的原则：每一个可分辨的读音（或音素）都得用一个符号来表示，也就是说，一个符号，只能表示着一个发音嘴型（对应元音），或者一个基本的调音动作（对应辅音）。如果某个发音包括了多个嘴型（如“破”），那就必须用多个符号来表示（“破”的音标是[puo]，使用了uo两个符号来表示元音部分）。</p>]]></content><author><name>songchaow</name><email>songchaow@outlook.com</email></author><category term="声韵学" /><summary type="html"><![CDATA[这是我最近最想写的一个系列文章了，由于前一段时间突如其来的兴趣，了解了许多声韵学的知识，并仔细体会了几种方言的声韵规律，很想尽快分享出来。]]></summary></entry><entry><title type="html">学车记</title><link href="https://www.songchaow.cn/learndriving/" rel="alternate" type="text/html" title="学车记" /><published>2019-02-02T00:00:00+00:00</published><updated>2019-02-02T00:00:00+00:00</updated><id>https://www.songchaow.cn/learndriving</id><content type="html" xml:base="https://www.songchaow.cn/learndriving/"><![CDATA[<p>我是在2019年的寒假（也就是2, 3月份）考过了科目三和科目四考试，并拿到了驾驶证。</p>

<p>学车这件事情，我周围的人差异还挺大，有人大一就拿到了驾驶证，也有人是在研究生、博士在读或快毕业了的时候还在准备驾考。因为不同地区的考试规则稍有不同，以及不同人的接受速度不一样，所以有的人会很有优越感地满分通过各个科目，顺利拿证，也有人在科二、科三考试时连挂两次甚至更多。</p>

<p>不过不变的是，只要你愿意花时间，这件事总是办得成（考挂了，可以等几周或者几个月后再去考，这只是顺延而已，总共多投入的时间其实也就只有几天，用于捡起来这几个月忘掉的）。</p>

<p>这里说了这么多，其实只是想指出，闻道有先后，不用看到有些后生在学车的进度上比你领先，或者自己卡在科二科三的哪个环节上了，就懊恼不已。你和别人的差距也只不过是一两个月。</p>

<p><strong>下面的行文会包含很多只与个人经历有关，并不具有普适性的吐槽，而且吐槽地一点也不文艺，各看客可能会看的不过瘾。如果不感兴趣，你可以直接看<a href="#上路">上路这一小节</a></strong>。</p>

<h2 id="找教练">找教练</h2>
<p>一般学车这种事，在仙桃这种小地方，水很深，所以教练按道理需要靠谱一点。正好我爸认识一个教练，据说技艺极高超巧妙，曾让我家的诸多亲戚都顺利拿到了驾照。所以我爸也把我安排到了他那里。</p>

<p>科目一略过。</p>

<h2 id="科目二">科目二</h2>
<p>等到准备科目二了，我和教练之间的摩擦才开始一件一件地显现出来。</p>

<p>刚开始的摩擦体现在约定时间这件事上：</p>

<p><img src="/assets/images/screenshot2.png" alt="screenshot1" /></p>

<p>因为前几次办事，都是由教练来我家接我去的，所以我也默认这次教练也会过来接我。我第二天很早就起来，等教练的消息。直到等到10点钟感觉不对劲，才问教练，于是就有了如上的聊天记录。</p>

<p>当时我有点恼火，不过我爸仍觉得我的行为过于被动了。他说，这些人办事并不会把话说得很清楚的，所以我们自己要多问，时间在哪里，地点在哪里，主动一点。想想也是，在学校里，任何活动都会预先有时间地点通知，自己完全适应了这种通知方式。</p>

<p>吞下这口气以后，总算开始了科目二的训练。这期间与教练的摩擦主要体现在语言交流上。我并不懂那些很土的仙桃方言，再加上教练说话又特别快，我经常不能跟上，请求教练再说一遍。一旦我有两次以上没听清楚，教练就会变得很不耐烦，有时我也不好意思再问。</p>

<p>教练的教学方式十分死板，一切按程序进行，我曾做过如下图的笔记：</p>

<p><img src="/assets/images/kemu2_note.png" alt="screenshot1" /></p>

<p>这些笔记所描述的方法大量地依靠光的直线传播定律，根据从人眼处出发，并经过“车窗边沿”、“后视镜轮廓”等位置的视线在地面上的投影位置来确定各个动作的触发时刻。当然，上面这些描述，教练是用他地道的仙桃话讲的，我在当时需要费大力气和教练沟通。</p>

<p>其实这种视线追踪的方法是很不精确的，因为不同车的车身长度、座位高度、车窗高度，后视镜高度都不一样。在日常生活中移车，更重要的是凭综合的感觉。好在教练向我保证，考试车和他的教练车的各参数是一样的，所以这种方法用来应付科目二考试，还算不错。</p>

<p>不过，我在当时很叛逆，我开始在倒库的过程中，尝试“凭感觉”把握方向盘，而不是仅凭观察车身与库所在矩形的长边的夹角是不是正好到了30度的时候回方向盘。在我探索的那几次倒库过程中，车都被我倒歪了，导致教练大发雷霆，他语重心长地教导我，说学车不是做研究。之后来想，我确实应该听教练的，应试为主，减少探究。</p>

<p>到了后期，我唯一拿不准的就是上坡定点停车与起步。其实，我刚开始练时对此是很有自信的，因为我总是能让车稳定起步。但教练总觉得车抖得太厉害，嫌我离合器松得太多，要我抬少一点。这样反倒弄巧成拙，使车动力不足，后续更是熄火了，因此心态就越来越差。
直到后来认识了另一位专业的教练，他向我展示了抬离合器时所能达到的一个临界点。此时车辆正是在间歇性地抖动，状态十分稳定，这时我才知道我之前的做法是没问题的。</p>

<p>总体而言科目二的训练和考试还是很顺利的。尽管一直忍受着教练的训斥和不耐烦，但考过了也就万事大吉了。</p>

<h2 id="科目三">科目三</h2>
<p>科目三就比较坑了。</p>

<p>“wsc科三这么考挂了？”我考挂了的消息犹如爆炸式新闻一样在家族内传播。我当时也觉得这是一个天大的耻辱，因为周围好多家人都是所有考试都满分通过了，并且他们表现出十分轻松的样子。尽管我爸心态很好，但考试结果仍然不符合他的预期，因为教练在考试前几天曾对他说：wsc的科三已经没问题啦，就等着考完拿驾照啦…</p>

<p>考挂当然是有原因的，因为教练在部分指导上并没有到位，我在某些项目上并没有得到充分的训练。</p>

<p>首先是直线行驶。因为是机考，所以其判定标准其实是要比人的观察要严格的。在平时训练时，教练都觉得我开的挺直，从没觉得会有过问题，但一到考试就不能通过。</p>

<p>其次是灯光，教练告诉我们如果灯光考试问题的字符串包含“通”或者“超”，对应的操作就是远近光交替。然而，恰好有一个问题是“前方直行通过路口”，其对应操作是近光灯，于是我顺利地被坑了。</p>

<p>那会儿我也是气炸了，首先是生教练的气，觉得他没教好；其次是觉得自己不争气：灯光这种死板的东西都能错，还好意思说自己是成绩好的985大学生吗；最后觉得吃了亏却没好报——因为训练过程是痛苦的，经常有训斥和体罚（只是打手，虽然不会受伤，但还是挺疼的）。我爸也自责不已——后悔找了这么一个不靠谱的教练。嗯，好像2018年只记得气过这么一回。</p>

<p>过了几天，我发现我并不是最惨的，因为我的表哥也考挂了。不过，表哥的驾驶技术要比我好，他前面两次的失败或多或少都是由客观原因造成的，如考试车的灯光故障之类，而不是像我这样因为训练不到位。
但令我羡慕的是，他的教练态度非常好：平时练车时从来不训斥。表哥（因为客观原因）考挂后，教练非常自责，在考场上和考官争论（关于考试车的灯光故障），甚至还留下眼泪。我要是能有这样的教练，考试的结果如何也无所谓了，毕竟过程是让人暖心的。</p>

<p>不过话说回来，教练自己也挺自责的，虽然他没有说出来。等我第二次考科三时，他也就着重补充了之前疏忽的直线行驶和灯光部分。他之前没教好，只能说是能力有限吧。其实是有很多更好的途径去训练这些项目的，比如有些app可以播报一些较为标准的灯光试题，这要比教练自己播报题目要实在多了。相信灯光的题目在全国各地差异不会太大，所以可以自行练习。</p>

<p>第二次考科三的过程就不说了，挺顺利的。</p>

<h2 id="上路">上路</h2>

<p>练车很不爽，但开车还是很爽的。我终于可以在老司机（我爸）的陪同下上路了。在亲自开车前，我曾认为开车是一件很麻烦的事。自己尝试后的感受是并没有那么累，毕竟不需要消耗体力，只需要保持专注就行了，大脑也不需要进行很多数值和逻辑计算，所以并不累。按目前的感觉讲，我觉得只在城区开车的话，其实是很愉悦的（而高速因为车速快，还是有些紧张）。这里我想给大家信心：只要你脾气很好，不易冲动，不愿和别人争抢，也没有什么先天的身体障碍，视力也没什么问题（允许戴眼镜），那你就天生适合开车。</p>

<p>我爸把我带到仙桃城区的路上。这里是练车绝好的训练场，到处都有横冲直撞的电动三轮，逆行的自行车，与肆意横穿马路的行人。我爸胸有成竹地告诉我：只要你在仙桃城区这样复杂的道路上开熟练了，以后在大城市开车都不是问题，因为那里的管理要规范的多。</p>

<p>我被我爸评价说进步很快，虽然我爸总是说我按喇叭按得太少了。</p>

<p>在我开车的时候，老爸经常一边怂恿我按喇叭，一边把手伸到我这边的方向盘，麻利地按了几下。几声咄咄逼人的鸣笛声，弄得前面的行人马上慌慌张张地回头看了一下我们。我仍怀有一丝吵到了别人的歉意，但我爸却严肃地告诉我这么做是很有必要的。因为很多时候，行人不仅不守规则（比如在机动车道上随意变道），而且无视汽车的存在。这个时候如果还不用急促的喇叭声营造出“你再不躲我就要撞上你了”的危险氛围，他们会觉得他们的行为理所当然，尽管事实上并没有那么危险，汽车是有能力减速的。</p>

<p>后来看我爸自己开车，我发现他的喇叭几乎从来没停过，全程都在刷自己的存在感。。</p>

<p>“那到了大城市的禁鸣区，不能按喇叭怎么办？”</p>

<p>“大家在那里都会守规矩，我自然不会按了。”</p>

<p>我爸胆大包天，在我上路的第二天，就让我开上了高速公路。说实话，在高速公路的感觉是十分压抑的，我能感受到在车速较高时，微动方向盘所造成的显著影响。特别是在高速公路超车的时候，比考试还要压抑，因为方向盘随便一个小角度的倾斜，就可能是一场严重的事故。</p>

<p>上高速后的很大的认识是：有时候车速快，反而安全些。特别是超车的过程中。变换车道，车速够快也会更安全，因为后方的车不容易追上你。</p>

<p>当然，并不是所有时候车速快就安全。然而，在上高速后，新手驾驶员也都会放开许多，在很多普通路段也都习惯性地开的挺快了，这样会造成一些安全隐患。这是由不熟练造成的，并不是因为不谨慎。</p>

<p>在城区开车，我觉得最有有挑战性的问题，就是在来车频繁，且流速较快的情况下变换车道，此时需要的就是勇气，因为其他车并不会因为你想变道而慢下来。这时需要做的就是确认侧后方的来车与自己有足够距离时，果断地掐进去，对方自然会减速。当然，足够距离到底有多大，多半要靠经验了。</p>

<p>当临近红绿灯的时候，变换车道的需求会变得很急切（如果之前没来得及变道的话），而且自己一直犹豫的话，后面的车会开始催。很考验心理素质。</p>

<p>当然也有别的很难的问题，比如在各种环境下倒库，但这些都不急，多倒几把总可以倒进去的。</p>

<p>总之，学习驾驶能够让人感到成长和快乐，有时间的话希望自己能坚持学下去，早日成为老司机😄</p>]]></content><author><name>songchaow</name><email>songchaow@outlook.com</email></author><category term="驾驶员考试" /><summary type="html"><![CDATA[我是在2019年的寒假（也就是2, 3月份）考过了科目三和科目四考试，并拿到了驾驶证。]]></summary></entry><entry><title type="html">论音画交融的乐趣——评《白蛇：缘起》</title><link href="https://www.songchaow.cn/white-snake/" rel="alternate" type="text/html" title="论音画交融的乐趣——评《白蛇：缘起》" /><published>2019-01-30T00:00:00+00:00</published><updated>2019-01-30T00:00:00+00:00</updated><id>https://www.songchaow.cn/white-snake</id><content type="html" xml:base="https://www.songchaow.cn/white-snake/"><![CDATA[<p><strong>注：本文中提到的所有歌曲都是链接，可以戳进去试听。</strong></p>

<p>在电影的选择上，我一直是一个纯粹的画面党和音乐党。《白蛇》恰好这两样东西都做的相当出色，所以实在是太对我的胃口。所以在四刷之后，写下了这篇拙文。（至于剧情，能够把一个简单的故事讲清楚就行了吧，反正我还是蛮感动的。）</p>

<p>总体来讲，该电影很有特色的地方在于以下这些点：</p>

<ul>
  <li>
    <p>作为一部动画电影，虽然有笑点，但确实是在认认真真地讲一个爱情故事，和真人演一样，该怎么来就怎么来，有吻戏，有床戏。这个应该在3D动画界史无前例。也许导演就是想狠狠地改变一下，让广大成年人意识到，哦动画片原来可以这么拍啊。</p>
  </li>
  <li>
    <p>男主、女主让人看着亲切自然，一扫卡通化形象以及夸张的表情和动作，而是用微表情来交代情绪，这一点导演也在知乎强调过。</p>

    <p>以及，白蛇让我第一次明白，3D动画角色的颜值是可以大于真实演员的……</p>
  </li>
  <li>
    <p>画面细节丰满</p>

    <p>白蛇半透光的衣服材质，以及衣物上的印花；阿宣身上质朴踏实的毛布衣；洗澡时被淋湿，附在身上的一根根长发；洗浴起身时，由于表面张力和重力作用，附在腰间，缓缓下淌的水珠；嘴唇上清晰的褶皱和高光；阳光在空气中的体积光，以及在体积光中漂浮的灰尘；困妖阵下人物脸上的霜，手指上的冻疮……电影里的这些镜头，都还历历在目，显得自然而真实。</p>

    <p>这就是3D动画电影的迷人之处之一吧：<strong>把生活中的各种客观现象，用图形学的手段再现出来，让人倍感熟悉的同时，又多了一份动画电影特有的澄澈感。</strong></p>
  </li>
  <li>
    <p>色彩鲜艳而不违和。刚开始时黑夜里的紫红桃花瓣（嗯，桃花瓣似乎在很多动画电影里有使用。回忆一下功夫熊猫一系列里面师傅用桃花瓣拿下神龙天书。不过我还是觉得白蛇里面的桃花瓣是最有意境的），清冷的青绿色的潭水里泛着皎洁的白光，红叶似火的枫叶林，太阳出来后花草树木一下子被照亮时的暖色光，以及夜晚的月光……有时仅仅是光源的变化，就能使场景的风貌变幻无穷。</p>
  </li>
</ul>

<blockquote>
  <p>我就不放图了，许多剧照在豆瓣上都有，不过有些提到的镜头细节，只能靠看电影了。</p>
</blockquote>

<hr />

<p>下面就开始谈谈配乐。</p>

<p>我这里指的配乐，基本是指配合剧情/画面所创作的BGM，而不仅仅是由人演唱的插曲。</p>

<p>《白蛇：缘起》的配乐真是值得大赞。纵观近几年的一些动画电影：</p>

<ul>
  <li>《大圣归来》的配乐，凭印象，相比白蛇是要显得单调一些的，总体上只有一首主题，许多地方还是直接使用已有民间歌曲（我只能凭印象说了，因为人家压根就没有把配乐做成专辑，只是把汪峰等人唱的那一两首歌发行了）。</li>
  <li>《大鱼海棠》配乐饱满，但是是外包给日本人的。音乐虽然听起来很奇幻优美，但大多仍是电子/交响，中国的民族乐器只包含陶笛（也就是椿和鲲吹过的那只）。</li>
  <li>《白蛇》则是中国作曲家郭好为的原创配乐，而且规规矩矩地把每一首BGM都收进了专辑，哪怕只有不到一分钟的时长，这是非常好的态度。而且古筝，古琴，琵琶，竹笛样样都有，和交响乐完美融合。</li>
</ul>

<p>那我们从头开始说起。</p>

<h3 id="开场音乐初原"><a href="https://y.qq.com/n/yqq/song/003xEXmp0gbECc.html">开场音乐《初原》</a></h3>

<p>在“追光动画”和“华纳影业”的logo出现时，这首曲子就已经开始了。</p>

<p>我觉得配出具有中国古风的曲子似乎并不难，只需要用民族乐器点缀一些音即可，而且效果会很好。</p>

<p>《初原》的开头就是这样。</p>

<p>古琴的高音反复在重复着小七度，给人以肃穆，沉着的感觉，让观众沉下心；</p>

<p>而古琴低音拨了几下主音，它那深沉的滑音，立马就有了古色古香的味道。</p>

<p>与此同时，镜头跟随着黑夜里漂浮的桃花瓣，潜入清冽的深潭……嗯，配乐十分应景。</p>

<hr />

<p>配乐仔细听的话，可以发现许多曲子，都是由主题曲<a href="https://y.qq.com/n/yqq/song/003T0oJ84XdqG5.html">《何须问》</a>的高潮部分变奏出来的。也就是下一段：</p>

<p><img src="/assets/images/white-snake/main-theme.png" alt="main theme" /></p>

<p>比如，首先，<a href="https://y.qq.com/n/yqq/song/002LeVfm0erJL5.html">《记得，真好》</a>就是照搬何须问的旋律。当然这是合理的，音乐旋律前后要呼应。《记得，真好》通过以喜曲写哀情，也是影片的一大泪点。</p>

<p>现在，让你去听<a href="https://y.qq.com/n/yqq/song/001WRS6I2px96d.html">《在山间》</a>，听完<del> 古筝 </del>箜篌的前奏后，是不是发现之后的旋律就是上面的？</p>

<p>现在，你再去听<a href="https://y.qq.com/n/yqq/song/002cAYuT2YuUwW.html">《逆风行》</a>，是不是发现第一段中的箜篌，和第二段中的笛子的旋律，几乎也是上面的？</p>

<p>现在，你再去听<a href="https://y.qq.com/n/yqq/song/003DBRMA0VZhDj.html">《缠绵》</a>，这是爱情线的主题。大提琴的旋律变成了这样，还是很像上面的：</p>

<p><img src="/assets/images/white-snake/love.png" alt="love theme" /></p>

<p>那我们就仔细品味一下这几首：</p>

<h3 id="在山间"><a href="https://y.qq.com/n/yqq/song/001WRS6I2px96d.html">《在山间》</a></h3>

<p>这首曲子很仙，很有那种仙侠电视剧的味道（我没看过，但就是这种感觉）。在古琴的背景下，<del> 古筝 </del>箜篌和萧依次出场，时刻点缀以清脆的鼓点。它讲述的是小白在幽冷的山谷里灵活地跳跃，而许宣在后攀越的情景。</p>

<p>值得一提的是，萧的旋律在高潮的时刻，正好对应小白跃至山顶，太阳出来，暖色光从上至下打到小白的脸上、衣物上、周围的花草树木上，幽冷的山谷一下子变得充满阳光。这里音画交融地相当得好。</p>

<h3 id="逆风行"><a href="https://y.qq.com/n/yqq/song/002cAYuT2YuUwW.html">《逆风行》</a></h3>

<p>这是全专辑最华丽的一首了，曲如其名，讲述的是两人乘着飞翔的伞，遨游自然风光的一段戏。</p>

<p>刚开始<del> 古筝 </del>箜篌和弦乐一唱一和，有节奏地前后呼应；弦乐的后半拍起，多了一份韵律美。这一句描写了刚起飞时的美妙体验。</p>

<p>然后，下一乐句，立刻开始转调，低音开始厚重，饱满的弦乐长音和<del> 古筝 </del>箜篌断奏融合在一起！这一句着力展现山野景致的壮美。讲真，我每次听这里都激动得热泪盈眶。</p>

<p>第三个乐句，是小提琴羞答答的（你也可以说矫情…）solo，这是两人在伞下相视的特写镜头的配乐，蒲公英从指间飞过，浪漫无比，把两人互相的羞涩，情愫初开，展现地淋漓尽致。</p>

<p>之后的旋律变得紧张，是因为他们俩乘伞飘到树林里，遇到蛇了。。不多说了。我觉得紧张悬疑类的配乐似乎总是会比抒情类的配乐要好写一点。</p>

<p>当然，这里的画面也是全片最华丽的地方了。</p>

<h3 id="缠绵与寒夜后半段"><a href="https://y.qq.com/n/yqq/song/003DBRMA0VZhDj.html">《缠绵》</a>与<a href="https://y.qq.com/n/yqq/song/0040M7lx0HFUwl.html">《寒夜》</a>后半段</h3>

<p>爱情的主题。《缠绵》所描写的是小白与阿宣的吻戏和床戏。</p>

<p>不过该主题在《寒夜》的后半段也出现过，而且我觉得《寒夜》的后半段将主题描述地更加准确。</p>

<p>竖琴和弦乐，是描绘爱情的很棒的组合。《Jane Eyre(2011)》的配乐<a href="https://y.qq.com/n/yqq/song/002riIxI4P4QJt.html">《Yes!》</a>里也是这么做的，也是一段吻戏。</p>

<p>如果说Jane Eyre(2011)的<a href="https://y.qq.com/n/yqq/song/002riIxI4P4QJt.html">《Yes!》</a>仅仅是在歌颂爱情的话，那么《白蛇》的爱情主题，除了感动的情绪，还包含悲戚。这里的悲戚在剧情上是可解释的，引用一下QQ音乐乐评：
<em>“许宣是捕蛇人，《捕蛇者说》中提及，捕蛇人祖祖辈辈尽死于捕蛇，然苛政猛于虎，捕蛇村的人是时时刻刻生活在剥削与死亡的双重阴影下；小白，是蛇妖，既然有捕蛇人，那小白未修炼成形之前她或她的朋友一定与捕蛇人遭遇过，好不容易成型之后，却要做不得不做的事。”</em></p>

<p>不过可能由于剧情上的单薄，光看故事可能难以一下子感受到这样的“悲”，但编剧肯定是这么想的。</p>

<p>在《寒夜》的后半段，两人坐在屋檐上面（嗯，就是这个网页最上面的图），阿宣说出了“是就是呗，人间多的是长了两只脚的恶人，你长了条尾巴又怎样。”。小提琴和大提琴便第一次拉响了这段爱情的主题(1:47以后)，也正是在此时两人第一次开始有了恋情。刚开始的四句和《缠绵》相同，悲切地感慨两人的苦楚，而在之后2:29处的大和弦，又让人感到一丝明亮——这份爱情又是何等珍贵。</p>

<blockquote>
  <p>我是不是太扯了，这种小东西都要说出来。。但我自己确实是这么感受的。</p>
</blockquote>

<p>美中不足的是，既然是爱情片，这段爱情主题就显得很重要，理想的做法应该是要贯穿全片，然而在片中后期，这段凄婉的旋律再也没有出现过，可能是因为剧情不再适合了。</p>

<h3 id="转世修行"><a href="https://y.qq.com/n/yqq/song/002JzA5j0dUsTT.html">《转世·修行》</a></h3>

<p>这是500年后，白蛇找回自己和阿宣的记忆后，自己的一段心路历程。随着大提琴的低吟，从珠钗流出的魂魄开始向四方发散，场景内的桃花瓣也配合着缓慢飞动，一股遗憾和思念之情油然而生。而后，白蛇痛定以后，豁然开朗决定去找转世的许仙，旋律在此时逐渐变得高亢，此时镜头从洞内到洞外，光线变得明朗，迎来一个仙境般的结尾。</p>

<h2 id="写在后面">写在后面</h2>

<h4 id="为什么想到看这部">为什么想到看这部？</h4>

<p>元旦左右，室友们开始讨论最近的电影，我也发现自己也有快半年没接触新电影了，就顺便打开了时光网，看了看眼花缭乱的海报。</p>

<p>在一眼扫过一堆硬核大片后，我发现我对蜘蛛侠/变形金刚这种经典IP都不太感兴趣了，场面虽然宏大，特效虽然震撼，但毕竟是陌生的人物系列，陌生的世界，再加上我没有看过这些IP的前作，自然爱不上来。</p>

<p>《白蛇：缘起》清丽的海报让我眼前一亮（不是现在那张妖魔鬼怪大杂烩，是那张油纸伞下两人对视的），于是点进去看了预告片，立马就决定去看。有几个原因：</p>

<ul>
  <li>
    <p>我一贯都更爱动画片，尤其是画质精细的。</p>
  </li>
  <li>
    <p>用动画片来演绎爱情，似乎这还是头一次。所以这部动画电影应该不是主打搞笑剧情拼凑的。</p>
  </li>
  <li>
    <p>用耳熟能详的中国民间故事为背景来讲故事，自然能够让观众感到喜爱和亲切，这是我们的文化圈所决定的。</p>

    <p>这么做的另一个好处，就是减去了一定熟悉世界观的成本，能让自己在已对故事设定有基本了解的情况下，更轻松地融入电影欣赏其音乐/画面，而不是要费脑子去熟悉一个全新的天马行空的世界观。</p>
  </li>
</ul>

<p>于是，1月5日，在Web课考试的前5天，忙里偷闲去看了点映。结果远远超出预期，以致中毒至现在，即使后来有了二刷三刷，仍不得解。虽然也有别的被公认很精彩的电影，但我这个假期是没心思看别的了，一部已经够我受的了。</p>

<h4 id="如果你也喜欢音画交融的电影类型">如果你也喜欢音画交融的电影类型</h4>

<p>那么也许你也会喜欢《辉夜姬物语》和《海洋之歌》，它们都是动画电影，配乐作曲家分别是久石让和Bruno Coulais。</p>]]></content><author><name>songchaow</name><email>songchaow@outlook.com</email></author><category term="music" /><summary type="html"><![CDATA[注：本文中提到的所有歌曲都是链接，可以戳进去试听。]]></summary></entry><entry><title type="html">选专业的那些事儿</title><link href="https://www.songchaow.cn/ustc-memo/choosemajor/" rel="alternate" type="text/html" title="选专业的那些事儿" /><published>2018-12-09T00:00:00+00:00</published><updated>2018-12-09T00:00:00+00:00</updated><id>https://www.songchaow.cn/ustc-memo/choosemajor</id><content type="html" xml:base="https://www.songchaow.cn/ustc-memo/choosemajor/"><![CDATA[<p>本文主要讨论选专业的各种思考，不会有明显的剧情线。</p>

<p>大一上我们就被提醒要早点开始计划选择合适的专业。许多长辈，包括院长级别的领导，都明确提示我们：不要不明不白地跟风选物理。可见选物理的现象是很普遍的。包括我大一上，在没想清楚的时候，心里唯一有点想选的也是物理。</p>

<p>总结一下当时自己想选物理的原因，以及普遍被认为很好的理由，大概有这些：</p>

<ol>
  <li>科大物理最厉害啊，怎么能不去体验科大最招牌的课和资源呢？</li>
  <li>我来自少院创新班，由于选拔机制，自然有相对较好的物理底子，不学物理是不是有点浪费？</li>
  <li>物理出国机会看起来多一些。</li>
  <li>本科啊，还是要打好数理基础。数理基础打好了，之后转啥都方便。物理专业能够让你有更坚实的数理基础。</li>
</ol>

<p>现在看来，这里的很多理由都是站不住脚的。分别反驳如下：</p>

<ol>
  <li>
    <p>上科大的目的，当然不是纯粹地体验这所大学最厉害的专业，要不然其他专业都可以不开了。</p>

    <p>当然这里就涉及到个人价值观的取向了：如果你觉得以后的发展不用着急，本科阶段自己就是想体验一下科大里相对而言更优秀的物理专业本科教育，那么选物理当然没问题。但对多数人而言，应该还是会选择更现实的路线，也就是尽量让自己本科所学的，对以后的工作更有用。</p>
  </li>
  <li>
    <p>这个事实确实存在：我因为高中的物理竞赛底子，在大一时的物理课都过得非常轻松（即使是力学的科里奥利力，电磁学的电像法，都是在高中已经弄熟的东西，大学里只需稍微温习一下就行了）。但这不该是你选物理专业的理由。</p>

    <p>你对某个领域有足够的积累，只是因为你高中/初中有过针对性训练，现在感到很适应而已。在中学阶段你的选择很少；而大学专业，以及以后从事行业的选择要广得多，所以完全有必要再重新做一次考察，选择一个自己真正有兴趣，能坚持学下去，且最好有前景的专业。</p>
  </li>
  <li>
    <p>这个事实也确实存在。不少学生用物理专业做出国的跳板，在国外又学计算机去了。</p>

    <p>我个人不喜欢这么做。</p>
  </li>
  <li>
    <p>并不是所有工作都需要<em>那么</em>扎实的数理基础。</p>

    <p>其实，即使你没选物理，同样会有许多数理基础课会折磨你。</p>

    <p>据我所知，如果你以后还是做research相关的事情的话，<em>那么扎实</em>的数理基础还是有必要的。</p>

    <p>但如果你以后想做的是做程序员，就我目前所知，不同的程序员工种，所需要的数理基础是不一样的，扎实程度也不同。而且，影响你求职结果的，更多的是你的编程能力，以及相关领域知识的掌握程度，而不是你的数理基础。</p>
    <blockquote>
      <p>对于各类程序员：现在很热的做机器学习的，在线代/概率论/最优化问题这些内容上可能需要更扎实一些；做安全/逆向的，可能要多学些密码学的知识；做编译的，可能需要有些离散数学（如图论）的基础；而其他有些方向，如Web前后端，并不需要明确的所谓的数理基础。</p>

      <p>行行出状元。我认为程序员的各个方向，无论是做互联网算法，做Web前后端，做编译器，做游戏引擎，还是做逆向安全，都可以做的很优秀</p>
    </blockquote>

    <p>可见，程序员学习这些被依赖的数学知识，最好是明确自己的努力方向后，有针对性地去学，而不是一开始就盲目地跟着培养计划，系统化地学一遍《复变函数》、《数理方程》等。</p>

    <p>当然，像微积分、线代、概率论这种基础数学课，我觉得还是很重要的，无论以后做什么。</p>
  </li>
</ol>]]></content><author><name>songchaow</name><email>songchaow@outlook.com</email></author><category term="ustc-memo" /><category term="memo" /><summary type="html"><![CDATA[本文主要讨论选专业的各种思考，不会有明显的剧情线。]]></summary></entry><entry><title type="html">分线剧情：新生研讨课——二维码的生成</title><link href="https://www.songchaow.cn/ustc-memo/qrcode/" rel="alternate" type="text/html" title="分线剧情：新生研讨课——二维码的生成" /><published>2018-10-28T00:00:00+00:00</published><updated>2018-10-28T00:00:00+00:00</updated><id>https://www.songchaow.cn/ustc-memo/qrcode</id><content type="html" xml:base="https://www.songchaow.cn/ustc-memo/qrcode/"><![CDATA[<p>这里接着<a href="/ustc-memo/gradeoneII-1/">大一下</a>讲我做二维码的事情。</p>

<p>定了二维码的题目后，我在大一下学期就时不时地去查二维码编码相关的资料，我的目的很明确：不依靠别的库/工具，自己写一个编码字符串最终显示二维码图像的程序。刚开始都是以CSDN之类的博客为主。这种博文虽然看起来是各种琳琅满目，内容丰富，但大多读下来就感觉并没有把整块知识连在一起。我始终缺乏一本令人心服口服的参考资料。后来再到中国知网上查（有不少硕士生的毕业论文就是做二维码编码相关的课题的），终于在一篇论文的引用文献里找到了《GB快速响应矩阵码》这本权威的资料。我把这本资料打印了下来，立刻就有了头绪，也有了自信，因为它把二维码的各种specifications都说清楚了。</p>

<p>原来我们日常说的二维码的学名叫QR Code，QR就是Quick Responsive。</p>

<p>大部分的流程我都是看得懂的，无非就是将二进制位流分组、异或，按指定的顺序填充码字等操作，除了纠错码的计算没看懂以外。而图形的显示这块，我又可以利用之前做游戏时的那个图形库，所以把流程跑通不是问题。我最担心的问题是，中途编码若是出了什么差错，可能就会导致最后的黑白图案怎么也识别不出来。</p>

<p>寒假的时候，我花了10天写这个程序。刚开始和我预期的一样进展很顺利，一步步按照specifications来，填充各种数据。到了第5天左右的时候不得不去了解纠错码的编码算法了。</p>

<p>我就不详细介绍纠错码的编码原理了，一是因为难以用短篇幅讲清楚，二是我自己也忘得差不多了…你可以查看<a href="https://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction">Wikipedia对RS纠错码的介绍</a>。不过有一点是可以说的，计算纠错码，本质上就是在解一个n元一次线性方程组，但未知数所在的数域是一个叫伽罗华域的东西，运算规则也不一样。为了支持这样的运算规则，之前暑假学的MMA也派上了用场，被用来方便地预先生成计算结果（一些实现细节我在<a href="">中期报告</a>里面有介绍）。</p>

<p>最终纠错码的计算算是实现出来了，但由于缺少现成的算纠错码的工具，很难验证它算的对不对（事实证明确实算错了。。）。</p>

<p>我开始画二维码的各种功能图形（功能图形包括三个角落里的小正方形，和一些用于定位的图案等。这些图形的排列都预制好了），再将数据码字按规定的顺序填进其他部分。</p>

<p>下面展示的就是某个版本的二维码的功能图形：</p>

<p><img src="/assets/images/qrcode_func.png" alt="qrcode_func" /></p>

<p>最后果然，显示出来的二维码像模像样，可就是扫不出来！</p>

<p>我采用了很死板，但很有效的方法：用别的二维码生成工具对于相同的输入，生成同样规格的二维码，与我的程序生成的二维码逐个像素地比对哪些区域是不一样的，然后再根据像素来推算正确的数据码字是什么。<!--而且像素值并不是数据值，而是数据值和掩模异或得出的bool值。掩模就是一块有纹理的黑白图案，叠加在数据编码区域上。所以要想比较编码数据的不同的话，需要根据像素值和掩模来推算。--></p>

<p>虽然很麻烦，但还是可以定位到问题：功能图形有画错的地方，以及纠错码字算的不对。功能图形好改，但是纠错码字不知道是怎么算错了。最后把别人写的高斯消元解方程组的代码替换掉我自己写的，就没问题了。</p>

<p>最后听到“扫一扫”APP发出清脆的提示音，整个人兴奋得不行，大呼过瘾——程序员的快乐就是这么纯粹和简单，之前是，现在也是。</p>

<p>你可以在<a href="https://github.com/songchaow/QR-encoder">这个Github仓库</a>下载这个小程序的源代码。但是你可能需要花费很多时间弄好依赖才能成功编译。现在的感悟是：若是开发库/工具类的程序，能够让使用者方便地构建自己写的代码，尽量让装依赖的过程自动化，而不是把大量时间费在配环境装依赖上，也是开发者要考虑的问题之一。</p>

<hr />

<p>还是附几张图展示一下吧：</p>

<ul>
  <li>
    <p>这是一张未编码任何数据的二维码，数据码字区域仅包含必要的头部信息，我的小米手机在扫这张图案时的扫描结果似乎很有趣。</p>

    <p><img src="/assets/images/qrcode0.png" alt="qrcode" /></p>
  </li>
  <li>
    <p>也许你从未见过下面这么大的二维码。</p>

    <p>你可以看到二维码右侧有规律的纹理，这些区域因为都在反复编码<code class="language-plaintext highlighter-rouge">d</code>，所以就呈现出周期性。</p>

    <p>你又会发现左侧的二维码呈现出另一种不同的纹理，这些区域就是在反复编码纠错码了。</p>

    <p><img src="/assets/images/qrcode1.png" alt="qrcode_texture" /></p>
  </li>
</ul>]]></content><author><name>songchaow</name><email>songchaow@outlook.com</email></author><category term="ustc-memo" /><category term="memo" /><summary type="html"><![CDATA[这里接着大一下讲我做二维码的事情。]]></summary></entry><entry><title type="html">大一——我写的第一个小游戏</title><link href="https://www.songchaow.cn/ustc-memo/firstgame/" rel="alternate" type="text/html" title="大一——我写的第一个小游戏" /><published>2018-10-18T00:00:00+00:00</published><updated>2018-10-18T00:00:00+00:00</updated><id>https://www.songchaow.cn/ustc-memo/firstgame</id><content type="html" xml:base="https://www.songchaow.cn/ustc-memo/firstgame/"><![CDATA[<p>之前说到C语言课程中，老师允许我们做大作业的形式来代替普通作业。这里就写一下我做这个大作业的完整经历。</p>

<p>当时老师给我们（整个班大概有三个人报了名）提的建议是，可以做游戏，可以做一个功能齐全的计算器，或者别的。于是三个人有一个人准备写一个纸牌游戏，有一个人准备写计算器。但他们都是打算写CLI界面的程序（也就是大家用C写的最多的那种小黑窗），比如纸牌的类型就用各种字母来代替，计算器的按钮都用\t和\n来排版。</p>

<p>我就有点不甘心，因为好不容易能够做复杂点，为什么还要做这么丑的东西。于是我就开始探索图形化手段。</p>

<p>当时我所有能查找资料的方式就是在百度搜索“C语言 窗口”或者类似“C语言 图形”，而且我记得当时并没有找到一个很好的概述性的入门材料（也许当时到图书馆找一本相关话题的书来看，是更好的选择），而且当时也不知道有Visual Studio这种好东西。但我很幸运地在一个贴子里找到了一个叫<a href="https://liballeg.org/">allegro</a>的图形库的安装方法，而且正是在CodeBlocks里安装的，并详细给出了如何把该库添加进编译器的include目录，链接器的链接目标里。我就照猫画虎地做了，把allegro库的binary release下载下来，解压，把include目录添加到CodeBlocks里的一个地方，把lib目录添加在CodeBlocks里的另一个地方。因为教程是手把手的，所以顺利地通过了样例程序的编译。</p>

<p>稍微看了看样例程序的源码后，我开始着手尝试画一些简单的图形。因此，当时新建的工程项目取名为”firstdraw”，这也成了最终的游戏的名字。。</p>

<p>然而，样例程序能够显示出各种图形，而我的程序却会crash。显然这相对于编译时报的错误是更难分析的。在毫无经验的情况下，我最终选择了逐行注释掉代码的暴力方式来测试，最后是发现有一个很不起眼的初始化函数没有调用。</p>

<blockquote>
  <p>仅仅就使用一个工具而言，无论是要配置好allegro库，还是要用MPI写并行程序，还是要用CUDA写GPU计算程序，我觉得最最需要先讲清楚的事情，不是它的技术原理，不是提供包含成百上千个API的文档，也不是直接丢给你样例程序，而是要给一个tutorial，讲清楚它的work flow。Work flow相当于一个使用说明书，从头到尾告诉你一个包含其基本用法的程序应该怎么写，先调用什么后调用什么；或者告诉你各个模块之间是什么关系。这样新手就不会走弯路了。</p>

</blockquote>

<p>流程跑通了，之后画各种别的图形也就简单了，因为这些绘图API的作用与格式其实很直观。其实通过读API也能学到很多原理性的东西</p>

<p>也就是这时，我决定准备做一个简单的射击游戏：玩家用方向键控制、敌人随机游走，并不定期发射子弹、玩家用鼠标单击来控制发射子弹。</p>

<p>我当时对如何把较真实的人形绘制出来这种问题不太感兴趣（当然在商业游戏中，做好人形动画和交互，以及与玩家操控方式流畅地整合起来也是十分重要的事情），就直接用蓝色实心圆来代表敌人，红色实心圆代表玩家，黄色圆表示敌人发出的子弹，绿色表示玩家发射的子弹。</p>

<p>最终的效果如下：</p>

<p><img src="/assets/images/game.png" alt="game" /></p>

<p>当然还有好多问题要解决，如获取鼠标指针的位置用哪个API、怎样让敌人隔一段随机时间后才发射一定数量的子弹、怎样检测子弹的碰撞，直接用随机数赋予敌人速度的话，敌人运动抖得很厉害怎么办（用随机数作为加速度，再来计算速度和位移。而不是直接用随机数作为速度），以及发出那么多的子弹用什么数据结构存储（就是用链表，方便删除子弹，没有随机访问的需求）。</p>

<p>该游戏当时有一个败笔，那就是游戏的主循环(main game loop)的两次循环之间没有任何阻塞，这就导致了CPU/GPU有多快，游戏就会跑多快。该游戏在我大一用的旧电脑上跑的速度很和谐，一旦换到Intel i3/i5上面就会快的应不暇接。</p>

<p>最近我花了一天的时间修改了一下代码，解决了之前的败笔，使这个游戏有固定的帧频了，同时把allegro库适配成了最新版本。顺便调了一下参数，让游戏难度提高了一点。感觉还挺有挑战的，至少我一次都没有打赢过。。</p>

<p>游戏的代码仍然是那么丑，毕竟是学C才两个月的时候写的，各种大大小小的函数一盘散沙地堆在main()函数上面。我不打算再改了，所以这个作品可能更适合用来玩，而不是用来学习游戏设计。（其实也不适合用来玩，玩法被室友狠狠地吐槽过。。）</p>

<p>你可以在<a href="https://github.com/songchaow/firstdraw_new">这里</a>看该小游戏的源代码，也可以直接下载<a href="">程序</a>来体验。</p>]]></content><author><name>songchaow</name><email>songchaow@outlook.com</email></author><category term="ustc-memo" /><category term="memo" /><summary type="html"><![CDATA[之前说到C语言课程中，老师允许我们做大作业的形式来代替普通作业。这里就写一下我做这个大作业的完整经历。]]></summary></entry></feed>