每周分享第 8 期

这周更加忙了,所以内容不多。 Rust 1.32.0 is out 其中 dbg macro 挺有意思 https://blog.rust-lang.org/2019/01/17/Rust-1.32.0.html 在线的 hex packet decoder https://hpd.gasmi.net/ Rust Cheatsheet https://www.breakdown-notes.com/make/load/rust_cs_canvas/true Rust tcp/ip stack https://github.com/m-labs/smoltcp 逆向 CAJ 的转换器 https://github.com/JeziL/caj2pdf

Read More

每周分享第 7 期

这周比较忙,所以内容不多。 在嵌入式系统里跑 Lisp 可以在串口开个 repl 在线调试 http://www.ulisp.com/show?3J Pattern matching for C++ https://github.com/solodon4/Mach7 一个商业版的类似 ASan 的产品 不知道效果如何 https://stensal.com/ 用 Python 写 Cocoa 界面还行 https://dawes.wordpress.com/2017/08/17/python-with-a-cocoa-gui-on-macos/ Rust 实现的权威搜索引擎 https://github.com/toshi-search/Toshi Rust Embedonomicon 讲述 Rust 在 bare metal 下的一些神奇操作 https://docs.rust-embedded.org/embedonomicon/preface.html 发现另一个基于 Github 的 Disqus 替代品 https://utteranc.es/ 挺好的一部讲 Rust 生命周期的小书 http://cglab.ca/~abeinges/blah/too-many-lists/book/README.html 跨平台的 Ctrl-C 处理 for Rust https://github.com/Detegr/rust-ctrlc 用 Rust 写 stm32 上程序所需要的库 https://github.com/stm32-rs/stm32-rs go 语言编写的基于 fuse 的加密文件系统 https://github.com/rfjakob/gocryptfs Rust 的图片解析库 https://github.com/PistonDevelopers/image 用 BPF 做 API 解析和过滤 https://github.

Read More

实现 VSCodeVim 中支持中文分词的单词移动

最近用 VS Code 写中文 LaTeX 比较多,但是编辑起来总是比较麻烦,不能用各种带 w 的 motion ,不然整行都没了。于是 @xalanq 提出能不能拿一个 JS 的分词库,魔改一下 VSCode Vim 来得到同样效果?答案是可以的。 最后代码在 jiegec/VSCodeVimChinese 里,还没有合并到上游的打算。不定期根据上游发版本同步更新,在 Github Release 里发布 vsix 文件,目前版本为 v1.0.1。在 VS Code 里 Extensions: Install from VSIX... 即可安装。 经过对代码的研究,发现对 motion w 的处理都是通过 getWordLeft getWordRight 和 getCurrentWordEnd 完成的。于是我修改了这三个函数,根据原来的返回值把字符串喂给分词器,再返回的新的位置。一开始用的是 nodejieba ,但是因为需要用到 node-gyp 遇到了 Node 版本不兼容的问题,于是换了一个纯 Node 的实现 node-segment ,就完成了这个功能。

Read More

Grafana 中可视化 Ping 时把 Timeout 显示为指定值

刚遇到一个需求,就是用 Telegraf 收集 ping 信息,然后在 Grafana 里可视化当前的延迟,如果超时了,就显示一个指定值,如 999 ,这样就可以放到一个 Gauge 里面可视化了。但是,问题在于,Telegraf 的 ping input 在超时的时候只会在 result_code 里写一个 2 ,其他项都是空的,因而如果直接用 GROUP BY time(interval) fill(999) 会导致最新的一个数据经常得到 999 。这意味着需要根据 “result_code” 来进行区分 Timeout 的情况。最后捣腾了很久,得到了这个方案: select "average_response_ms" * (2 - "result_code") / 2 + "result_code" / 2 * 999 from (select "average_response_ms", "result_code" from ping where $timeFilter fill(0)) 最后的方法很粗糙:当 “result_code” 是 0 也就是成功的时候,得到延迟,而当 “result_code” 是 2 也就是超时的时候,直接得到 999 。这样就解决了这个问题。

Read More

每周分享第 6 期

今天刚迁移了域名到 jiege.ch ,原来的 jiegec.me 会自动跳转过来,链接什么的都不用变。 Rust 的 cfg! 宏只是返回 bool 而不会影响内部是否被编译 如果需要 if constexpr 的效果需要用 cfg-if 基于 HTML5 canvas 的图表库 Chart.js Endianness MATTERS! – Harry Chen 各数据库的带补全的 CLI https://www.dbcli.com/ 边开发边测试 k8s 部署 tilt Github unlimited free private repos 于是称为了 PRO 用户 https://blog.github.com/2019-01-07-new-year-new-github/ Github 美食博主还行 https://github.com/hendricius/pizza-dough 一个用于本地化的库 https://github.com/dustin/go-humanize Vim Verilog 补全 https://github.com/vhda/verilog_systemverilog.vim homebridge 网页前端 https://github.com/oznu/homebridge-config-ui-x Zigbee 2 MQTT Bridge 需要额外的设备 https://github.com/Koenkk/zigbee2mqtt gdb 的网页 gui https://github.com/cs01/gdbgui Rust 一键 par iter https://github.com/rayon-rs/rayon 挺好看的 hex viewer https://github.

Read More

调整 Alacritty 的 Powerline 字体显示偏移

今天体验了一下 Alacritty ,以前一直在用 iTerm2 ,但是它的高级功能我都没用到。于是现在用了下 Alacritty ,把 Solarized Dark 配置了,发现 Inconsolata for Powerline 字体显示有点偏差,于是调整了一下: # Font configuration (changes require restart) font: # Normal (roman) font face normal: family: Inconsolata for Powerline # The `style` can be specified to pick a specific face. #style: Regular # Bold font face bold: family: Inconsolata for Powerline # The `style` can be specified to pick a specific face. #style: Bold # Italic font face italic: family: Inconsolata for Powerline # The `style` can be specified to pick a specific face.

Read More

Grafana Variable 的 regex 过滤方式

用 InfluxDB 收集到 Mountpoint 数据的时候,经常会掺杂一些不关心的,如 TimeMachine ,KSInstallAction 和 AppTranslocation 等等。所以,为了在 Variables 里过滤掉他们,需要用 Regex 进行处理。网上有人提供了方案,就是通过 Negative Lookahead 实现: /^(?!.*TimeMachine)(?!.*KSInstallAction)(?!.*\/private)/ 这样就可以把不想看到的这些 mountpoint 隐藏,节省页面空间了。当然了,这里其实也可以用白名单的方法进行处理,直接写 regex 就可以了。

Read More

Rust 获取 Linker Script 中的地址

在 Linker Script 中可以记录下一个地址到一个变量中,大概这样: .text: { PROVIDE(__text_start = .); *(.text .text.* .gnu.linkonce.t*) PROVIDE(__text_end = .); } 这里的 PROVIDE() 是可选的。这样,代码里就可以获取到 .text 段的地址了。在 C 中,直接 extern 一个同名的变量就可以了,但在 Rust 中,需要这样获取: extern "C" { fn __text_start(); fn __text_end(); } // __text_start as usize // __text_end as usize 这样就可以拿到地址了。

Read More

每周分享第 5 期

2019 年第一篇博文,祝大家新年快乐。最近忙于期末,没怎么搞事情,所以暂时没有关于别的内容的博文。 发现一个很好看的 http web server index 就是不再更新了 h5ai 录制 DOM 变化并且重放 rrweb C++ 中的 Lazy Sequence 实现 lazyCode 来自 Berrysoft 的 Windows UWP 校园网认证解决方案 TsinghuaNetUWP 中科大老运维的笔记 ITTS Go 源码研究电子书 目测还在编写,不过读来挺有收获的 go-under-the-hood 第一次了解到 ELF Aux Vectors auxv 发现了 C99 的参数列表里 static 数组大小语法 static array indicies 发现一个有趣的包装了 socket 的消息库 支持一些消息分发方法 nanomsg 找到一个可视化 YUV 和视频解码的一些内部信息的工具 YUVView 通过动态 QRCode 传输数据 txqr qr-transfer 发现一些很好看的 CSS 动画 10-stunning-css-3d-effect-must-see 其中最神奇也最复杂的是 这个 Android runtime 中动态获取权限的库 Dexter 来自 Berrysoft 的 Stream operators in C++ CppLinq Squirrel (Rime for macOS) 在两年以后终于出了 0.

Read More