前端解析上传的 CSV

之前做过一个在前端解析上传的 CSV 的功能,但是只能支持部分的 encoding,遇到 gbk 就傻眼了。一番研究以后,找到了比较科学的方案: import * as Chardet from 'chardet'; import * as Iconv from 'iconv-lite'; const reader = new FileReader(); reader.onload = (e) => { const data = e.target.result; const view = Buffer.from(data); // detect encoding and convert const encoding = Chardet.detect(view); const result = Iconv.decode(view, encoding); const csvData = Papa.parse(result).data; // do anything with it }; reader.readAsArrayBuffer(blob_here); 依赖了两个库:chardet 和 iconv-lite ,测试了一下,解析 UTF-8 GBK UTF-16BE 都没问题。

Read More

每周分享第 32 期

Rpi4 的 Type-C 设计有问题 https://readhacker.news/s/45WYc Debian buster released USB Type-C Serial adapter with WCH/FTDI https://github.com/z4yx/USB-C-Serial Linux 5.2 Kernel released http://www.phoronix.com/scan.php?page=news_item&px=Linux-5.2-Released iOS/iPadOS PB2 发布,与 DB3 差了一个小版本号 Pacman in 512 bytes of x86 boot sector machine code https://readhacker.news/s/466Zm clang 的 use after move checker 使用 https://awesomekling.github.io/Catching-use-after-move-bugs-with-Clang-consumed-annotations/

Read More

每周分享第 31 期

一个 Docker 的 TUI https://github.com/jesseduffield/lazydocker 在线 Git cheatsheet http://ndpsoftware.com/git-cheatsheet.html 带历史合并两个 Git 仓库 https://stackoverflow.com/a/10548919 iOS 13 Dev Beta 3 https://mp.weixin.qq.com/s/6cxLXOYgeP6QkDpa9kdoug iOS 13 FaceTime Attention Correction https://readhacker.news/s/45QX2

Read More

每周分享第 30 期

一个可参考的防止 side channel attack 的方法 https://www.undeadly.org/cgi?action=article;sid=20190621081455 物理上镜像百兆的方法 实测可用 https://greatscottgadgets.com/throwingstar/ 微软员工写的 malloc https://github.com/microsoft/mimalloc 超标量乱序执行的 x86 软核 https://tspace.library.utoronto.ca/bitstream/1807/80713/1/Wong_Henry_T_201711_PhD_thesis.pdf Rust 的 wireshark 替代 https://github.com/kpcyrd/sniffglue Rpi 4 发布 https://readhacker.news/s/45nK9 iOS/macOS Catalina PB1 发布(= DB2) dbg! 移植到了 C++ https://github.com/sharkdp/dbg-macro 类似于 Elm 的 Rust 前端框架 https://github.com/David-OConnor/seed 访问 VMware 虚拟机串口的方法 https://thewayeye.net/2009/december/4/connecting-virtual-machines-serial-console-os-x-and-vmware-fusion/

Read More

IP 前缀转换上意外遇到的 Undefined Behavior

最近发现了两个很神奇的 Undefined Behavior ,出现在 Prefix Len 和 Netmask 的转换的问题下。一个简单思路可能是: #define PREFIX_BIN2DEC(bin) (32 - __builtin_ctz((bin))) #define PREFIX_DEC2BIN(hex) (((~0) >> (32 - (hex))) << (32 - (hex)) 乍一看,似乎没有什么问题。但是,在一些平台下,可能会出现这样的结果: PREFIX_BIN2DEC(0x00000000) = 33 PREFIX_DEC2BIN(0) = 0xFFFFFFFF 而且只能在一些平台上不确定地复现,最后发现其实是 Undefined Behavior,在 C 的标准中: In any case, the behavior is undefined if rhs is negative or is greater or equal the number of bits in the promoted lhs. 意味着, 0xFFFFFFFF >> 32 是一个 UB ,所以出现了上面的问题。

Read More

每周分享第 29 期

ZFS on Linux 发布 0.8.1 https://github.com/zfsonlinux/zfs/releases/tag/zfs-0.8.1 slim: Dockerfile to VM image https://github.com/ottomatica/slim Rust 重写的 du 替代物 确实很快 https://github.com/Byron/dua-cli iOS 13/macOS Catalina beta 2 出了 并且可以 OTA 相关信息 https://9to5mac.com/2019/06/17/ios-13-beta-2-features/ https://developer.apple.com/documentation/macos_release_notes/macos_catalina_10_15_beta_2_release_notes https://mp.weixin.qq.com/s/Ae1SIcK9ho4Mh0g_UsbAyA Steam 已经解决了 Catalina 上 32 位程序不能运行的问题 https://www.reddit.com/r/MacOS/comments/c17lh8/steam_and_macos_catalina 在一些老的 Mac 上 Sidecar 是默认关闭的,但是可以开启 https://github.com/pookjw/SidecarPatcher/blob/master/README.md 虽然效果不会很好

Read More

每周分享第 28 期

Rust Sec https://github.com/RustSec/advisory-db opendrop 开源的 AirDrop 实现 https://github.com/seemoo-lab/opendrop 代码内嵌图片 https://javl.github.io/image2cpp/ RAMBleed 攻击 https://readhacker.news/s/44MHD WSL2 可以体验了 https://devblogs.microsoft.com/commandline/wsl-2-is-now-available-in-windows-insiders/ Rust 2019 生态报告 https://www.jetbrains.com/lp/devecosystem-2019/rust/

Read More

每周分享第 27 期

高考加油! Fallout 漏洞 https://arxiv.org/abs/1905.12701 PageRank 专利到期 https://patents.google.com/patent/US6285999B1/en 终端电量可视化 https://github.com/svartalf/rust-battop 查找 DB 的 DB https://dbdb.io 在 Rust 里写 GPU 程序 https://github.com/calebwin/emu WWDC 2019 挺不错的 Alfred 4 发布 https://www.alfredapp.com/blog/announcements/alfred-4-is-here/ Mac Pro AR https://www.apple.com/105/media/us/mac-pro/2019/36178e80-30fd-441c-9a5b-349c6365bb36/quick-look/case-on.usdz VSCode 稳定版也可以 Remote 了 https://code.visualstudio.com/docs/remote/ssh 2019 高考语文作文 https://mp.weixin.qq.com/s/2NwkbbMlAUJpOKKuln1T4g

Read More

在 FPGA 上实现路由器(3)

前言 又半个月过去了,在写了上篇系列博文之后也是做了很多新的更改。上次做的主要是关于性能方面的提升,怎么提高频率,从而达到比较大的流量,而这段时间做的则是功能,做实现 RIP 协议和转发表的动态更新。 软件部分 软件部分目前是用 C 代码写的,用 Xilinx SDK 提供的各个 AXI 外设的驱动和PS自己的驱动,实现了所需要的,RIP协议的处理,转发表的更新和统计信息的读取。 实际上做的时候比较粗暴,主要是通过三种 AXI 外设与硬件部分进行交互:AXI Stream FIFO,AXI GPIO 和 AXI BRAM Controller 。其中 AXI Stream FIFO 是用来接收和发送需要CPU处理的以太网帧的,AXI GPIO则是用来读取统计的信息,AXI BRAM Controller 是用来读写转发表的。最后在顶层设计中把这些外设连接起来。 硬件部分 硬件部分还是继续之前的部分往下写,添加了统计信息,直接暴露出去,让 CPU 走 AXI GPIO 读,因为不需要很高的精确度;转发表本身,一开始想的是自己写一些接口转换,后来发现,直接用 True Dual Port RAM 然后把一个 port 暴露给 AXI BRAM Controller 即可,免去了各种麻烦,PS可以直接进行修改,不需要额外的工作。 最终效果 为了测试这套东西是否正常工作,就开了两个 Arch Linux 的虚拟机,分别 Bridge 到两个千兆的 USB 网卡上,都连到 FPGA 上。然后在两边都配上了 BIRD ,配置 RIP 和一些路由,确实能更新硬件的转发表,并两边的 RIP 可以学习到对方的路由。

Read More

每周分享第 26 期

Grafana 6.2 发布 https://grafana.com/blog/2019/05/22/grafana-v6.2-released/ Program Synthesis Talk by Paul Zhu https://paulz.me/talk/program-synthesis/ VSCode 摸鱼插件 https://github.com/cteams/Thief-Book 编译期 C++ 计算器 https://www.zhihu.com/question/28582706/answer/691444859 一个在线的 tomasulo 算法实现 https://tomasulo.harrychen.xyz/ Safari Technology Preview 83 发布,含 WebAuthN 支持 https://webkit.org/blog/8967/release-notes-for-safari-technology-preview-83/ Markdown -> 微信 https://github.com/lyricat/wechat-format Rust 的 Code Coverage 库 https://github.com/xd009642/tarpaulin

Read More