vim8 插件升级
历史
我也是用了 spf13-vim + vundle 有七八年了, 之中还用过Pathogen 之类的
这次随着ubuntu $20\to 22$的升级, 有不少之前的插件不支持vim8,不能用了, 虽然根据官网消息,似乎vim9已经出来了
vim8 也有自带的package管理方案:h packages
, 看起来需要自己用git维护, 而用vim-plug只需要维护vimrc, 而在8之上还有dein,minpac的插件管理工具
而且还有nvim和vscode+vim键位的一些解决方案
但我有点懒 宁愿多配配 也暂时没想着改习惯
本机是ubuntu, 就没管win和mac的, 其它的看各种工具的官方文档吧
ubuntu + pip + setuptool bug 体验
第一次被pip搞了几个小时
壮着胆子,在Ubuntu 22.10还没发布前,把系统从20.04.5升级到了22.04.1, 以我从12->14,14->16,16->18,18->20多年的经验来看, 这次竟然没问题! 厉害了, 以前每次升级都会炸点东西, 然后最终还是重装式升级, 这次竟然没啥严重的炸掉
然后pip3 install -e .
出问题了
先是报没权限,但看报的路径,没往用户目录下写,在写root, 作为一个胆小的人, 向来杜绝777的
翻了半天google和github
看到一个方案:setup.py
中加上
1 | import site |
加完以后, 恩 是没有问题了
然后报错
1 | × python setup.py develop did not run successfully. |
又搜,发现的确是setuptools有bug,然后60.0.2修复了
Hexo Static Blog in 2022
python3 setuptools 发包
TLDR: setuptools在2023的体验的确比不上新工具hatching
Step by Step
install build
1 | pip install --upgrade build |
基础使用
提供pyproject.toml
文件, 包含build-system
section
1 | [build-system] |
Ubuntu下 给老电脑换个ssd
带sudo的一定小心, 别选错盘了
工具推荐
bcompare
gparted
常用命令
io测试
https://linuxreviews.org/HOWTO_Test_Disk_I/O_Performance#Testing_random_4K_reads
大块读
1 | fio --name TEST --eta-newline=5s --filename=temp.file --rw=read --size=2g --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting |
大块写
1 | fio --name TEST --eta-newline=5s --filename=temp.file --rw=write --size=2g --io_size=10g --blocksize=1024k --ioengine=libaio --fsync=10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting |
随机4K读
1 | fio --name TEST --eta-newline=5s --filename=temp.file --rw=randread --size=2g --io_size=10g --blocksize=4k --ioengine=libaio --fsync=1 --iodepth=1 --direct=1 --numjobs=32 --runtime=60 --group_reporting |
ng zone
背景
众所周知, change detect要解决的事情,就是数据变化 触发 视图变化,而最常见的两个问题是如何探测变化,和如何减少不必要的更新
vue用修改getter/setter或proxy的方式 来完成依赖收集和变化通知,使用lazy watcher来减少更新
svelte 采用编译时更改代码的行为, 避免检测
react 采用setState函数调用 和 队列控制批量更新
那ng呢
NgZone
ng: 什么时候会有视图更新
- 用户的操作事件: click/change/input
- 去后台请求响应后
- Timers:
zone.js 能够维持运行时上下文, zone有生命周期钩子, 且Monkey-patched了一些方法(setInterval
,alert
,prompt
,addEventListener
,removeEventListener
)
NgZone, 提供 run(callback)/runOutsideAngular(callback)
, 分别用于当三方api中的异步回调想要修改内容时触发检查,和普通的操作中希望避开检查
你还可以设置 ChangeDetectionStrategy.OnPush
, 手动触发更新检查
你也可以动态的通过ChangeDetectorRef进行检查的启用和停用
甚至你可以 通过 module 中 { ngZone : 'noop'}
去一定层级禁用它,然后自己实现响应式都可以
而react是把数据与视图绑定的叫做state,没绑定的叫做ref
总结一下
以渲染10000个可以draggle的svg作为例子, 通过cdr并不能完全避免检测,因为你的mouse move也会触发检测,只是没有变化发生而已
而通过在mouseDown中的runOutsideAngular中给mousemove绑定,就可以实现mouse move 也不触发检测, 再在mouseUp中移除监听,并且通过this.zone.run触发更新检测
而对于多个异步的调用过程,在zone的加持下也容易看到调用的“栈结构”
参考
https://github.com/angular/angular/tree/main/packages/zone.js
豆瓣页面数据解密
问题
个人的网页需要一些书目数据,印象中,老的豆瓣直接是页面还是接口,能获直接取到,可以作为爬虫入门练手
然而前天一看,新版的豆瓣已经不明文返回数据了
https://search.douban.com/book/subject_search?search_text=%E5%AE%9E%E5%8F%98%E5%87%BD%E6%95%B0&cat=1001
预备知识
C++函数调用
:这个知识点让你知道函数调用堆栈的常见设计
js调试:chrome断点,格式化代码,console,js基本语法,
思路
定位数据来源
一般来说 只要页面不用花里胡哨的技巧,比如把数据放在png里的话,一般来说,数据只会在Fetch/XHR
,JS
,html
,ws
中
通过页面展示的实变函数论
去上述类型中搜索,结果没有任何内容中直接包含数据
currying 加法
问题
一个支持 任意多参数,可以柯里化的加法函数
思路
直接返回函数 保留已传内容的加和
toString 支持输出值
实现
1 | function add() { |
使用
1 | console.log(+add(1)); |