Jiahonzheng's Blog

Jiahonzheng's Blog

You're the best mistake I've ever made.

SWAPI 个人项目总结
团队地址:github.com/Just-for-Service-Computing 本人承担的工作在 SWAPI 项目中,我主要负责数据爬取、数据库构建、搭建 gin 脚手架的工作。 数据定义由于我们决定使用 Golang 实现 https://swapi.co 的数据爬取,因此我们需要定义相关的数据结构体定义。以下是 Film 结构体的定义,我们为其添加了 tag 字段,目的是为了实现结构体的序列化与反序列化。 123456789101112131415type Film struct { Title string `json:"title"` Epis...
游戏智能
游戏智能,可理解为:在游戏规则约束下,通过适当的算法使得游戏中 NPC(Non-Player Character) 呈现为具有一定人类智能行为的博弈对手,让游戏玩家面临不间断的挑战,并在挑战中有所收获,包括知识和技能等。 GitHub:github.com/Jiahonzheng/Unity-3D-Learning 游戏状态我们将左右两岸的牧师、魔鬼的数量以及船的位置看作为游戏状态。我们在游戏实现中,实现了 AIState 类,用于维护游戏状态,具体定义代码如下。 123456789101112131415public class AIState{ // 指明左岸的牧师数...
搭建 Postwoman 服务
Postwoman 是一款开源的 API 请求工具,支持 HTTP 、WebSocket、GraphQL 接口的请求发送,支持自建服务,可访问 https://postwoman.io 在线使用该工具。 自行搭建服务Docker我们可以使用 Docker 安装 Postwoman 服务,具体命令如下。 12345# 拉取镜像docker pull liyasthomas/postwoman# 运行服务docker run -p 3000:3000 liyasthomas/postwoman:latest 直接搭建当然,我们可以使用直接搭建服务的方式。 12345678# 拉取仓库代码gi...
点云滤波
含义点云滤波,顾名思义,就是过滤点云数据中的噪声。由于设备精度、操作者经验、环境因素、电磁波的衍射特性等影响,原始采集的点云数据往往包含大量散列点、孤立点。 滤波处理是点云处理流程的第一步,其滤波效果直接关系到后续的配准、特征提取、曲面重建、可视化等流程的效果。 尽管在信号处理领域中也存在滤波处理,但点云数据的滤波处理与信号处理中的滤波处理不一样,主要有以下方面原因: 点云不是函数,对于复杂三维外形其$x$、$y$、$z$之间并非以某种规律或某种数值关系定义,因此点云无法建立坐标之间的关系。 点云在空间中是离散的,不像图像信号有明显的定义域,因此无法以某种模板的形式对其进行滤波。 点云...
获取请求来源 IP 地址
IP 追溯主要用于获取请求的真实 IP ,由于现有服务是基于 Nginx 实现负载均衡的,因此获取请求真实 IP 存在一定难度。在 Matrix 现有实现中,IP 追溯由 getIp 函数完成,其具体代码如下。 1234567891011/** * 获得请求发送方的 ip * @param {Context} ctx * @return {string} */export function getIp(ctx) { const xRealIp = ctx.get('X-Real-Ip'); const { ip &#...
Unity WebGL 屏幕自适应
Unity 构建的 WebGL 项目,是无法自动适应屏幕的、无法全屏的,我们需要修改 index.html 和 style.css 文件,使其支持屏幕自适应的功能。 index.html修改 index.html 文件,我们为 body 添加 Resize 函数,同时设置 gameContainer 的 width 和 height 属性。 123456789101112131415161718192021222324252627282930313233343536<!DOCTYPE html><html lang="en-us"> <head> ...
Unity 公告牌
设计要求 使用 UGUI 技术实现公告牌。 ScrollView首先,我们在 Scene 场景中,添加 ScrollView 游戏对象,并设置其 Inspector 属性,具体设置如下。 在上述设置中,我们取消了滚动视图的水平滚动,同时设置竖直滚动条永远可见。此时,对象层次结构如下图所示。 其中的 Content 存放着列表内容,我们需要对其设置,具体设置如下。 我们为 Content 添加了 Verticle Layout Group 和 Content Size Fitter 组件,前者用于构建垂直列表视图,后者用于实现列表高度的自适应。注意到,我们在 Verticle La...
对比 encodeURI 和 encodeURIComponent
encodeURI 和 encodeURIComponent 都可用于对 URL 进行转义编码,但二者之间是存在差异的,其应用场景是不相同的。 转义范围encodeURIencodeURI 可转移所有字符,除了以下字符: A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) # encodeURIComponentencodeURIComponent 可转移所有字符,除了以下字符: A-Z a-z 0-9 - _ . ! ~ * ' ( ) 二者对比encodeURIComponent 比 encodeURI 可转义更...
博客 REST API 设计
博客 REST API 设计总体设计 博客不开放用户注册接口,只能由管理员登录。 博客的评论系统对接 Disqus 平台。 获取图形验证码管理员在登录博客之前,需要获取图形验证码,该接口无需鉴权。 Request1GET /api/v1/user/captcha Response Status: 200 OK Location: /api/v1/user/captcha 1234{ "captcha_id": "UUID of captcha image", "base64": "Base64 encoding of captcha image"} 管理员登录...
前端性能优化:GZIP
GZIPGZIP 是 GNU Zip 的缩写,最早应用于 UNIX 系统的文件压缩,现常应用于改进 Web 应用程序性能,其压缩比率在 3 到 10 倍左右,可大大节省服务器的网络带宽,具体说明可参照 RFC 1952 文档。 压缩原理GZIP 使用 DEFLATE 算法进行压缩,流程如下:对于要压缩的文件,首先使用 LZ77 算法的一个变种进行压缩,随后对得到的结果进行 Huffman 编码。 LZ77 原理:如果文件中有两块内容相同的话,那么只要知道前一块的位置和大小,我们就可以确定后一块的内容。所以我们可以用(两者之间的距离,相同内容的长度)这样一对信息,来替换后一块内容。由于(两...
avatar
Jiahonzheng
Mr.Tseng