2018 年个人年终工作总结及 2019 年全年计划
8102 年捣鼓着寻思着就过去了,陆续看了网易云音乐、哔哩哔哩以及支付宝出的个人年终报告,尤其是网易云的报告,激起了漫漫回忆。从18年初一直到18年6月,这段时间一直处于持续的高压状态,期间一直循环着 yousa 的歌,一边生疏地用着调试工具调试着内核,感觉没多久前的事情,现在都感觉有点陌生了。时间冲淡了点点滴滴,再次一一回忆起来,这一年做了什么、有什么遗憾、成绩与不足、经验与教训、计划完成情况、新一年的计划....,整理归档一番还是很有必要的。那么接下来就照着下面的顺序来顺一顺。
- 已完成或正在进行的工作
- 吸取的教训
- 遗憾与不足
- 2019 年全年计划
已完成或正在进行的工作
解读 LightNVM 的源码并将它移植到 UFS 上用于原型验证
说起来这个项目的完成度并不算高,项目从 2017 年 5 月就开始前期调研,先是看论文,然后是读源码。从存档记录来看,解读的第一个版本的 LightNVM 源码还是 Linux-4.9 上的。之后分别解析了 4.10、4.12、4.13、4.14、4.16 以及 18 年九月份的 4.19。除了详细解读 LightNVM 的源码,顺便还简单的看了看 NVMe、SCSI、UFSHCD 驱动的源码,查阅了 UFS 和 SCSI 的协议文档。
在编码阶段,师兄 @李棋 负责在 Qemu 上仿真一个 UFS 设备,我则负责 host 侧,将 LightNVM 的 NVMe 驱动相关层移植到 SCSI 上,主要工作就是做一个 NVM Command 到 SCSI Command 的转换。在 SCSI 的上层创建了一个转换层,同时修改了部分 SCSI 和 UFSHCD 的代码,用于检测 UFS 设备对 Open-Channel 的支持以及当支持时加载 LightNVM 模块。
之后又分析了 Femu 上关于 Qemu 的 NVMe 仿真扩展的实现。在当期 Qemu 版本实现的 NVMe 中,并没有去模拟设备读写时延等特点,所有请求都是直接操作完内存后,就返回操作结果,Femu 则模拟了读、写、GC 等操作导致的时延。就这样到了四月五月,该项目结束。
块层 FIOS 调度器的实现
大概是在五月份,我正在归档 LightNVM 那个项目的文档和源码,导师发来一篇论文,并让我想想能不能在上面作文章,于是这个 FIOS 调度器的项目就开始了。同样的,先做前期调研,包括论文精度、块层源码分析、CFQ 调度器的源码分析等。这次分析源码就感觉顺手的多,最后实现了三个版本:基于 CFQ 修改得到 FIOS1、基于 CFQ 的删减版本修改得到 FIOS2、从头实现一个 FIOS3。其实是先有 FIOS1,然后发现很烂,于是精简了原生的 CFQ 变成了 FIOS2,然后发现 CFQ 存在很多对 SSD 而言无用的操作,比如计算寻道时间等,于是 FIOS3 就出来了。最后在两块 SSD 上跑 trace,还跑坏了一块。
帮助一家私募构建程序化交易系统
这个事情还得从 18 年春季说起,因为有两门课程涉及到数据处理,正巧贸易战打响,手上正好有以前抓取的股票和期货数据,于是就用这个数据进行一波数据挖掘分析,可能是题材比较新颖,给同学们留下了比较深刻的印象。7 月底接到一个电话联系我,希望能够帮助一家私募开发程序化交易系统。女朋友是金融那边的,所以从本科开始耳濡目染顺便系统地去学习过一波金融学相关学科,于是自信心蜜汁爆棚,开始飘了。
- 低估了开发难度
- 暑期不是很忙,只有一个 FIOS 的实现需要做
- 对计算机与金融的交叉领域比较感兴趣,想知道业内都在忙什么
- 赚点外快填肚子
基于以上四点,便以兼职实习的身份接手了这个项目,开始全权负责开发工作。内盘基于 CTP 接口,外盘基于 Esunny 接口,界面用 Qt 构建程序化交易系统。起先的 deadline 定在 9 月初,而最后完成的时间在 11 月。
OPTSP:开源期货程序化交易系统
暑期开始的程序化交易系统开发,加了很多 CTP 和 Esunny 的开发群,发现几乎发言的都是非计算机从业人员,他们的开发周期非常长,通常以年计,于是便萌生出了这个项目。将交易接口封装,并提供一个丰富的显示界面,策略开发者可以采取三种方式添加交易策略:
- 直接在源码中继承并实现策略接口
- 将策略实现为 dll 插件并加载到交易系统中
- 用任意语言实现策略接口并通过 socket 与 OPTSP 进行数据交互
此外 OPTSP 还应该提供 tick 数据的同步,目前的想法是参考 IPFS 设计一套分布式去中心化的同步方案。如此一来交易者就可以集中精力研发策略,并能够快速的使用 Python 或其他熟悉的语言进行模拟或实盘交易,追求更高性能的交易者还可以实现成 dll 以插件的方式加载到 OPTSP 中。
吸取的教训
- 在实现一个项目前,应该花时间做好设计,按照软件工程的规范写各个阶段的报告,最后再根据设计进行编程实现;
- 在有设计文档的前提下,再去正确合理地评估工作量,可能实际上的工作量要比看完需求书后脑海里估计的工作量大得多;
- 如果内心排斥做某件事情,但是又必须做时,不能拖,先去做十分钟,沉浸进去后,排斥感就会少很多很多;
- 坚持写作,坚持写周报,精确地记录一周所做的事情、遇到的问题、解决问题的思路;
- 减少刷知乎、逛论坛的时间,提高工作效率,若有必要,关闭微信和 TIM 的图标闪烁;
- 要经常进行数据的冗余备份;
- 鸡蛋不要放到一个篮子里,要经常关注科技和金融领域的资讯;
- 注意身体,尤其是颈椎。
遗憾与不足
一年里头总会有那么两个时间段,短则一周长则一个月,无法专注下来做事情,在已经过去的 18 年,也有两个这样的时期。考虑着不切实际的事情,患得患失,又想要把握所有东西,做不到自然就会消沉。就是这种想要求得最优解的想法,反而让自己陷入计算不出结果的窘境;适当放弃些东西,才能以退为进。
18 年的第一个遗憾,应该是没有去考驾照。早在 17 年春,过完春节后返校,就早早的去报了驾校,并且一鼓作气走到了科二;之后要准备考研复试,所以就搁浅了。复试完后,早早的就进了导师的课题组,鼓足了干劲到处乱拱。这样一拖就拖到了现在,科二仍然没有过。暑假那段时间本来有空闲时间,却忙别的去了。接下来只会更加忙,大概这辈子都拿不到驾照了。
18 年的第二个遗憾,遗憾的我都不知道咋写了......
2019 年全年计划及完成情况
专业内容
- √ 分布式存储相关论文解读
- √ IPFS 深入调研及源码解析
- ↺ IPFS 及 FileCoin 节点部署
- √ CEPH 理论及源码解析
- ↺ 开题报告及毕设论文项目
- √ 分布式系统项目
开源项目
- ☐ OPTSP 期货程序化交易项目
- ☐ Phil.Engine 游戏引擎
- ☐ Lisp 方言编译器
- √ 基于 Initial 的 typecho 主题个人向修改
- √ typecho 功能个人向重构与添加
基础复习与编程练习
- ↺ 编程语言语法基础与语言特性学习:Go / PHP / Lisp / Haskell / OpenGL
- ↺ 源码分析:Linux IO 栈 / NVMe / 随机数(glibc/kernel/gpg)/ 内存管理(glibc/slab/jemalloc)
- ↺ 基础理论知识学习:Linux 内核理论与驱动开发 / 机器学习算法基础 / 数据挖掘算法基础
- √ 基础理论知识复习:算法与数据结构基础 / 操作系统基础 / 计算机网络基础 / 体系结构与组成原理
- ☐ 造轮工艺:C-like / Docker-like / Philengine / proxy-like
- ☐ KGDB 与 GDB 工具
- √ 练习盲打
- √ LeetCode 刷题
人文社科与生活
- ↺ 英语六级
- ↺ 日语 N2
- ↺ 年度报表解读分析
- √ 驾照
- ↺ 经济学金融工程理论:微观/宏观/会计学原理/货币银行学/公司金融/投资学
- ☐ 量化模型与策略
- ⊠
期从/证从 - ⊠
素描
(完)
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
熊宝宝优秀!
这这这,莫非是,李老师???
666666