每周分享第 10 期

新年快乐! Haskell to WASM compiler https://github.com/tweag/asterius A ssh tarpit that sends endless banner https://github.com/skeeto/endlessh Use rust to write UEFI app https://github.com/rust-osdev/uefi-rs 神奇的小游戏 https://yeahpython.github.io/game/game.html 又一个后端 rust web 框架 https://github.com/seanmonstar/warp 挺酷的一个网站 https://github.com/pomber/github-history ws 调试工具 https://github.com/vi/websocat React Hooks 进入正式版 https://reactjs.org/blog/2019/02/06/react-v16.8.0.html 又一个关于硬件的 wiki https://wikidevi.com/wiki/Main_Page virtio-fs 项目 旨在替代 virtio-9p https://virtio-fs.gitlab.io/ SergioBenitez 镜像了一份去年的 CS140e https://cs140e.sergio.bz/

Read More

每周分享第 9 期

IDA Loader plugin for some Nintendo rom https://github.com/w4kfu/IDA_loader websocket daemon http://websocketd.com/ 实时的游戏开发器 https://script-8.github.io/ 硬核逆向 Leica 相机的固件 https://alexhude.github.io/2019/01/24/hacking-leica-m240.html 做 CTF 时遇到的整数溢出的 CVE https://www.anquanke.com/post/id/104182 发现一个 speedtest 的轮子 https://github.com/adolfintel/speedtest 西数的 RISCV 核实现 https://github.com/westerndigitalcorporation/swerv_eh1 iOS 12.2 会有更多的 PWA 兹瓷 https://twitter.com/mhartington/status/1089292031548145666 代替死去的 git-up: git config –global alias.up ‘pull –rebase –autostash’ 利用已知明文破解旧版加密 zip 的工具 https://github.com/kimci86/bkcrack 在线看 jwt 内容 https://jwt.io/ JS 的 Lua VM https://github.com/fengari-lua/fengari 鲁棒但不优雅的前端 KV https://github.com/gruns/ImmortalDB Emacs Modules doc https://phst.eu/emacs-modules 用 IPv6 的 Flow Label 实现类似 MPLS 的效果 https://github.

Read More

使用 Rust 实现 VirtIO 驱动

背景 最近在给 rCore 添加驱动层的支持。一开始是想做网卡驱动,后来发现, qemu-system-riscv32 只支持如下的驱动: # qemu-system-riscv32 -device help Storage devices: name "scsi-cd", bus SCSI, desc "virtual SCSI CD-ROM" name "scsi-disk", bus SCSI, desc "virtual SCSI disk or CD-ROM (legacy)" name "scsi-hd", bus SCSI, desc "virtual SCSI disk" name "virtio-blk-device", bus virtio-bus name "virtio-scsi-device", bus virtio-bus Network devices: name "virtio-net-device", bus virtio-bus Input devices: name "virtconsole", bus virtio-serial-bus name "virtio-keyboard-device", bus virtio-bus name "virtio-mouse-device", bus virtio-bus name "virtio-serial-device", bus virtio-bus name "virtio-tablet-device", bus virtio-bus name "virtserialport", bus virtio-serial-bus Display devices: name "virtio-gpu-device", bus virtio-bus Misc devices: name "loader", desc "Generic Loader" name "virtio-balloon-device", bus virtio-bus name "virtio-crypto-device", bus virtio-bus name "virtio-rng-device", bus virtio-bus 所以要实现网卡的话,只能实现这里的 virtio-net-device ,而 VirtIO 驱动之间有很多共通的地方,于是顺带把 gpu mouse 和 blk 实现了。

Read More

THUWC 2019 小记

前段时间,以工作人员的身份参加了在广州二中举办的 THUWC 2019 。作为一只菜鸡 OI 选手,我没想到过我会以另一种身份参与一个我本来没能参与的活动,就好像以暑校辅导员的身份参与清华暑校一样。 提早来到了赛场,布置场地,然后把机考的各个流程都过一遍,记住各个细节,各方面都有条不紊地进行,看着第一场前同学们特别激动地冲入考场,到最后一场同学们考完后的释放,在同学们身上看到了很多不成熟的样子,看到了兴奋想要和同伴分享的喜悦,也看到了不甘的眼泪。 希望各位强大的选手们可以来到九字班、零字班乃至一字班,享受课改的乐趣吧嘿嘿嘿

Read More

每周分享第 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