Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
wenerme committed Dec 20, 2024
1 parent 00ddd72 commit 180567c
Show file tree
Hide file tree
Showing 39 changed files with 1,502 additions and 77 deletions.
27 changes: 27 additions & 0 deletions justfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[private]
@default:
just --list --justfile {{justfile()}}

# Show git status with color
status:
git add -u && git diff --color=always --staged --stat | tee

# Pull current branch with rebase and autostash
pull:
git pull --rebase --autostash origin `git branch --show-current`

# Install TikZ dependencies
prepare-tikz:
apk add texlive icu-data-full texmf-dist-latexextra texmf-dist-langchinese texmf-dist-pictures
apk add -X http://mirrors.aliyun.com/alpine/edge/testing pdf2svg

# Convert TikZ files to SVG
tikz:
time node ./site/dist/scripts/tikz2svg.js ./notes/courses/cs221/assets/*.tikz

# Optimize SVG files
svgo:
pnpm svgo ./notes/courses/cs221/assets/*.svg

hello name:
@echo "Hello, {{name}} !"
1 change: 1 addition & 0 deletions notes/ai/prompt-awesome.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ tags:
- [PlexPt/awesome-chatgpt-prompts-zh](https://github.com/PlexPt/awesome-chatgpt-prompts-zh)
- ChatGPT 中文调教指南。各种场景使用指南。学习怎么让它听你的话。
- https://prompts.chat/
- https://publicprompts.art/
- temperature
- top_p
- 主题
Expand Down
37 changes: 37 additions & 0 deletions notes/db/relational/mysql/mysql-cookbook.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,40 @@ WHERE
ORDER BY
total_bytes DESC;
```

## analyze_small_tables

```sql
DELIMITER $$

CREATE PROCEDURE analyze_small_tables()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE schema_name VARCHAR(255);
DECLARE table_name VARCHAR(255);
DECLARE cur CURSOR FOR
SELECT table_schema, table_name
FROM table_size
WHERE table_schema not in ('information_schema', 'performance_schema', 'mysql','sys')
AND row_estimate < 10;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;

read_loop: LOOP
FETCH cur INTO schema_name, table_name;
IF done THEN
LEAVE read_loop;
END IF;

SET @stmt = CONCAT('ANALYZE TABLE ', schema_name, '.', table_name);
PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;

CLOSE cur;
END$$

DELIMITER ;
```
167 changes: 161 additions & 6 deletions notes/dev/build/just.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,170 @@ title: just

# just

:::caution
- [casey/just](https://github.com/casey/just)
- CC0-1.0, Rust
- command runner, **不是** 构建工具
- 不需要 make 的 .PHONY
- 不需要 文件依赖管理
- 能接收 命令行参数
- 会加载 .env
- 支持自定义语言的 任务运行
- 能够从子目录执行
- 参考
- Jetbrains [Just](https://plugins.jetbrains.com/plugin/18658-just) 插件
- VSC [Just](https://marketplace.visualstudio.com/items?itemName=nefrob.vscode-just-syntax) 插件
- [nefrob/vscode-just](https://github.com/nefrob/vscode-just)

- 自身功能非常受限
- 不值得投入太多精力去折腾
```bash
brew install just # macOS brew
apk add just # AlpineLinux

:::
just --list
just --list PATH # PATH 支持 :: 分割多个
just --summary # 空格分割的所有 target

- [casey/just](https://github.com/casey/just)
just os=bsd # 修改变量
just --set os bsd

just --choose # 选择 target - 依赖 fzf
# 调用其他目录
(cd foo && just build)
just foo/build
just foo/

just bar::b # 搜索 foo.just, foo/mod.just, foo/justfile, foo/.justfile

just --fmt --check --unstable
just --dump # --dump-format json
just --timestamp recipe --timestamp-format '%H:%M:%S%.3f %Z' # strftime
```

## justfile

- justfile, .justfile
- global - `just --global-justfile`, `just -g`
- $XDG_CONFIG_HOME/just/justfile
- $HOME/.config/just/justfile
- $HOME/justfile
- $HOME/.justfile

| opt | for |
| -------- | --------------------------------------- |
quite | 静默模式 |
| fallback | 如果 recipe 不存在,尝试向上找 justfile |

```justfile
mod bar # 定义模块名字 - 作为子命令运行 just bar b
mod foo 'PATH' # 从给定的 path 加载模块 mod.just, justfile, .justfile
mod? foo
# 引入其他 justfile
import 'foo/bar.just'
import? 'foo/bar.just'
# for Node.js
export PATH := "./node_modules/.bin:" + env_var('PATH')
# 启用 unstable 特性
# JUST_UNSTABLE
# 例如 [script(COMMAND)]
set unstable
# 修改默认工作目录
set working-directory := 'bar'
alias b := build # 设置别名
set shell := ["bash", "-uc"]
set shell := ["zsh", "-cu"] # 修改 shell
[private]
default:
@just --list --justfile {{justfile()}}
# 注释
js:
#!/usr/bin/env node
console.log('Greetings from JavaScript!')
# 这种方式也保证所有都在一个 shell 运行而不是一行一个 shell
sh:
#!/usr/bin/env sh
hello='Yo'
echo "$hello from a shell script!"
# 默认文档内容
[doc('Say hello to someone.')]
hello name:
@echo "Hello, {{name}}!"
[no-cd] # 避免 cd 到 justfile 所在目录
build name:
@echo "Building {{name}}..."
# 会读取 TEST_NAME 环境变量
test $TEST_NAME="1":
# 依赖可以带参数
xbuild: (build "main")
# 透传参数,默认参数
push target=xyz: (build target)
# 复杂默认参数
test triple=(arch + "-unknown-unknown") input=(arch / "input.dat"):
# varidic 参数 / 可变参数
backup +FILES:
backup *FILES:
[working-directory: 'bar'] # 针对命令修改工作目录
@bar:
# 执行顺序是 a b c d
b: a && c d
[no-exit-message]
git *args:
@git {{args}}
```

- recipe
- private
-`_` 开头为 private
- 者使用 `[private]` 标记为 private
- 不会在 list 显示
- quite
- `set quiet`
- `[no-quiet]` 取消 quite
- `@line`
- `@recipe:`
- 默认 quiet,
- 在行首加 `@` 取消 quiet
- Shebang recipes 默认 quite
- 内置函数别名
- `_directory` -> `_dir`
- `home_directory()` -> ``home_dir()`
- 内置函数
- arch, num_cpus, os, os_family
- shell
- env(key) / env_var(key), env(key, default) / env_var_or_default(key, default)
- is_dependency() - 当前 recipe 作为依赖 运行
- invocation_directory(), invocation_directory_native()
- justfile(), justfile_directory()
- source_file(), source_directory()
- just_executable()
- just_pid()
- error
- 字符串函数、 case 转换函数、路径函数、随机、hash、日期、版本号、 XDG 目录
- console 颜色常量
- recipe 属性
- confirm, doc, extension, group, no-cd, no-exit-message, no-quiet, private, script
- working-directory
- positional-arguments
- linux, macos, unix, windows, openbsd
- 语法
- if/else

```bash
brew install just # macOS brew
# 确保是单个命令 - 以免把 serve 当成参数
just --one build serve
```
88 changes: 88 additions & 0 deletions notes/dev/design/design-crm.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,3 +119,91 @@ tags:
- 多语言界面 - Multi-language Support
- 多币种支持 - Multi-Currency Support
- 多时区支持 - Multi-Timezone Support

# 主要对象

## 线索

- **产生时机**
- 当潜在客户表现出初步兴趣或行为时,例如:
- 通过线上表单、邮件订阅或广告活动提交信息
- 参与研讨会、展会等市场活动
- 访问网站并下载内容(如白皮书、案例分析等)
- 销售或市场团队主动开发与联系的潜在客户
- **状态**
- 线索尚未经过资格评估,属于前期阶段。
- **生命周期**
- 新建
- 资格评估中
- 转化为商机
- 无效/作废
- **负责人**
- 市场团队
- 销售开发代表(SDR)

---

## 商机

- **产生时机**
- 当线索被识别为有明确购买意向或需求时,例如:
- 客户表达购买意向或预算已明确
- 进入销售漏斗,并与销售团队进行进一步沟通
- 初步报价、产品展示或解决方案探讨
- 通过线索资格评估,符合潜在客户标准
- **状态**
- 商机代表可能达成交易的销售机会,进入重点跟进阶段。
- **生命周期**
- 新建
- 需求确认
- 方案/报价中
- 谈判/合同签署
- 赢单/输单
- **负责人**
- 销售团队
- 客户经理

---

## 联系人 {#contact}

- **创建时机**
- 当确定与某个个体建立了明确的联系关系时,例如:
- 线索转化为商机时,确认联系人信息
- 通过商务沟通,明确具体负责人与决策人
- 在客户组织中识别到需要维护和联系的个人
- 联系人的角色(如采购经理、技术负责人等)已明确
- **状态**
- 联系人属于具体的人,通常与客户(Account)关联。
- **生命周期**
- 新建
- 活跃
- 不活跃
- 失效
- **负责人**
- 销售团队
- 客户服务代表

---

## 客户 {#account}

- **创建时机**
- 当潜在客户被认定为需要长期维护或有合作价值时,例如:
- 线索或商机转化为实际客户(完成交易后)
- 公司或组织被确认具有业务潜力并需要建立档案
- 销售团队对目标客户进行系统管理与分配
- 已签订合同或即将进入采购阶段
- **状态**
- 客户(Account)通常指的是企业、组织或个体客户的整体档案。
- 账号(Account)会与多个联系人(Contact)和商机(Opportunity)关联。
- **生命周期**
- 新建
- 活跃
- 维护中
- 不活跃
- 关闭
- **负责人**
- 客户经理
- 销售团队
- 客户成功团队
1 change: 1 addition & 0 deletions notes/dev/design/design-erp.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ export interface AnyResource {

state?: string; // 状态 - 粗粒度系统定义
status?: string; // 阶段 - 细粒度业务定义
statusReason?: string; // 状态原因
stateLabel?: string; // 自动 resolve 出来的显示内容
statusLabel?: string;

Expand Down
43 changes: 43 additions & 0 deletions notes/dev/design/design-frontend.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
tags:
- Frontend
- React
---

# Frontend

# FAQ

## 静态前端配置

> 加载 Bootstrap 配置 - 例如 API 地址
1. 构建时根据 branch 加载配置

```ts
import { defineConfig, loadEnv, type PluginOption } from 'vite';
export default defineConfig(({ mode, command }) => {
const env = {};
console.log(`Vite ${command} mode=${mode} branch=${process.env.CI_COMMIT_BRANCH || ''}`);
Object.assign(env, loadEnv(mode, process.cwd(), ''));

// 加载 .env.branch 覆盖
if (process.env.CI_COMMIT_BRANCH) {
Object.assign(env, loadEnv(process.env.CI_COMMIT_BRANCH, process.cwd(), ''));
}
process.env = Object.assign(process.env, env);

return defineConfig({});
});
```

1. 部署时通过覆盖 json 配置
- 请求 `${location.origin}/config.json` 获取配置
- 允许配置不存在
- 部署时可以将 /config.json 重定向
- 部署时可以将 `/app/public/config.json` 内容进行替换
1. 回滚到 `${location.origin}/api` 作为默认 API 地址
1. 通过请求 API 获取配置
- SaaS 场景
- 允许用户输入租户 ID/名字
- 服务端判断 referer/url 判断返回的配置信息
Loading

0 comments on commit 180567c

Please sign in to comment.