分类 默认分类 下的文章

一个人在家的时候,比较懒炒菜,一般吃的要么是煮的要么是蒸的。
准备好食材丢锅里,然后定个倒计时,时间到了就能开吃了。

最近只集中做了两个菜:

  1. 白灼虾,试了好几种做法(400g九节虾)
    a). 水将要烧开时(锅底出现很多小泡泡)放虾,水开后捞出
    b). 水开后放虾,60秒后捞出
    c). 水开后放虾,30秒后捞出
    a,肉大一点的地方感觉中间没有完全熟,但是口感还可以,b,有点老,c,还是有点老。
    下次试试多加料酒来调整沸点
  2. 蒸肉饼汤(追求爽弹的口感)
    因为蒸锅放不下太大的碗,所以一开始都是放在炒锅里隔水炖,不过特别容易老,目前是大火5分钟,开盖小火10分钟,锅中水不宜过多,贴底就可以,不然特别容易蒸老。
    如果是用蒸锅的话,大概大火蒸个15分钟开盖就行了,或者蒸10分钟再焖一会。15分钟是极限,15分钟以下开盖基本上还不太熟。

这两个都还有很多实验的空间,虽然很想试试低点的温度,但是感觉太耗时间了,希望能找到15分钟内闭着眼睛都能搞定的办法。

最近看完的书大部分和lisp有关系:

  1. 《Build Your Own Lisp》
  2. 《The Common Lisp Cookbook》
  3. 《Let Over Lambda 中文版》
  4. 《Extending a Language — Writing Powerful Macros in Scheme》

Lisp和scheme的语法差不多,但是除了宏以外还有一个最明显的区别,(cdr '())会计算出不同的东西。

SBCL
* (cdr '())
NIL
* (cdr nil)
NIL
*
ChezScheme
> (cdr '())
Exception in cdr: () is not a pair

Lisp的做法可以让代码更简洁,但是scheme的看起来更直观,比如

(cond ((cdr (lookup lat a)) ...)
...
)

Lisp对返回的空的list就能直接返回,而scheme会返回错误,因为空的lisp不能应用cdr,但是scheme有带参数的cond跳转。我个人觉得scheme更自洽一点,毕竟'()不是一个特殊的值。

想看完的还是两本,才看了一半
《SICP》
《EOPL》
闲暇的时候翻翻下面的书
《scheme 9 from empty space》
《Software Design for Flexibility》
《Lisp in Small Pieces》

其实最感兴趣的还是VM的编译和实现,似乎现在很少有这方面的书籍
ribbit我已经移植到esp32上面了,但是怎么实现像fasl一样的东西还是没什么头绪,虽然vm部分实现很简单,但是scheme的编译器部分几乎都没有什么注释。

每次搬家,都有很多东西要搬,其实大部分都用不上,或者用的非常少,复盘一下怎么样留下最少的东西。

厨具

电饭煲,微波炉,烤面包机,榨汁机,烤箱,高压锅,炒锅,蒸锅,锅碗瓢盆若干。
这里面用的最多的电器就是电饭煲和微波炉了,其实电饭煲不用也可以,曾经有段时间没有电饭煲,就用蒸锅蒸饭,口感不如电饭煲煮的软糯,但是勉强也可以吃。
微波炉几乎无可替代,热菜热饭非常方便又不会过度加热破坏味道。但是不用也可以。

所以实际上我只需要炒锅和蒸锅,再加几个盘子和几个碗即可,筷子用一次性的,如果没有煤气灶的话还需要一个电陶炉,那有炒锅就行了,毕竟炒锅也能蒸东西。

家具家电小家电

家电目前有冰箱和洗衣机,这两个都是一定要的,大小无所谓
沙发可以不要,餐桌有个折叠的桌子就够了

工作和个人使用

台式机,路由器,AP,华三交换机,虚拟机,电烙铁,热风枪,各种网线和单片机,笔记本若干
交换机是之前部署AP和NAS用的,比较大,实际上有8口的交换机就足够用了,台式机主要可以打游戏,而且有4K屏幕,用笔记本也一样。

所以需要一个笔记本,路由器(可以集成进all in boom),AP和虚拟机

衣服和杂物

平常穿的衣服就那么几件,几条短裤加几条T恤,长裤一两条,外套两件
桌子椅子什么的可以随便对付

想把这么多东西都塞箱子里还是挺难的,不过如果只带笔记本和衣服的话倒是可以,虚拟机主机也要带着,不然没办法连接到外网。

  1. 基于stack虚拟机
  2. 内存包括4部分:the Scheme objects, the Scheme global variables, the RVM’s stack, and the instruction stream executed by the RVM.
  3. 使用rib来表示object, [ x,x,x ],整数用低位为1的word(host c): an object reference is implemented with a machine word with the lower bit encoding the type: 1 when the object is an integer (the other bits represent the integer value), and 0 when the object is a rib (all the bits are the aligned address of the rib in memory).
  4. 虚拟机只需要两个指针:stack, which refers to the rib at the top-of-stack (TOS), and pc, which refers to the rib containing the RVM instruction being executed. (同时亦作为gc root)
  5. 使用 Cheney-style stop-and-copy GC 算法
  6. 类型:[ field0, field1, type ] 0 pair, 1 procedure, 2 symbol/global variable, 3 string, 4 vector, 5 special

这几天发现我的grafana面板有点不对劲,经常刷新一下之后某些字段出现nodata,但是我确定之前是可以用的,而且也没升级版本。
跟踪了一下json,发现是确实没有数据出来,time和value都是0,但是隔时间久一点刷新数据又都有,只有很快的点击刷新按钮,数据才会没有。
于是我检查了一下表达式,发现这个表达式是irate,但是irate的基础数据是有的,思考半晌后,我想是不是时间不同步,导致没有新的时间窗口的数据?因为exporter是在另外一台机器上。看了一下时间,结果发现确实差了大概10秒钟,ntpdate一下后grafana恢复了正常,但是这两台机器是在同一台esxi上,只是其中一台开启了ntp,另外一台只是在启动的时候ntpdate,并且母鸡也是开了ntp的。
那么时间为什么会差10秒钟呢,esxi的RTC时间是不准确的吗?看了一下文档TIMECOUNTERS(4),HPET(4),发现其实系统有好几个时钟源:

kern.timecounter.tsc_shift: 1
kern.timecounter.smp_tsc_adjust: 0
kern.timecounter.smp_tsc: 1
kern.timecounter.invariant_tsc: 1
kern.timecounter.fast_gettime: 1
kern.timecounter.tick: 1
kern.timecounter.choice: TSC(1000) ACPI-fast(900) i8254(0) HPET(950) dummy(-1000000)
kern.timecounter.hardware: TSC
kern.timecounter.alloweddeviation: 5
kern.timecounter.timehands_count: 2
kern.timecounter.stepwarnings: 0
kern.timecounter.tc.TSC.quality: 1000
kern.timecounter.tc.TSC.frequency: 2112000000
kern.timecounter.tc.TSC.counter: 2163619832
kern.timecounter.tc.TSC.mask: 4294967295
kern.timecounter.tc.ACPI-fast.quality: 900
kern.timecounter.tc.ACPI-fast.frequency: 3579545
kern.timecounter.tc.ACPI-fast.counter: 15875638
kern.timecounter.tc.ACPI-fast.mask: 16777215
kern.timecounter.tc.i8254.quality: 0
kern.timecounter.tc.i8254.frequency: 1193182
kern.timecounter.tc.i8254.counter: 50337
kern.timecounter.tc.i8254.mask: 65535
kern.timecounter.tc.HPET.quality: 950
kern.timecounter.tc.HPET.frequency: 14318180
kern.timecounter.tc.HPET.counter: 3934900351
kern.timecounter.tc.HPET.mask: 4294967295

我记得很久以前freebsd implemention那本书里写因为rtc的精度太低,所以系统的时间都用其他的counter来计算,启动之后就不管rtc时间了,反正这个都是可以调整的,esxi确实也有timer的bug:https://kb.vmware.com/s/article/85150