文章

通过RSS订阅我的博客

  • 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"...
  • 每周分享第 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 部署...
  • 域名已经迁移到 jiege.ch

    从买新域名到迁移大概用了一个多小时,现在已经恢复访问。原有的地址也会直接 301 到新的域名上来。 仍然 Host 在 Github Pages 上。还会继续更新,不会跑路的(逃
  • 调整 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 #...
  • Grafana Variable 的 regex 过滤方式

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

    2019 年第一篇博文,祝大家新年快乐。最近忙于期末,没怎么搞事情,所以暂时没有关于别的内容的博文。 发现一个很好看的 http web server index 就是不再更新了 h5ai 录制 DOM 变化并且重放 rrweb C++ 中的 Lazy Sequence 实现 lazyCode 来自 Berrysoft 的 Windows UWP 校园网认证解决方案 TsinghuaNetUWP 中科大老运维的笔记 ITTS Go 源码研究电子书 目测还在编写,不过读来挺有收获的 go-under-the-hood...
  • 每周分享第 4 期

    咕了更长的时间。 Header only JIT assembler https://github.com/herumi/xbyak 想找个时间玩玩 JIT Rust 实现的 Babel 转译 https://github.com/swc-project/swc 又一个瀑布流实现 https://github.com/e-oj/Magic-Grid 马上可以体验 HTTP/3 的库 https://github.com/djc/quinn Logitech Spotlight Presentation 挺好用的 配套软件的安装过程和使用都挺好的 Server side canvas https://github.com/Automattic/node-canvas 边看 youtube tutorial 边写代码...
  • 《加速奔向2019》小程序编写和运营回顾

    前言 关注清华的同学可能知道,昨天,“清华大学”公众号发了一篇名为《2018,我们共芳华丨@THUers 致相伴一年的你,请查收这份心意》的推送,内容大概就是,有那么100个新年台历礼品要送出去,大家如果想要的话,就扫描小程序。小程序模仿了火车抢票的病毒式营销的模式,要求大家分享到群聊或者朋友圈,让别人给自己加速,加速到 2019 的前 100 名即可填写信息领取奖品。 然后大家就在推送里看到了我。就酱。 开始 这件事情据说策划了有一段时间了,只是因为各种原因一直没有做,最后这个锅就路由到了我的头上。一开始说就是个加速小程序,逻辑很简单,但后来逐渐发现需求越来越多,主要是界面上的,动画上的,还有一些非技术因素的功能,嗯。这其实算是一个不大好的软件工程案例。 过程 线上的问题与解决方案 然后就是上线了。大概是昨天(2018-12-27)中午的时候推送发出去,很快流量就开始来了。很快,在朋友圈看到有同学在转发了,也有人反映说,网络有点卡,加载资源有点多。我去机器上用 iftop 看了下,流量大概是 250Mb/s ,没打到千兆。我一开始看了下,CPU 和内存占用都良好,以为是网络出口限制的问题,就想着没办法了,就这样吧,扛过去再说。不过,忽然有了转机。 TUNA 技术群里,忽然有人在讨论 SOMAXCONN 的问题,我想到,会不会是有些参数没开够大,导致了性能瓶颈,又受到啊荣的点拨,立马调整了这些变量: net.core.somaxconn fs.file-max net.core.netdev_max_backlog net.ipv4.tcp_max_syn_backlog nginx: worker_rlimit_nofile nginx: event.worker_connections 很快带宽从 200Mb/s...
  • 每周分享第 3 期

    因为 DDL ,咕了一小会。 被 Windows 保存为 Unicode 文件坑了 BOM 配上 UTF-16 太难受了 Github 最近添加了很多 Issue 方面的更新,如 Pin 和 Delete Grafana 真的很好看很好用 推荐大家自己配一套监控系统 Microsoft Remote Desktop Beta 新增了 AVC Codec 有意思 不知道啥时候上 HEVC...
  • 每周分享第 2 期

    继续,继续。 用代码呈现硬件实现对性能的影响,值得一读 链接 发现了一个蛮少见的编码标准 AVS2 ,才发现是中国主导的 编码器 linux.org 的 DNS 被篡改了,认准 kernel.org 即可 一个处理器的电路的在线可视化 ARM1 visualized WASM 家庭现已加入 Nginx 链接 用 .bat 编写汇编语言 mnnip/BOOTSTRA Gitlab 挺香的,兹瓷 git-lfs ,还可以自己给自己的项目配一个 ci runner LaTeX 的...
  • 配置 homebridge-mi-aqara 并添加为 telegraf 的数据源

    最近有了设备,想把设备拿到的数据都导一份存到 influxdb 里,但是目前找到的只有 homebridge-mi-aqara 可以访问并拿到数据,然后它又提供了 mqtt 的数据获取方案,于是自己写了个脚本去读取这些数据。 首先当然是配置一下 homebridge-mi-aqara ,按照网上的教程来,这个不难。然后本地开一个 MQTT Broker (如 mosquitto ),配置为本地监听,然后我编写了脚本 telegraf-mi-aqara.py ,使用前需要 pip install paho-mqtt,并且按照实际路径修改一下内容 。验证能够跑起来后,写一个 telegraf 配置: [[inputs.exec]] commands = ["/usr/bin/python3 /path/to/telegraf-mi-aqara.py"] timeout = "5s" data_format...
  • Grafana 可视化实践:清华大学 2018 年度人物评选

    最近这段时间,清华内部正在投票选出今年的年度人物,想到最近刚好在学习使用 Grafana+InfluxDB+Telegraf 全家桶,于是想着能不能写个爬虫把数据都拿下来,然后用 Grafana 画出来,就可以得到一个投票随时间变化的趋势。爬虫很简单,就是登录,获取页面信息,然后按照 InfluxDB 的输入格式进行输出即可。代码放在了 jiegec/student-tsinghua-vote18 下。 接着就是用 Grafana 进行可视化,大概得到了这样一个曲线: 为保护隐私,把名字隐去了。实际上的投票时间是从 12-3 号开始到 12-7号结束,但由于宿舍停电的原因所以采样的点在半夜的时候都没有,所以看起来有点奇怪,但还是能够反应总体的趋势的。比如可以看到前两名很早就一马当先,而后一直遥遥领先,下面的选手则排名变动很大,特别是截止前最后一段时间,大家都在拼命拉票,可见大家都是 DDL 选手啊。如果对上面这个图求个导,看看变化率的话: 这显现出了很有意思的一个趋势,就是每天十二点左右都有一个高峰期,然后在零点前大概熄灯附近的时间也是一个高峰期,另外就是截止前最后的抢票阶段,大家都在疯狂拉票,从中午拉到最后时刻。由于停电的原因,在零点附近的数据都比较的鬼畜,不过影响不大,趋势一目了然。 Grafana 真香!期望可以学到更多高端的查询语法和可视化的骚操作,现在有很多东西不知道该怎么可视化,比较苦恼,不知道大家有没有什么经验可以分享。
  • 每周分享第 1 期

    向阮一峰学习,把自己在一周里看到的有趣的事情分享一下。不过形式就比较随意了。 最近写 MongoDB + NodeJS 学到的新操作:$addToSet $nin $ne Mongoose 的 setDefaultsOnInsert Promise 真香,真好用 几天前惠老师还在说 “IE, The best Chrome Downloader Downloader, ever” 今天 EdgeHTML 就宣告死亡了 WPF, Windows Forms 和 WinUI 开源了,mono 这是要凉? 链接...
  • 编写 010 Editor 的 FLV Template

    最近在做 FLV 和 H264 方面的研究,研究了很多标准和文档,然后用 010 Editor 对着文件进行分析。这个软件真的很好用,对研究二进制结构用处特别大。不过它自带的 FLV.bt 功能不是很好,我对它加上了 H264(AVC) 的部分支持,放在了 myFLV.bt 里。我也写了 H264 的解析,不过效率不高,大文件要卡好一会。 除此之外,很多格式,010 editor 都有支持,特别好用,它的解析器语法也很好写。
  • 配置 Grafana+InfluxDB+Telegraf 并添加 MIIO 数据来源

    之前一直想配一个监控系统,现在有机会了,就简单配了一下。发现真的特别简单,用 Homebrew 安装这三个软件并且都跑起来,然后稍微动一下配置,就可以得到可观的效果了。 然后想利用 miio 配置一下,把宿舍的空气净化器各项参数拿到,以 Telegraf 的插件形式定时上报,然后通过 Grafana 进行可视化。插件放在了 jiegec/tools 下,就是一个简单的 Python 脚本。配置方法如下: 编辑 /usr/local/etc/telegraf.d/miio.conf: [[inputs.exec]] commands = ["/usr/local/bin/python3 /Volumes/Data/tools/telegraf/miio.py MIID_HERE"] timeout = "5s" data_format = "influx" 默认了 miio 路径为 /usr/local/bin/miio...
  • 强制启用 Google Chrome 原生的 Dark Mode

    Mojave 的 Dark Mode 真香,但是 Google Chrome 并不会随着系统的 Dark Mode 设置变化,所以 NightOwl 只能让部分软件按照时间变更 Dark/Light Mode 。一番搜索,发现其实 Google Chrome 其实已经支持了 Dark Mode,但只能设置,不能按照系统的状态自动切换,命令如下: $ open -a Google\ Chrome --args --force-dark-mode 然后就可以看到 Google Chrome 已经是...
  • Mac 上安装 Arch Linux , ZFS 真香

    最近在 Mac 上装了 Arch Linux ,按照 Mac - Arch Linux Wiki 一路一路走,创建单独的一个 EFI 分区给 Arch Linux 放 GRUB 和内核,一个 ext4 作为根分区。由于 Arch ISO 不支持 Broadcom 的无线网卡,于是先拿 Apple Ethernet Adapter 连到路由器上装机。然后把一些需要的驱动装上了,桌面用的 KDE Plasma...
  • USB/IP 实践

    之前一直想玩 USB/IP ,但是一直没有找俩 Linux 设备然后共享,今天终于尝试了一下,没有什么大问题。这次采用的设备是 Raspberri Pi 3 和 SaltedFish Pi 。一开始尝试从后者向前者共享,但总是出现这个错误: libusbip: error: udev_device_get_sysattr_value failed usbip: error: open vhci_driver 然后我反过来做就好了,比较神奇。 主要过程如下: pacman -S usbip 安装用户态软件 systemctl enable --now usbipd 启动 USB/IP...
  • 超过 100 篇博文了!

    今天看了下,发现算上这一篇,这个博客已经有 103 篇文章了,这个数量还是蛮多的,特此庆祝一下。我也顺带做了一下简单的数据处理,得到这么一张图: 目测数量与干活的频率相关性很高啊。