Metabase 指南

前言 Metabase 安装, 参考这里。 Metabase 是一个 “商业智能”(BI)平台,它为您提供了大量了解和共享数据的工具。(原文) Metabase 的核心作用: 数据可视化: Metabase 提供了丰富的图表和可视化工具,帮助用户 将数据转换为图表和图形。 数据分析: 用户可以使用 Metabase 进行数据分析,包括筛选、排序、聚合和计算等操作。 数据共享: Metabase 允许用户将分析结果分享给其他用户,以便团队成员之间进行合作和沟通。 数据权限管理: Metabase 提供了灵活的权限管理功能,用户可以根据需要设置数据的访问权限,确保数据的安全性和隐私性。 我最近用到 Metabase, 是因为 账单管理系统 内部没有实现 账单数据解析功能, 只能用 Metabase 连接数据库做分析。 项目地址 下面是我使用 Metabase 的一些经验。 简介 核心概念: 数据库: Metabase 连接到数据库,用户可以在 Metabase 中查询和分析数据库中的数据。 Collection: 用于组织和管理数据集, 可以把 dashboard, question, model 放在 collection 中, 可以把 collection 理解为文件夹。 Question: 查询数据, 有两种类型: graphical query builder(Metabase 提供的查询方式) 和 native query editor(原生SQL查询方式)。 Dashboard(看板): 可以在看板中添加图表、表格、指标等元素,以展示数据的趋势、分布、对比等信息。 Model: 相当于 数据库中的 视图。 主页示例: ...

2025年09月09日

NGINX 指南

简介 nginx 安装方法 参考 Installing nginx。 nginx 是一个高性能的 HTTP 和 反向代理服务器(Reverse Proxy Server),也可以做 IMAP/POP3/SMTP 代理服务器。 nginx 作用: 作为 HTTP 服务器,处理静态资源请求。比如 博客网站静态文件, 前端项目打包后的文件, 图片、视频等文件。 作为 反向代理服务器, 将客户端请求 转发到后端服务,并将后端服务器的响应返回给客户端。 反向代理服务器 处理的一般也是 HTTP 请求。本文不严格区分 HTTP 服务器 和 反向代理服务器。 什么是 HTTP 服务器? HTTP 服务器 (HTTP Server) 是一种 提供网页内容服务的程序, 它基于 HTTP (HyperText Transfer Protocol, 超文本传输协议) 来处理客户端(通常是浏览器)的请求, 并返回响应。 HTTP 服务器的基本工作流程: 监听端口 HTTP 服务器通常监听 80 (HTTP) 或 443 (HTTPS) 端口。 接收请求 客户端(如浏览器、移动端)通过 URL 发送 HTTP 请求, 服务器接收请求报文。 请求内容包括方法 (GET、POST、PUT、DELETE 等)、路径、请求头和请求体。 处理请求 HTTP 服务器根据请求内容找到对应的资源 (如 HTML、图片、API 接口程序), 或把请求转发给 后端应用程序 (这就是反向代理的功能)。 返回响应 HTTP 服务器生成 HTTP 响应报文 (状态码、响应头、响应体), 发送给客户端。 浏览器再把响应内容渲染出来。 nginx 进程模型 nginx 有 一个主进程(master process) 和 多个工作进程(worker process)。 master 进程 的主要作用是 读取和解析 nginx 配置文件, 并维护工作进程。 worker 进程 的主要作用是 处理实际的请求。 ...

2025年09月08日

Python-进阶篇

类与对象 类与对象 类 (Class): 模板,定义属性和方法。 对象 (Object): 类的实例 (Instance)。 # 定义类 class Person: """简单类示例""" species = "人类" # 类变量 def __init__(self, name: str, age: int): self.name = name # 实例变量 self.age = age def greet(self) -> str: # 实例方法 return f"Hi, I'm {self.name}, {self.age} years old." # 创建对象 p = Person("Alice", 30) print(p.greet()) # Hi, I'm Alice, 30 years old. print(Person.species) # 人类 要点: __init__ 是 初始化方法, 在实例创建后被调用。 self 表示当前对象的引用(self虽不是关键字, 但约定俗成), 用来访问对象的属性和方法。方法调用时 Python 自动传入,不需要手动写。 类变量 在所有实例间共享, 实例变量是每个实例独有的。 实例变量/类变量/私有变量 实例变量 (Instance Variables): 属于特定实例(对象)的变量,每个实例都拥有自己独立的一份副本。 特点: 在 __init__ 构造函数 或 其他实例方法中 通过 self.变量名 定义 每个对象的 实例变量值 可以不同 类变量 (Class Variables): 属于类本身的变量,被所有实例共享。 特点: ...

2025年09月01日

Python-入门篇

变量 变量就是 存储数据的容器,用一个名字指向一块内存中的值。 在 Python 中,变量本质上是 对象的引用。 变量命名规则: 只能包含 字母、数字、下划线, 不能以数字开头 不能是 关键字 区分大小写 推荐命名规范(PEP8): snake_case(变量名小写,单词之间用下划线隔开) 用于 变量、函数、方法、模块。 PascalCase 专门用于 类名。 示例: 标识符类型 示例 变量名 user_name, is_valid 函数名 calculate_total(), get_user_data() 方法名 class_instance.update_status() 模块名 my_module.py, data_processor.py 包名 package_name 类名 HttpRequest, User 常用的内置数据类型 Python 中 常用的内置数据类型: 数据类型 中文名 示例 int 整型 10 float 浮点型 3.14 bool 布尔型 True str 字符串 “hello word” NoneType 空类型 None list 列表 [1, 2, 3] tuple 元组 (1, 2, 3) set 集合 {1, 2, 3} dict 字典 {“key”: “value”} Python 是 动态类型语言,不需要显式声明变量类型,解释器会根据赋值自动推断类型。 示例: ...

2025年08月31日

文件双向同步

前言 最近公司做双活, 一套应用部署在异地的两个机房, 其中, 存放归档文件的 nas 也是两套, 两套 nas 需要双向同步. 如果是 单向数据同步 的话, 有两种方法: 方法 1: 可以采用 inotify + rsync 实现. 实现示例 方法 2: 也可以用 lsyncd 实现, lsyncd 封装了 inotify + rsync, 本质上和 方法1 一样. rsync 是专门做单向同步(从源同步到目标)的, 但是不具备 冲突检测 和 变更协调的能力, 因此不能做 双向数据同步. 经过一番搜索, 我找到一个可以 实现双向数据同步的工具 — Syncthing. Syncthing 是一个开源的 文件同步工具。它能在两台或多台计算机之间实时同步文件,并安全地防止他人窥探。 这篇文章介绍一下 Syncthing 的使用. 介绍 Syncthing 中有两个术语: (device)设备 和 文件夹(folder). 设备 就是安装了 Syncthing 程序的计算机, 设备 分为: 本地设备(local device) 远程设备(remote device) Syncthing 会给每个 设备 分配一个 设备ID, 我们可以把 本地设备 和 远程设备 通过 设备ID 建立双向连接. ...

2025年08月30日

Linux 文本处理之 sed

sed (Stream Editor, 流编辑器) 是 Linux 中的 文本处理工具, 常用于对文本进行 查找、替换、删除、插入、提取等批处理操作。 基本语法: sed [选项] '命令' 文件 # 或者: 命令 | sed [选项] '命令' 常用选项: 选项 说明 -n 默认 sed 会打印所有行, 使用 -n 后只会输出符合条件或被命令处理的行 -e 用于指定多条命令 -i 直接修改源文件(慎用, 建议先备份) -r 启用扩展正则表达式 (也可以用 -E) -f 从文件中读取 sed 命令 常用命令: 命令 说明 p 打印 d 删除 s/old/new/ 查找并替换 a\text 在当前行后追加一行 i\text 在当前行前插入一行 c\text 替换当前行内容 = 打印当前行号 q 处理到此行后退出 常见用法示例 打印文本 # 打印所有行: sed '' file.txt 打印匹配到 error 的行: sed -n '/error/p' file.txt # 只打印第 2 行: sed -n '2p' file.txt # 打印第 2 到第 4 行: sed -n '2,4p' file.txt 查找并替换 # 只替换每行的第一个匹配: sed 's/error/warning/' file.txt # 替换每行所有匹配: sed 's/error/warning/g' file.txt # 忽略大小写替换: sed 's/error/warning/gi' file.txt # 如果文本中有特殊字符, 如 /, 换分隔符: sed 's|/usr/local|/opt|g' file.txt # 使用变量: word="error" sed "s/$word/warning/g" file.txt # 替换并直接修改文件: sed -i 's/error/warning/g' file.txt # 直接修改文件并备份: sed -i.bak 's/error/warning/g' file.txt # 正则, 替换数字为 X: sed 's/[0-9]/X/g' file.txt 删除文本 # 删除第 2 行: sed '2d' file.txt # 删除第 2 到第 4 行: sed '2,4d' file.txt # 删除匹配 debug 的行: sed '/debug/d' file.txt # 删除所有空行: sed '/^$/d' file.txt # 删除以 # 开头的注释行: sed '/^#/d' file.txt 插入、追加、替换 # 在第 2 行前插入一行: sed '2i\This is a new line' file.txt # 在第 3 行后追加一行: sed '3a\Another new line' file.txt # 把第 2 行替换成新的内容: sed '2c\This line is replaced' file.txt

2025年08月22日

Linux 文本处理之 awk

引例 有个 1.txt 文件, 内容如下: 1755741361|文件1|事件1 1755741374|文件1|事件2 1755741385|文件2|事件3 第一个字段是时间戳, 在查看这个文件时为了看清时间, 需要把时间戳转为字符串: while IFS='|' read ts rest; do echo "$(date -d @$ts '+%Y-%m-%d %H:%M:%S')|$rest"; done < 1.txt 结果: 2025-08-21 09:56:01|文件1|事件1 2025-08-21 09:56:14|文件1|事件2 2025-08-21 09:56:25|文件2|事件3 用 awk 也可以实现一样的效果, 代码更简洁: awk -F'|' '{ OFS="|"; $1 = strftime("%Y-%m-%d %H:%M:%S", $1); print }' 1.txt awk 简介 awk 是 Linux 文本处理三剑客之一(grep, awk, sed)擅长 按行按列 处理数据。 awk 是一个 文本处理工具,也是一门轻量的脚本语言。 主要功能: 按行处理文本,按列处理数据。 使用场景: 日志分析、数据转换/提取等。 基本语法: awk 'pattern { action }' file pattern:模式,用来匹配哪些行需要处理. 省略 pattern 时, 所有行都执行动作 action:动作,告诉 awk 对匹配的行要做什么. 省略 action 时, 默认动作是 print $0(打印整行) ...

2025年08月21日

Linux: 运维篇

前两天写了 “Linux: shell 脚本篇”, 其中不涉及运维相关的内容, 因此新写了 “Linux: 运维篇” 作为补充. 磁盘与文件信息 df 命令 (disk free) df - 查看磁盘分区的空间使用情况 df -h # 参数说明: # -h 以人类可读的方式显示 (自动用 KB/MB/GB) # -T 显示文件系统类型 # -i 查看 inode 使用情况 (避免 inode 用完导致无法写入) du 命令 (disk usage) du - 查看目录或文件所占空间 du [选项] [文件/目录] 注意: du 显示的是磁盘实际占用大小, 可能和 ls -l 显示的文件大小不同, 因为磁盘按块分配空间 (即使文件很小也会占一个块) 常用参数: 参数 含义 示例 -h 以人类可读方式显示 (KB/MB/GB) du -h /var/log -s 只显示总计 (summary), 不递归 du -sh /var/log -a 显示目录和文件的大小 du -ah /var/log –max-depth=N 限制目录递归深度 du -h –max-depth=1 /var -c 显示总计 (最后一行 total) du -ch /var/log 常用组合: ...

2025年08月13日

Linux: shell 脚本篇

平时写 Java, Python, 甚至一些前端代码. 但最近工作上要写 shell 脚本, 发现有些生疏了, 这篇文章记录一些基本的 shell 脚本写法, 偶尔翻翻, 加深记忆. 因为此文目的是复习 常用的 shell 脚本写法, 所以文中不会很细节. set -euo pipefail set -euo pipefail 是三个 set 选项组合在一起,用来让脚本执行时更严格、更安全。 set -e 作用: 当任何命令返回 非零状态码(执行失败) 时,立刻退出整个脚本。 默认情况下,Bash 脚本就算中间某个命令失败,也会继续执行。 set -u 作用: 当脚本中使用未定义的变量时,立即报错并退出。 默认情况下,使用未定义变量会被当成空字符串处理,不会报错。 set -o pipefail 作用: 让管道 (|) 命令在任意一环节失败时,都返回失败状态码。 默认情况下,管道命令的返回值是最后一个命令的返回值。 如果前面命令失败,但最后一个命令成功,脚本也会认为成功,这是有风险的。 开启 pipefail 后,管道中只要有一个命令失败,整个管道就会被视为失败。 控制语句 条件判断(if/else) if [ 条件表达式 ]; then 命令 elif [ 条件表达式 ]; then 命令 else 命令 fi 例子: #!/bin/bash num=5 if [ $num -gt 10 ]; then echo "大于10" elif [ $num -eq 10 ]; then echo "等于10" else echo "小于10" fi 函数返回值: ...

2025年08月11日
图片描述

聊聊 AI 编程 - Cursor

1. 前言 Cursor 发展简介[1] 时间 说明 2023 年 Anysphere 发布了 公开测试版 的 Cursor 2024 年 因为其智能的代码生成和补全, Cursor 在编程领域 火爆全球 2025 年 4 月 15 发布 Cursor 0.49, 这是官网 Changelog 给出的最早版本 2025 年 6 月 4 发布 Cursor 1.0, 支持: BugBot 代码审查, 记忆 Beta, 一键安装 MCP 等等 2025 年 7 月 3 发布 Cursor 1.2, 目前最新版本 今年 2 月, Anthropic 发布的 AI 编程命令行工具 - Claude Code, 最近十分流行, 网上很多人表示 Claude Code 比 Cursor 更香. ...

2025年07月08日
图片描述

Agent TARS 和 UI TARS 的使用体验

前言 前两天在 字节跳动 的公众号上看到一篇 基于 UI-TARS 的 Computer Use 实现 的文章. 看 demo 感觉和今年年初发布的 Manus 一样, 也是一个通用的 AI agent. 不过 UI-TARS-desktop 是 开源 的. TARS* 目前包括两个项目:Agent TARS 和 UI-TARS Desktop: Agent TARS 是一个 GUI Agent, 运行时会启动一个本地服务, 能通过浏览器访问, 提供了访问 本地终端, 浏览器, 本地文件 的能力. UI-TARS Desktop 是一个提供了 native GUI Agent 能力的桌面应用. 它可以像人类一下操作电脑(鼠标, 键盘). 安装方法在github和官网有详细说明, 下面直接开测. 测试 Agent TARS Agent TARS 目前只支持 3 种模型: 字节跳动的 Seed1.5-VL(doubao-1-5-thinking-vision-pro-250428) Claude 3.7 Sonnet GPT-4o 我用 豆包模型 进行测试. 浏览器使用(Browser Use) 测试一 提示词: ...

2025年07月07日