Hi there 👋

Welcome to my blog, my name is Ray. I am a software developer and this is my personal blog where I share my thoughts, experiences, and projects. Feel free to explore and connect with me!

Github新建SSH Key

一,先在本机生成 SSH key 推荐用 ed25519,短、安全、GitHub 首选。 1 ssh-keygen -t ed25519 -C "your_email@example.com" 一路回车即可,默认会生成在: 1 2 ~/.ssh/id_ed25519 ~/.ssh/id_ed25519.pub 如果你已经有这个文件,说明之前生成过,可以直接用,不用再建。 二,确认 ssh-agent 正在运行并加载 key 1 2 eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 三,把公钥复制出来 复制的是 .pub 文件内容。 Linux / WSL: 1 cat ~/.ssh/id_ed25519.pub macOS: 1 pbcopy < ~/.ssh/id_ed25519.pub Windows PowerShell: 1 Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub 复制整行,以 ssh-ed25519 开头的那一串。 四,在 GitHub 新建 Key 网页操作路径: GitHub -> 右上角头像 -> Settings -> SSH and GPG keys -> New SSH key ...

February 2, 2026 · 1 min · 171 words · Ray

C盘被wsl吃干抹净

前言 说是 被 WSL 给吃干抹净是不严谨的,但是这次出现的问题是公司一台开发机器。512 拆分两个盘,而我在运行 WSL Ubuntu 的过程中突然断联,说 1 2 3 4 5 6 (base) PS C:\Users\mck-dev> wsl <3>WSL (40532 - Relay) ERROR: CreateProcessParseCommon:1003: getpwuid(1000) failed 5 <3>WSL (40532 - Relay) ERROR: ConfigUpdateLanguage:2519: fopen(/etc/default/locale) failed 5 <3>WSL (40532 - Relay) ERROR: operator():577: getpwuid(0) failed 5 <3>WSL (40532) ERROR: I/O error @util.cpp:1356 (UtilInitGroups) <3>WSL (40532 - Relay) ERROR: CreateProcessCommon:805: Create process failed 一看C盘已经不是爆红,而是彻底满了。 这让我想起来 WSL 默认的文件系统应该也是在 C 盘(上次操作docker 给客户操作了一次),那我应该迁移一次,但是这次不是docker,怎么迁移这个文件系统 在WSL setting中找到文件系统的菜单中只有大小的设置,那么看来没有什么GUI的工具能帮我啦。 遇到这种问题其实很生气,因为我当时强行合盘,在我获得一个 2T的 C盘时,给我电脑造成超多碎片垃圾到现在没有清理干净。真是丧尽天良的落后设计。 导出内容 WSL 的“默认盘符”本质上是 发行版的 ext4.vhdx 所在位置。 只要 ext4.vhdx 在 D 盘,本质就已经迁移完成。 他已经来到了8G,对于这台118GB的 C盘,之前又装了 Epic 开发UE5,爆满在意料之中 执行以下命令把他导出 1 2 3 4 5 (base) PS C:\Users\mck-dev> wsl --export Ubuntu-22.04 D:\wsl\ubuntu.tar 正在导出,这可能需要几分钟时间。 (0 MB) 无法启动分发。错误代码: 6,失败步骤: 2 错误代码: Wsl/Service/E_FAIL 结果失败了,我猜爆满的C盘已经没有能力启动 WSL 。那么通过 WSL 去导出文件已经不可能。那就只能先清理一部分了。 清理了常见的 temp 和download,没有任何改善,此时我可以抛弃wsl的数据, ...

February 2, 2026 · 1 min · 205 words · Ray

全自动替换图床链接

手动处理图片链接太痛苦了,每次都要下载、上传、替换链接,步骤多还容易出错。写个脚本让它全自动,一劳永逸。 问题 博客图片管理一直是个麻烦事: 从微信公众号转载文章,图片都是外链 外链不稳定,说不定哪天就挂了 想迁移图床,手动改链接太繁琐 一不小心就忘了某个步骤,图片上传了链接没更新 原理 其实就三步: 下载:扫描 Markdown 文件,找到所有外部图片,下载到本地 上传:把本地图片通过 PicGo 上传到图床 替换:更新 Markdown 中的图片链接 核心是用正则提取图片引用 ![](url),然后做 URL 映射替换。 加上缓存机制(基于文件 hash),避免重复上传。再加个备份功能,出问题能回滚。 实现 写了三个脚本: 1. auto_migrate.py - 一键式 最常用,自动完成所有步骤: 1 2 python3 scripts/auto_migrate.py --dry-run # 预览 python3 scripts/auto_migrate.py # 正式执行 运行前会提醒检查 PicGo 配置,避免上传到错误图床。 2. fix_current_links.py - 修复 如果图片已上传但链接没更新,用这个: 1 python3 scripts/fix_current_links.py --yes 从缓存文件 .image_cache.json 读取映射关系,批量更新链接。 3. blog_image_manager.py - 手动模式 需要精细控制时用,可以单独执行下载或上传。 使用 最简单就两步: 1 2 3 4 5 # 1. 预览(首次推荐) python3 scripts/auto_migrate.py --dry-run # 2. 正式执行 python3 scripts/auto_migrate.py 出问题可以回滚: ...

January 28, 2026 · 1 min · 129 words · Ray

地图定位怎么实现

自动驾驶之高精度地图(一)定位篇-阿宝1990 以下转载自微信公众号文章,阿宝 1990 自动驾驶之高精度地图(一)定位篇 作者: 阿宝1990 阿宝1990 作者 / 阿宝 编辑 / 阿宝 出品 / 阿宝1990 在讲解高精度地图之前,我们先把定位这个事情弄清楚,想明白,后面的事情就会清晰很多,自古哲学里面讨论的人生终极问题,无非就三个,我是谁,我从哪里来,我要去哪里,这里的位置定位就包含了人生哲学中的两个问题,可见其重要性。 如果你有一个路痴女朋友,如果她在外面迷路了,如果是在10年前没有那么发达的导航手机,可能给你电话沟通是这样的。 ——你在哪儿呢? ——啊?我在马路上啊。 ——有什么特征? ——头顶有个月亮。 ——你旁边有什么啊? ——有个路灯。 ——有没有路牌啊?路牌上写的什么? ——我看看啊。还真的有,上边写着“禁止停车 违者罚款”。 ——姑奶奶,我真是服了你了…… ——哼,你是不是不爱我了,你肯定是不爱我了,你是不是喜欢上了新来的那个前台? 说了现代人,再来说说我们古代的人对于导航的需求:朝辞白帝彩云间,千里江陵一日还。两岸猿声啼不住,轻舟已过万重山,看看李白当时由于没有导航,导致过了多少座山都数不清了。 我们身处何方?怎样到达目的地?多久可以到达?——这是自人类出现以来一直萦绕于心的问题。早在石器时代,“北京人”外出打猎时会在沿途留下痕迹,待捕获猎物之后,配合固定的坐标物来找到回家的路。天体导航时代,罗盘、指南针、六分仪等发明不断拓展着人类在地球上的足迹,人们开始远行,世界走向融合。 普通定位 学过初中数学都知道,我们如果要在一个二维平面上定位的话,首先建立一个笛卡尔坐标系,通过坐标原点,就可以判定A点的具体位置(x,y)的坐标,如果要从A点到B点的绝对距离,也就是通过坐标系上的绝对位置的运算即可。 这里的二维平面的定位比较准确,而且相对容易一些,是只有X/Y方向上的坐标,只要大家都遵循对应的原点坐标,或者哪怕原点坐标不同,轻易转换也可以得到,所以一般情况下在室内的一些平面定位会比较好做一些,比如扫地机器人的定位。 GPS三维定位 我们先来看看地球上的某个位置的定位,其实对于对球上的某个点而言,正常情况下只需要知道经度和纬度,但是对于导航而言,一定还需要定位的高度,否则像重庆这样的魔幻8D城市,太多高架桥的位置,上桥和下桥的导航位置显示的经纬度都一样,只能通过高度来定位自己处于哪条道路上,否则导航分分钟让人在重庆高架桥上半日游,所以大家都说看一个地图准确不,来重庆立交桥溜溜就行。 有的这个概念后我们再来看GPS定位原理就会轻松很多。 首先明白一个事情,无论是GPS还是北斗,都是通过卫星来定位的,GPS 的全称是导航星测时和测距全球定位系统,简称全球定位系统(Global Position System,GPS),可以实现地球表面附近范围的全天候三维位置等信息的获取,其具有实时性好、准确度高的优点,是当前世界发展最完善、应用最广泛的全球卫星导航系统。 我们经常在文章中看到的GNSS,是全球卫星导航系统(GNSS)是卫星导航的统称,是除了GPS以外,还包含目前俄罗斯的GLONASS、中国的北斗,欧洲的伽利略这四大导航系统。 GPS的工作的标准定义如下: GPS由24颗工作星和4颗备用星组成。卫星工作在互成55度的6条高度为2.02万KM的非同步轨道上。如此一来,在全球的任何地方、任何时间都可观测到4颗以上的GPS卫星。GPS卫星向地球发射导航电文(系统时间、星历、历书、卫星时钟修正参数、导航卫星健康状况、电离层延时参数等内容),GPS终端收到卫星发送的数据,经解算即可确定当前位置,并以NMEA0183格式,WGS-84坐标系输出数据。 读起来很拗口吧,那我以一个专业理科生的理解方式来给你剖析剖析。 ①为什么不使用同步轨道卫星呢? ...

January 26, 2026 · 1 min · 182 words · Ray

PostGIS 浅尝

PostGIS 教程 1. 什么是 PostGIS PostGIS 是 PostgreSQL 数据库的一个扩展,它允许在数据库中存储和操作 GIS(地理信息系统)空间数据。它为 PostgreSQL 添加了空间数据类型、索引和大量空间函数,可以进行地理分析、距离计算、空间查询等操作。 PostGIS 2. 准备工作:安装与启用扩展 在 PostgreSQL 数据库中启用 PostGIS,需要使用 SQL 命令创建扩展。示例: 1 CREATE EXTENSION postgis; 启用后,数据库将支持空间数据类型如 geometry 和 geography。 3. 空间数据类型 坐标系统说明 SRID 4326:WGS84 坐标系,通常用于 GPS 经纬度数据。 GEOGRAPHY 类型:采用球面/椭球面计算真实地球表面距离(单位是米). GEOMETRY 类型:采用平面坐标计算,通常用于投影坐标系,不适合直接计算地球表面距离。 3.1 geometry 类型 geometry 是用于表示平面(笛卡尔)空间几何对象的数据类型,支持点、线、多边形等多种几何类型。空间行为依赖于坐标参考系统(SRID)。 常见的几何类型包括: POINT:单个点 LINESTRING:线段序列 POLYGON:多边形 MULTIPOINT、MULTILINESTRING、MULTIPOLYGON:复合几何类型 3.2 geography 类型 geography 是用于地理空间数据的类型,面向真实球面或椭球体,适合经纬度数据和真实地球距离的计算。使用此类型的距离和面积计算会基于地球模型返回现实世界的单位(如米)。 4. 空间参考系统(SRID) 空间数据的坐标依赖空间参考系统(SRID)。常见的 SRID 包括: 4326(WGS84):基于全球 GPS 坐标,经度/纬度,常用于地理坐标。 使用 SRID 能确保空间对象在正确的参考系统下解释和计算。 5. 基本操作:创建空间数据 5.1 创建几何点 1 SELECT ST_MakePoint(-121.97, 37.38); 这个函数会返回一个 geometry 类型的点对象。 ...

January 26, 2026 · 2 min · 267 words · Ray