Skip to content

Commit

Permalink
2024-03-27 17:57:17
Browse files Browse the repository at this point in the history
  • Loading branch information
JQiue committed Mar 27, 2024
1 parent e3c4133 commit 9158eca
Show file tree
Hide file tree
Showing 8 changed files with 290 additions and 5 deletions.
10 changes: 10 additions & 0 deletions docs/rust/performance.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,16 @@ opt-level = "s" # 优化二进制大小,可以有多个选项,在平衡中

如果想分析 crate 占用大小,可以安装`cargo install cargo-bloat --no-default-features`,然后使用`cargo bloat --release --crates`进行构建就会分析每个依赖占用的大小

### 使用 cargo-wizard 自动配置 Cargo 项目

Cargo 子命令 cargo-wizard,它简化了 Cargo 项目的配置,以实现最大的运行时性能、最快的编译时间或最小的二进制大小

```sh
cargo install cargo-wizard
```

项目中使用`cargo wizard`快速配置

## 参考资料

+ [Rust 性能手册](https://blues-star.github.io/perf-book-zh/title-page.html)
52 changes: 52 additions & 0 deletions docs/sundry/coking.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
title: 厨艺
category: 知识分享
article: false
---

## 刀具

### 中式

推荐"十八子作专业版桑刀"

### 西式

推荐"具良治 Global G-2"

### 日式

推荐“具良治 Global G-81”

### 斩骨刀

推荐“十八子作全尺寸款”

### 水果刀

推荐“具良治 Global GS-36/GS-7”

##

### 鸡蛋

煮鸡蛋:

1. 鸡蛋一定要冷藏
2. 煮鸡蛋时更推荐蒸,或者转小火,亦或者半煮半蒸
3. 一定是水开再下锅
4. 5 分钟是流心蛋,8 分钟是溏心蛋,11 分钟是全熟蛋

镜面鸡蛋羹:

1. 蛋水比 1:2,1.5 克盐
2. 使用陶瓷碗
3. 冷水下锅,锅盖留缝
4. 中大火预热,上汽后转小火,15 分钟后直接出锅

蜂窝鸡蛋羹:

1. 蛋水比 1:1.2
2. 使用金属碗
3. 上汽后再放入鸡蛋
4. 盖上锅盖,全程大火 10 分钟
44 changes: 42 additions & 2 deletions docs/sundry/digital-creative-skills.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,19 @@ article: false
+ 色彩排序:也可以根据单元格的颜色进行排序,前提是必须上色
+ 切片器:可以更加直观的筛选数据
+ 条件格式:可以根据筛选条件来格式化单元格样式,必须选择所有列或行
+ 根据生日计算年龄:公式“=DATEDIF([@生日], "2017/1/1", "y")”
+ 根据生日计算年龄:公式“=DATEDIF([@生日] "2017/1/1" "y")”
+ 水平垂直居中打印:文件-打印-页面设置-页边距

### Word

+ 视图:视图 -> 大纲,可以查看 Word 中的所有细节,非常利于调试格式

页码从第二张开始:

1. 添加分节符到第一张
2. 添加页码到第二节第一张
3. 取消链接上一节

### PPT

+ 当你保存你的 ppt 时,用后缀`.pps``.ppsx`,那样的话,打开时会直接进入幻灯片播放模式。不仅节省时间,还看起来十分专业
Expand Down Expand Up @@ -74,7 +80,41 @@ article: false
+ 端点
+ 折角

## blender
### Adobe Premiere

界面的各种功能区域:

+ 项目面板 - 管理您的视频、音频、图像等素材文件
+ 时间线 - 在这里编排和剪辑您的视频片段
+ 预览窗口 - 可以实时预览您的编辑成果
+ 工具箱 - 包含各种编辑和特效工具

先做什么:

1. 新建序列,设置帧大小,像素长宽比,可以参考 HDV 预设进行修改,然后保存为自定义
2. 导入素材到项目

将视频片段拖放到时间线上:

1. 在项目面板中找到您想要用到的视频文件
2. 单击并按住视频文件,将其拖拽到时间线的相应轨道上
3. 松开鼠标,视频片段就会被添加到时间线上了

对视频进行裁剪和分割:

1. 在时间线上找到您需要裁剪的视频片段
2. 将播放头移动到想要裁剪的位置
3. 点击"修剪"工具,然后拖动左右两侧的边缘进行裁剪
4. 如果需要分割视频,可以在想要分割的位置点击"分割"工具,将视频分成两段

添加转场特效:

1. 在时间线上找到两个相邻的视频片段
2. 在它们之间的空白区域右键单击,选择"添加转场"
3. 在弹出的转场库中选择您喜欢的转场效果
4. 拖动转场效果到两个片段之间,即可应用转场

## Blender

## 其他

Expand Down
55 changes: 55 additions & 0 deletions docs/sundry/ffmpeg.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
title: FFmpeg
category: 知识分享
article: false
---

## 转换视频格式

### 无损转换

无损转换保留原始文件的质量,不会降低视频和音频的质量,一般使用 FFmpeg 的 copy 模式进行无损转换

```sh
ffmpeg -i input.avi -c copy output.avi
```

该命令会直接复制输入文件的编解码器和容器格式,生成一个完全相同的输出文件

### 有损转换

有损转换会降低视频和音频的质量,但可以减小输出文件的大小。FFmpeg 支持使用各种编解码器进行有损转换,例如 H.264、VP9 等。一般使用 FFmpeg 的`-c:v``-c:a`选项指定视频和音频的编解码器

```sh
ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4
```

该命令会使用 H.264 编码视频,AAC 编码音频,转换成 MP4 容器格式,可以通过调整编解码器的参数来平衡质量和文件大小

码率 (bitrate):

+ 提高码率可以提高视频质量,但会增大文件大小
+ 降低码率可以减小文件大小,但会降低质量
+ 常用参数: -b:v 2000k 设置视频码率为 2Mbps

分辨率 (resolution):

+ 降低分辨率可以大幅减小文件大小,但会降低视觉质量
+ 常用参数: -vf scale=1280:720 设置分辨率为 1280x720

帧率 (framerate):

+ 降低帧率可以减小文件大小,但会使视频看起来更"卡顿"
+ 常用参数: -r 30 设置帧率为 30fps

CRF (Constant Rate Factor):

+ CRF 是一种基于质量的恒定码率模式,范围从 0 到 51,0 表示无损
+ 较低的 CRF 值会得到更高质量但更大文件的视频
+ 常用参数: -crf 28 设置 CRF 为 28

编码模式 (preset):

+ FFmpeg 提供了一系列预设编码模式,从"ultrafast"到"veryslow"不等
+ "ultrafast"模式编码速度快,但质量较低;"veryslow"模式质量高,但编码速度慢
+ 常用参数: -preset medium 设置编码模式为 medium
2 changes: 1 addition & 1 deletion docs/sundry/meilisearch.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ export MEILI_MASTER_KEY="Master Key"
docker run -t --rm \
--network=host \
-e MEILISEARCH_HOST_URL='http://localhost:7700' \
-e MEILISEARCH_API_KEY='root' \
-e MEILISEARCH_API_KEY=$MEILI_MASTER_KEY \
-v /root/crawl/meilisearch.json:/docs-scraper/config.json \
getmeili/docs-scraper:latest pipenv run ./docs_scraper config.json
```
Expand Down
23 changes: 22 additions & 1 deletion docs/sundry/node.md
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,9 @@ package-lock.json 是在使用`npm install`时生成的文件,记录包的来

NPM 包的版本号借鉴了[https://semver.org/](https://semver.org/)

可以将自己写的包上传到官方仓库,供给其他人下载使用,首先拥有一个[NPM](https://www.npmjs.com) 官方账号是必须的,如果是第一次使用则用`npm adduser`注册一个账户,成功后就会以该账户进行登录,如果不是第一次则使用`npm login`登录账户,输入账户和密码进行登录,登陆成功后使用`npm publish`命令发布包
### 发布 NPM 包

可以将自己写的包上传到官方仓库,供给其他人下载使用,首先拥有一个[NPM](https://www.npmjs.com) 官方账号是必须的,如果是第一次使用则用`npm adduser`注册一个账户,成功后就会以该账户进行登录,如果不是第一次则使用`npm login`登录账户,登陆成功后使用`npm publish`命令发布包

::: tip
在发布前,最好检查一下源地址,必须是官方源地址
Expand All @@ -329,6 +331,25 @@ NPM 包的版本号借鉴了[https://semver.org/](https://semver.org/)
+ `npm version minor` - 升级小版本号
+ `npm version patch` - 升级补丁版本号

发布一个纯 ESM 包,需要做以下几件事:

1. 添加`"type": "module"`到 package.json:node 会使用 esm 加载器运行,默认是 cjs
2. 使用`"exports": "./index.js"`替换`"main": "index.js"`:限制 esm 的导出范围,防止隐式导入
3. 添加`"engines"`字段限制 node 运行版本号
4. 删除`use strict`:esm 不需要这个严格声明
5. 将代码中所有的 cjs 导入导出替换为 esm 导入导出
6. 使用完整的相对文件路径引入文件,文件名和扩展名
7. 使用`node:*`协议导入 node 内置模块:防止混淆,明确告诉 node 导入一个内置的模块

如果是 typescript 发布一个纯 esm 包,则和上大致相同:

1. 如上
2. 如上
3. 如上
4. 如上
5. 删除`namespace`并使用`export`
6. 更改`tsconfig.json`中编译目标位 es,即`module: "es2020"`

## NPX

NPX 是自带的包命令执行工具,常用来执行可执行命令,使用`npx command`会自动在`node_modules`中正确的找到命令并执行
Expand Down
90 changes: 90 additions & 0 deletions docs/sundry/prisma.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
---
title: Prisma
category: 知识分享
article: false
---

Prisma 是一款非常流行的开源 ORM 工具,它可以让开发者以更简单,安全和高效的方式与数据库进行交互。Prisma 提供了一种声明式的方式来定义数据模型,可以自动生成数据库迁移脚本。Prisma 客户端是一个类型安全的数据库访问层,可以用来查询、插入、更新和删除数据。Prisma 支持多种数据库,包括 PostgreSQL、MySQL、SQLite、SQL Server 和 MongoDB

## 新的项目

### 定义数据源

```prisma
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
```

```env
DATABASE_URL="file:./dev.db"
```

### 数据迁移

```prisma
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
title String @db.VarChar(255)
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
model Profile {
id Int @id @default(autoincrement())
bio String?
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
profile Profile?
}
```

执行 cli 命令,它会做两件事:

1. 从 scheme 创建新的 SQL 迁移文件
2. 为数据库运行 SQL 迁移文件

```sh
npx prisma migrate dev --name init
```

### 生成客户端

## 已有项目

### 连接数据库

```prisma
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
```

```env
DATABASE_URL="file:./dev.db"
```

### 生成数据模型

`npx prisma db pull`

此命令读取在数据库中定义的环境变量并连接到数据库。一旦建立连接,它就会内省数据库(即读取数据库模式)。然后,它将数据库架构从 SQL 转换为 Prisma 架构中的数据模型

## 操作数据库

## Prisma Studio

Prisma Studio 是数据库中数据的可视化编辑器。 在终端中运行`npx prisma studio`
19 changes: 18 additions & 1 deletion docs/webapi/network.md
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,24 @@ document.getElementById('close').addEventListener('click', function () {

## 文件上传

<!-- todo -->
```js
async function uploadFile(file, startByte = 0) {
const fileName = file.name;
const fileSize = file.size;
const response = await fetch('/upload', {
method: 'POST',
headers: {
'Content-Type': 'application/octet-stream',
},
body: file
});
if (response.ok) {
console.log('File uploaded successfully');
} else {
console.error('Error uploading file:', response.status);
}
}
```

## 跨源策略

Expand Down

0 comments on commit 9158eca

Please sign in to comment.