美景应在平凡中(高中议论文)

整理旧文件,发现了这篇四年前的作文。此文在当年西城区高三期末“四校联判”中得到49分(满分为50),还被选为范文。应该说是我写作能力的巅峰了。整理如下,谨作纪念。
北京市西城区2013—2014学年度第一学期期末试卷 高三语文 2014.1
21.阅读下面对话,按要求作文。(50分)
记者:如果将写作比作一种运动的话,你觉得它与哪个项目最相像?
作家:登山吧。不过有的登山者是去看如火如荼的红叶的,那里游人如织;有的登山者则要一睹险峻的冰峰,那里人迹罕至。
记者:这二者谁更可贵呢?你自己又属于哪一类?
作家:每个登山者都有自己认为更可贵的答案。我属于后一类人,也许各行各业都有像我这样的人。
上面这段对话,引发了你对生活怎样的思考、想象?请自定角度,自拟题目,自定文体(诗歌除外),写一篇不少于700字的文章。
美景应在平凡中
北京八中 高三10班 李肇阳 2014年1月13日
每年秋天,特别是国庆假期,广播电视里总有这样的消息:香泉环岛如何如何地拥堵、车位如何紧张、交警建议要去香山的游客尽量乘坐公共交通工具……有人对这样的“游人如织”嗤之以鼻,非要征服险峰才为可贵。可是我想,既然美景就在我们身边,我们又何必涉艰险去一睹那瑰怪呢?
对于自然景物来说,美是独立于观赏者的数量之外的。“美”不是商品,不会因供大于求而贬值,香山的美和审美价值也不会因“游人如织”比人迹罕至时削减三分。“美”的感受在于自然事物通过感官在观赏者心中引起的共鸣,在于观赏者自身的文化修养和审美水平,显而易见地,与是否有其他观赏者、有多少其他观赏者无关。
所以说,因“游者众”贬低“夷以近”,以“至者少”推崇“险以远”,实际上是审美追求的偏差。我想,是“求异心理”作祟,使他们对“美”的理解失之偏颇。靠标新立异、攀登险峰显示自己有追求、有水准,实际上正显示了他们自己心灵的荒芜和贫瘠。
那么,美景不在险远,在哪儿呢?且看周敦颐笔下的莲、陶渊明笔下的菊,朱自清笔下的荷塘月色;鲁迅先生的雪,赵园女士的雨,齐白石的虾在纸上栩栩如生……真正的大家,不是站在珠穆朗玛峰顶创作的,而是站在平地上,站在平凡的生活之间;靠的不是见别人之所未见,而是感别人之所见,从日常所见之中发现、体会、表达“美”的感受。
梅、兰、竹、菊,虽经历代文人反复吟咏,在古诗词中仍然意蕴无限。香山的遍山红叶年年都有,可还是年年游人如织,似乎百看不厌。可贵不在荒郊野岭外,而在市井樊篱间;不在路程远近、游人多少,而在你自己见到了什么、感受到了什么。美景不在险远外,美景应在平凡中。
今秋,尽管交通拥堵,我还是要去香山看红叶。
(完)

开箱:微软 Sculpt 人体工程学桌面套装

抓住实习期的尾巴,利用微软内部的员工优惠,购入了一套 Sculpt 人体工程桌面套装。这一套东西的品牌建议零售价是 ¥ 1999,使用员工优惠为 ¥ 829,我承认这还是很贵(逃

使用体验放在前面:

小馒头鼠标真是舒服,马上我就爱不释手了,爽不可言。再回去用普通的鼠标,感觉简直是在谋杀自己的手腕。

键盘有些学习成本,比如 B 键我总是用右手食指按的,但用这个键盘就必须改到左手;Home/ End/ PgUp/ PgDn 的布置也和我日常用的 ThinkPad 六排很不同。一开始按键的错误率比较高,我大概花了两天才适应好,恢复了之前的代码编辑效率。

健康很重要啊,保护好自己的腕关节、肘关节,也想图个舒服,我感觉很值。

以下多图,无字。

快递箱。微软官方商城,从上海发货。
快递箱。微软官方商城,从上海发货。
气囊和泡泡纸。
气囊和泡泡纸。
内包装盒。
内包装盒。
好吧我承认这张图是后补的,塑料纸已经丢掉了……
好吧我承认这张图是后补的,塑料纸已经丢掉了……
工作站一瞥。
工作站一瞥。

最后,根据美国联邦贸易委员会的规定,再次声明利益相关:I work for Microsoft, BTW. (逃

Electronic Trading Challenge 酱油记

上个周末刚参加了 Jane Street 举办的 Electronic Trading Challenge Tsinghua Event。三只大三狗,大作业的汪洋大海之中。成绩是 19 支队伍的第 11。本文也很水,预警一下( ̄(工) ̄)

## 体验

简言之就是新奇、有趣。我都想开个户玩真的了。

还有便是认识到了差距,感觉自己好菜啊( ̄(工) ̄)

## 比赛概况

编写程序在虚拟市场里交易。市场上有 4 支个股、2 个基金,还有国库券。除了参赛队之外,市场里还有做市商。交易所提供每种证券的订单簿和订单成交信息。每个交易日持续 5 分钟,每天都是两手空空从头开始,每天结束后系统按照某种公允价值计算盈亏积分。比赛从上午九点持续到晚上九点,划分为一个一个 5 分钟,选手可以随时修改程序,加入或退出市场。

## 我们队的套利策略

我们首先花了点时间通读文档。叶曦在根据交易所的协议编写 API,我和江昊琛先开始研究怎么赚钱。因为暂无 API 可用,我们就用 nc 命令强行手动下单,结果一单亏了 2 块钱,这 2 块钱使我们队一连几个小时都以负的积分排名垫底……好气哦。

基金可以和对应篮子直接互相兑换,无论价格如何,只收固定的手续费。我们首先看到了这里面的套利机会。例如,X 能兑换 2 A + 3 B + 2 C。某一时刻 X 的买入价是 9,A 的卖出价是 2、B 的卖出价是 1、C 的卖出价是 3。那么我就可以花 9 元买入一个 X,兑换成 2 个 A、3 个 B、2 个 C,然后分别卖出去,得到 2 x 2 + 3 x 1 + 2 x 3 = 11 元。从左手搬到右手,9 元就变成了 11 元,只要兑换的手续费低于 2 元,我就赚了。

实际的价格并不是常数,而是数量的一个分段线性的函数。这个函数可以根据订单簿计算出来。对于买方报价,各段斜率是递减的;对于卖方报价,各段斜率是递增的。

Buys         Sells
Price Volume Price Volume
8     3      9     4 
7     2      11    3
6     2      12    4
4     4

随便编了个数字例子。对于给定的证券,买方报价总是低于卖方报价的,否则就直接成交了。X 的价格满足这个关系,ABC 的价格(A、B、C 的价格的加权和)也满足这个关系,但是 X 的价格和 ABC 的价格之间就不一定了。它们都会波动,很可能存在某些时刻,X 的价格和 ABC 的价格不匹配,这叫市场的瞬时无效性。

ABC 组合的曲线是用 A、B、C 的三条曲线按比例叠加得到的。

上图示意的情况下,我们可以买入 A、B、C,卖出 X,赚取差价。阴影部分就是机会啦。在横轴上找到一点,使买入 ABC 的总价与卖出 X 的总价之间的差额最大。如果这个差值大于手续费,我们就可以动手啦。同时还要关注反方向 X Sells 和 ABC Buys 两条曲线,以发现反方向的机会。

为完成这样的交易,需要同时盯着 4 组订单簿,随时更新 10 个总价格函数。每次操作要同时下 5 个订单。价格差转瞬即逝,这种事情显然只有程序能做。

说实在的,策略很简单,模型也很简单,但我们实在是太菜了。大概上午十一点开始写,晚上五点才把它调试好上线。

说实在的,策略很简单,模型也很简单,但我们实在是太菜了。大概上午十一点开始写,晚上五点才把它调试好上线。在此之前我们队只是简单地倒卖国库券,每个交易日的收益徘徊于两位数;后来叶曦做了几个我搞不懂的策略,提高到几百,但是波动似乎很大。等到这个套利策略上线,收益就稳定在 1000 元左右了。

## 差距

凭着这个套利策略,在比赛的最后几个小时,我们的排名上升了 3 位。后来我们了解到,前几名的队伍每个交易日的收益都在 10000 元以上。数量级上的差距,确实难以望其项背。

## 收获

打了一整天酱油,反正三顿饭都很不错。连续十个小时写代码,感觉很爽的。要说收获,也就是见了见世面吧,体验了一下 Hackathon 这种形式,对证券市场有了些感性认识。

(本文首发于知乎

学习构建之法(1):写个微信抢票

历时 5 周,历经 Alpha、Beta 两次迭代,终于把软件工程这门课的两人项目做完交付了(?)

粗略计算,与我同组的刘斌同学在这个项目上花费了百余个小时的时间。我本人则少一些,未作确切统计。从截止日期临近时另一专业课 13 / (~60) 的出勤率、去校外咖啡馆刷夜的人数、汇报展示现场主讲教师建群发红包“熬夜辛苦,中午吃好点”的情景,可见这项作业的工作量之大(?)

这个项目最主要完成的是测试环节,至于需求分析、软件设计、团队流程等则涉及较少。

根据课程要求,撰写一篇博客。择其重点,总结一下主要的收获。

  • 设计实现
    • 体会到 Web 应用开发时前后端分离的好处
    • 再次体验了给助教华榕大帝改 bug
  • 团队合作
  • 软件测试
    • 认识了 django 测试框架、浏览器自动化工具 selenium 和 PhantomJS
    • 知道了编写单元测试的基本方法
    • 了解了编写功能测试的基本方法
    • 了解了评价测试的主要指标——覆盖率
  • 性能调优,相关博文:django 性能调优手记
    • 性能测试
      • 认识了性能测试工具 JMeter
      • 了解了评价性能的主要指标——吞吐量、错误率、响应时间等
    • 部署和运维
      • 认识了众多 Linux 系统参数、uWSGI 参数、nginx 参数
      • 尝试了基于 docker 的自动化部署
    • 性能优化
      • 体会到若干因素对性能的影响

此系列还有另一篇博文:学习构建之法(2):课程总结

本博客改名称、换域名啦!

nullspace,数学名词,见于线性代数课程中,对应中文“化零空间”、“零空间”、“核空间”等。

null 和 space 两个词同时出现,是不是很有 geek 科技范?

我的博客的新的地址,是 nullspace.cn(白菜价的 .cn 域名←_←),请大家更新收藏夹~

原域名 200404.xyz 将保持使用直到2016年2月。当然新浪云提供的二级域名 200404.sinaapp.com 会一直可用。更新 2016-9-26:已从新浪云迁出,目前放在 Vultr 提供的 VPS 服务器上。

(完)

Visual Studio 配置 OGDF 图布局算法库

项目主页:http://www.ogdf.net/

开源 (GNU/GPL),有不错的示例、文档(都是英文的←_←)

主要步骤:下载源码, 编译安装, 配置工程, have fun!

Step1>>下载源码

  • http://www.ogdf.net/doku.php/tech:download
  • Current Release: v. 2015.05 (Baobab) [5.4 MB]

Step2>>编译安装

  • 执行 makeVCXProj.py 脚本:生成 VS 工程 ogdf.vcxproj, coin.vcxproj 和解决方案 ogdf.sln。不需要 cmake,但是……好像需要个 python 解释器
  • 用 VS 打开 ogdf.sln,“生成解决方案”。
  • 你会得到一些 lib、obj 文件。我的在 OGDF\Win32\Debug 目录下

Step3>>配置工程

  • 添加包含目录、库目录
    • 在解决方案管理器中右击你的工程,属性。配置属性>VC++目录:
    • 在“包含目录”中添加 OGDF\include
    • 在“库目录”中添加 ogdf.lib、coin.lib这两个文件所在的目录(上一小步中的 OGDF\Win32\Debug)
    • 也可以将以上路径添加到相应环境变量中
  • 为链接器附加库 ogdf.lib、coin.lib
    • 还在工程属性对话框中,配置属性 > 链接器 > 输入,在“附加依赖项”中添加“ogdf.lib;coin.lib;”。
    • 也可写在源代码文件里,
      #pragma comment(lib,"C:/blablabla/ogdf.lib")
      #pragma comment(lib,"C:/blablabla/coin.lib")

Step4>>hello world

#include 
using namespace ogdf;

int main(){
Graph G;
node a = G.newNode(); 
node b = G.newNode(); 
node c = G.newNode();
G.newEdge(a, b); 
G.newEdge(b, c); 

GraphAttributes GA(G);

FMMMLayout fmmm; 
fmmm.call(GA);

cout << GA.x(a) << ", " << GA.y(a) << "; \n";
cout << GA.x(b) << ", " << GA.y(b) << "; \n";
cout << GA.x(c) << ", " << GA.y(c) << "; \n";
return 0;
}
//代码很丑陋,这只是个hello world,莫吐槽

一次运行的结果:

25, 25;
59, 60;
93, 93;
请按任意键继续. . .

(完)

清华校园网用 PAC 文件

访问校内站点时直接连接。

function FindProxyForURL(url, host) {
   if (shExpMatch(host, "*.tsinghua.edu.cn")) {
     return "DIRECT";
   }
   if (isInNet(host, "59.66.0.0",  "255.255.0.0")){
     return "DIRECT";
   }
   if (isInNet(host, "166.111.0.0",  "255.255.0.0")){
     return "DIRECT";
   }
   if (isInNet(host, "101.5.0.0",  "255.255.0.0")){
     return "DIRECT";
   }
   if (isInNet(host, "101.6.0.0",  "255.255.0.0")){
     return "DIRECT";
   }
   if (isInNet(host, "183.173.0.0",  "255.255.0.0")){
     return "DIRECT";
   }
   return "__PROXY__";
}

SYSTEM_DRV 和 Lenovo_Recovery 分区是做什么的

上图为一台 ThinkPad 在出厂状态下的内置 SSD 分区状况,机型为 ThinkPad X1 Carbon (TYPE: 20A8-A0X2CD)。

SYSTEM_DRV

该分区上有主引导记录,有 bootmgr、有 BCD,是活动分区,默认状态下从该分区引导。该分区上还有一个 300MB+ 的 WindowsRE 的镜像。

如果删除,可能无法正常启动 Windows(需要修改活动分区为 Windows 分区),也将无法在不能启动 Windows 操作系统的时候进入 Rescue and Recovery 工作空间进行系统恢复。

官方用户指南对此的说明是:

Rescue and Recovery 工作空间位于固态驱动器上一个受保护的隐藏区域中,该区域独立于 Windows 操作系统运行。通过它,即使无法启动 Windows 操作系统,也可以执行恢复操作。

Lenovo_Recovery

此分区不能作为引导分区,相对平凡一些。此分区内含 SYSTEM_DRV 分区的完整映像(sdrivebackup.wim),还有一个 Windows 分区的完整映像(cdrivebackup.wim)(出厂状态的 Windows 系统,已预装了不少 Lenovo 的软件)。

如果删除,将无法制作恢复盘。

根目录下的 LenovoQDrive.exe 给出以下信息:

Lenovo 原厂备份分区信息:Lenovo 在此分区中提供了一份原厂预装软件的副本。为方便使用,只要在 DVD 上安装了此实用程序的副本,即可使用它恢复此空间。

还有一个休眠分区

在用户指南 BIOS 部分找到了以下信息:

Intel Rapid Start Technology

要使用此功能,固态驱动器上需要一个特殊的分区。启用后,计算机在睡眠状态下经过指定的时间后,进入低功耗状态。并且只需几秒钟即可恢复正常运行。

在电源管理器帮助中亦有相关说明:

启用 30 天待机

选中此复选框后,Power Manager 将根据系统及其配置自动更改计算机电源状态:

1.如果计算机支持深度睡眠状态,Power Manager 将会在指定的一段时间后使计算机进入深度睡眠状态。
2.如果计算机不支持深度睡眠状态,Power Manager 将会在指定的睡眠状态持续时间过后使计算机进入休眠状态。此功能要求 Power Manager 开始学习睡眠和恢复操作。大约需要经过几个月才能生效。

通过启用 30 天待机功能,可延长电池使用寿命。

(完)

Symantec 防火墙可能阻止 IPv6 流量

这是一篇故障排除手记。摘要如题。Windows 7 Ultimate, x64, Symantec Endpoint Protection 12.1.2015.2015(网络威胁防护定义2015-4-13 r11), TUNet, cernet

宿舍有原生的 IPv6,可以用来 BT 下载、观看流媒体等,不计流量不要钱,非常愉快。有一天我发现那些 IPv6 的站点都登录不上去了。IPv4 正常。

换其他网口,不行。换其他电脑,正常。由此认定是本机问题。

ping 得到 General Failure,浏览器报超时。而 DNS 解析正常,ipconfig 查 IP 配置未见异常,IPv6 地址是有效的。

使用“带网络连接的安全模式”进入系统,IPv6 站点访问正常。由此认定是第三方软件的问题。

经仔细检查,是 Symantec 的防火墙的缘故。关闭后恢复正常。

并不知道为何 Symantec 防火墙无故拦截 IPv6 流量。考虑到故障现象是突然出现的,这可能和更新的防护定义有关。

(完)