惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
量子位
A
Arctic Wolf
L
Lohrmann on Cybersecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
V
Vulnerabilities – Threatpost
博客园 - Franky
C
Cyber Attacks, Cyber Crime and Cyber Security
The Cloudflare Blog
Last Week in AI
Last Week in AI
The Hacker News
The Hacker News
I
Intezer
J
Java Code Geeks
P
Privacy International News Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Secure Thoughts
Cisco Talos Blog
Cisco Talos Blog
阮一峰的网络日志
阮一峰的网络日志
S
Securelist
Security Latest
Security Latest
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
Jina AI
Jina AI
有赞技术团队
有赞技术团队
人人都是产品经理
人人都是产品经理
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
T
The Exploit Database - CXSecurity.com
雷峰网
雷峰网
T
Tenable Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy & Cybersecurity Law Blog
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - 【当耐特】
T
Threat Research - Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
N
News | PayPal Newsroom
Google Online Security Blog
Google Online Security Blog
K
Kaspersky official blog
H
Help Net Security
宝玉的分享
宝玉的分享
罗磊的独立博客
Webroot Blog
Webroot Blog
月光博客
月光博客
B
Blog RSS Feed
Recorded Future
Recorded Future

Bing's Blog

git-cm:在终端里用 LLM 生成 commit message Token Tracker - 追踪 Coding Agent 的 Token 使用情况 AI Coding 工具的实践经验 2025年终总结 行车记录仪视频拼接 生成文章摘要 DMA拼接 Base64压缩 2024年终总结 对ToB和ToC的感受 C++闭包二 轻量级参数解析库-tiny_cmdline C++标签派发技术
二维数据可视化工具-painter
bing · 2024-12-09 · via Bing's Blog

日常开发过程中,时常会遇到一个类似的需求:将某些二维数据可视化。比如,时间与系统内存、时间与CPU、通道与距离等等。

往常我的做法是在代码中嵌入相关的打印,输出到文件中,然后通过其他语言,比如Python解析并可视化,或者直接使用Python解析并可视化。

长期以往,发现这种做法总是写了很多重复的代码。能不能有一个工具,直接输入数据,然后可视化呢?所以,我写了painter

基本原理

恰逢VSCode更新Copilot Edit功能,于是我就用copilot写了这个工具。我仅做少部分修改,然后按照自己的想法一步一步输入需求,大部分代码都是copilot生成的。

painter的大致实现原理是:

使用Flask(老朋友了)作为后端,前端通过SSE与后端通信,持续接收后端发送的数据,然后通过chart.js进行可视化。App在启动Flask时,也会启动另一个Server线程,用于监听用户发送的数据;用户通过nc/ncat之类的工具向App Server对应的Port发送数据,App Server接收到数据、整理后保存到内存,然后Flask的SSE路由会将数据发送给前端。数据统计等工作则是前端完成。

使用

使用方法非常简单,比如先通过pip或pipx下载painter:

1
pipx install git+https://github.com/caibingcheng/painter.git

然后启动app:

最后通过nc/ncat向App Server发送数据,发送格式为x,y1,y2,y3,…,比如:

1
seq 0 0.1 10 | awk '{print $1, $1^2, $1^3}' | ncat localhost 5001

“x,y1,y2,y3,…“格式并非固定的,后端会从每一行中提取数据。

上面的例子可以得到:

https://cdn.jsdelivr.net/gh/caibingcheng/caibingcheng.github.io@assets/static/images/6756f5309c901.webp

上述是简单的示例,在我设想的应用场景下,这些数据是来自程序的日志输出,这个程序可以运行在本机或者其他可以与本级通信的机器上。实时日志一般通过grepawksed等工具处理后,再通过nc/ncat发送给App Server。对于外部的机器,如果无法使用nc,可以使用channle这个工具做数据透传。

比如记录系统内存变化,以检测内存泄漏,输出时间戳和使用内存:

1
while true; do echo $(date +%s) $(free -m | awk 'NR==2{print $3}'); sleep 1; done | ncat localhost 5001

可以得到:

https://cdn.jsdelivr.net/gh/caibingcheng/caibingcheng.github.io@assets/static/images/675704155ea71.webp

(刚刚想到,可以用与来输出一些图形,比如一个爱心,:))

总结

在此之前,似乎只听过chart.js,但是我并不需要对这个库过多了解,也能写下painter这样的小工具;暂且不管代码实现是否优美/合理,至少可以在预期内工作。

在AI时代,如果不以此(比如专业渲染?)为职业,对这些横向的技术所需的知识将会越来越少。要我说,更多还是要基础知识的扩充;比如尽管不了解chart.js,但是我需要了解JavaScript、Python,否则给AI提出的需求可能不完善,或者只能被动接收AI提供的代码,而无法给出更好的建议;如果知识面再扩展一些,你就可以告诉AI,可以使用SSE来实现通信,而不是使用WebSocket或者HTTP轮询等方式;或者告诉他,不要用chart.js,改用其他某个库。

总之,以我目前的体验来看,当前时代,在业余领域,除了基础知识外,横向的宽度将比横向深度更重要(即横向知识,不要过分追求细节)。