Cliff的工作室
Cliff的笔记本
  1. 2019 年 08 月 30 日
    上一篇只讲了基础概念,这一篇我来用lalrpop实际解析一些东西。 我们假设要解析这样的字符串:“a: str”,这是一个类似变量定义的字符串,冒号前是变量名,冒号后是类型。对于类型,我们定义一些基础类型,但我们也允许自定义类型。 首先我们分析一下这类字符串的BNF,应该是类似这样的形式(简化后): <vari…
  2. 2019 年 08 月 13 日
    最近碰巧看到ThoughtWorks的技术雷达第20期,提到研发人员绩效度量的四个指标,即:前置时间、部署频率、平均修复时间 (MTTR) 和变更失败率。关于这四个指标的进一步解释,可以参考这篇文章:《软件交付效能度量——从吞吐量和稳定性开始》。 度量研发人员的绩效是个复杂的问题。很多直接可见的简单指标是无法直接用来做…
  3. 2019 年 08 月 08 日
    从设计角度上讲,程序和数据是分离的。所以通常我们使用配置文件来调整程序的行为。配置文件通常用一些常用格式,例如Json或者Toml等等。 但有时,我们需要把一些复杂的定义或者行为放到配置文件中,用常用格式是没办法表达这些复杂的定义或者行为的。这时就需要自行解析配置文件。这样的解析的复杂度可能会高于程序本身的复杂度。对于…
  4. 2019 年 03 月 13 日
    开发的Client有用到Push,之前一切都好好的,突然之间就不能收Push消息了,了解了一下,居然是Push Server临时加了VAPID验证,知道这个原因后我心里默默说了一句MMP。 说归说,事情还是得做。Server端声称已经做好了跟Push Server之间的交互,只需要Client端将Server端提供的K…
  5. 2019 年 03 月 03 日
    生活中,老婆想要一个方便处理她的培训班数据的工具,所以打算写一个Web应用。用标准的前后端分离模式开发两个工程。前端用Angular,后端用Spring Boot把数据库放出HATEOAS也就是Restful接口。好处就是可以轻松跨平台运行。 工作中,要用Rust写一个工具库,并加以验证。因为涉及的交互比较复杂,所以打…
  6. 2019 年 02 月 21 日
    最近在用Rust写程序,一开始很不适应ownership概念,感觉缚手缚脚。现在慢慢习惯之后,还是觉得很拘束。只能说这是一种门槛较高的语言,当然换来的是其强调的“安全”;也就是说,用Rust很难写出类似内存泄露的问题。Rust跟其他语言在某些概念上略有不同,在这里简单比较一下。 首先,所有的编程语言都可以用来进行结构化…
  7. 2018 年 09 月 04 日
    很久以前看到一本开发书,应该是侯捷的《深入浅出MFC》,里面大致有这么一句:有些人习惯由道到器,有些人习惯由器到道。当时就对这句话印象很深。让我从另一个更高的角度开始理解软件开发。 说起来,软件开发中,什么是道?什么是器?周易中说:形而上者谓之道,形而下者谓之器。因此很明显,思想是道,物件是器。那么软件应该是器,但设计…
  8. 2018 年 06 月 21 日
    世界杯开始了,家里的两个盒子却开始出状况。小米盒子1S的问题是硬件老旧,系统占资源太多导致操作卡顿;另一个IPTV盒子是ZTE B760H,之前就折腾过了,但不知道为什么时间总是不正常,导致https网页无法正常打开。没得说,必须修理一下。 所谓修理,其实都是软件调整而不是硬件问题。小米盒子问题根源是执行了小米的Lau…
  9. 2018 年 04 月 12 日
    最近处于一个比较休闲的状态,本来应该写论文的,但实在提不起兴趣来。至于工作方面,手头的事情做完了,暂时没什么BUG过来,所以也就无事可做。 由于闲着也是闲着,想起自己的Netgear R8500还没有开源固件,来了兴致,把Netgear的源码下载下来编译了一下,发现到处是坑。于是多折腾了一会,记录如下: R8500的1…
  10. 2018 年 03 月 02 日
    vmware虚拟机的硬盘只有200G,在做的OS一套源码32G,加上编译out目录,虚拟机里面就剩不了多少空间了。 不幸的是,还有多个repo的代码需要维护,所以只有搞了个移动硬盘。别问我为什么不加内置SSD,已经是512G的SSD了,再加的话,买不起。 新的移动硬盘是WD的My Passport,USB 3.0,接上…