- 博客(241)
- 收藏
- 关注
原创 极大似然估计介绍,以及如何使用代码自动学习参数(机器学习的一种)
极大似然估计(Maximum Likelihood Estimation,简称 MLE),也被翻译成最大似然估计,是一种通过样本量获得模型最优参数的方法。例如极大似然估计可以估计概率密度函数的参数,比如一批样本/数据集/统计量(可能)符合正态分布,那么我们只要找到这个数据集的均值和方差或者标准差,就可以得到符合该数据集的概率密度公式。f(x)=12πσ2e−(x−μ)22σ2f(x)= 2πσ 2 1 e − 2σ 2 (x−
2025-07-27 02:58:17
379
原创 把sudo搞坏了怎么修复:报错sudo: /etc/sudo.conf is owned by uid 1000, should be 0
摘要:作者在配置NFS时误将/etc目录下文件所有者改为普通用户,导致sudo命令无法使用且无法通过常规方法修复。通过GRUB的高级选项进入安全模式(命令行模式),利用该模式的高权限成功将文件所有者改回root,解决了权限问题。该方案避免了重装系统,特别适用于因误操作导致系统权限错误的情况。(149字)
2025-07-21 19:32:47
206
原创 Ubuntu突然上不了网:连不上DNS服务器,一些设置里也看不到
摘要: 作者记录了Ubuntu系统突然无法联网的排查过程。最初发现APT无法连接镜像源,随后网络完全中断,出现DNS解析失败。通过检查Wi-Fi模块、防火墙设置和网络服务状态均未解决问题。最终发现可能是Wi-Fi配置文件损坏,通过删除已连接的Wi-Fi并重新连接,系统自动生成新的配置文件后成功恢复网络。整个过程涉及网络服务重启、防火墙规则调整等多种尝试,最终证实简单重连Wi-Fi是最有效的解决方案。
2025-06-30 09:19:35
364
原创 私有网络(Private-Use Networks)与本地连接(Link Local)有什么区别?点对点Wi-Fi连接技术与Wi-Fi Direct的关系是什么?
为什么这个 IP 块会对应两个接口?首先,这个是系统内核自动生成的,也就是说,你就算删了重启之后还会再次出现,所以我并不建议你去改路由表的条目,而是修改掩码部分(或者新增条目,例如169.254.0.0,掩码为255.255.255.0)。那么问题就变成了:为什么系统会生成这样的条目呢?在寻找这个问题的答案的过程中,我对私有网络和本地连接的区别有了一些认识,而且了解了点对点 Wi-Fi 连接技术与 Wi-Fi Direct 的关系。虽然我们常说 IP 地址是“门牌号”,我们可以通过 IP 地
2025-06-28 07:26:27
628
原创 如何使用lstopo生成设备结构图
lstopo是一个很不错的工具,可以生成直观、简洁的设备结构图。本文记录一些我在使用的时候遇到的一些小问题,所以本文不是一个完备的文档手册,如果你需要知道各类选选项,还请自行查阅文档:lstopo(1) - Linux man page 。这里其实叫计算机拓扑结构,lstopo名字里的“topo”就是“拓扑”的意思。安装很多 Linux 发行版自带 hwloc,如果你的系统不知道为什么没有,比如在 Ubuntu 上,可以使用下面命令进行安装:
2025-06-21 16:48:57
819
原创 Mac在局域网中突然很慢(包括SMB、NFS、SCP、SSH、Ping等场景均很慢)
今天 SMB 又突然好慢,大概只有 8-9 MB/s,而苹果 SMB 很容易突然很慢是出了名的。我就想装 NFS,但是 NFS 弄好之后还是很慢,我服了,我就检查了scp等场景,都很慢,但是互联网下载速度还是很快的。怎么说呢,你可以一个慢,说明是服务问题,但是啥都慢,那就很吓人了。在这期间我找了很多方法,看了很多帖子,文档,但都没有用(一些不错的我会贴在末尾,虽然对本文没帮助,但是算是扩展知识面)。在想不到办法的时候,我就开始用 Ping 看路由,我怀疑是不是中间经过了什么东西(我甚至没开交换机用的
2025-06-21 00:38:21
1132
原创 如何在终端/命令行中把PDF的每一页转换成图片(PNG)
本文介绍了如何使用XpdfReader将PDF文件转换为PNG格式。作者原本因懒惰而避免处理此类任务,但在被对象安排后,决定研究解决方案。文章详细说明了如何通过Homebrew或官网下载安装XpdfReader,并重点介绍了使用CLI版本的pdftopng命令进行转换的步骤。命令选项包括设置DPI(如-r 300)和显示处理信息(如-verbose),并提供了最简命令示例。该方法适用于需要将PDF转换为高质量PNG图像的用户,尤其是用于打印等场景。
2025-05-14 18:32:01
544
原创 如何使用C++进行SIMD编程
之前就提到打算放弃 ISPC 转用 C++ 了,因为 ISPC 更新太快了,文档又太差了,难以跟上速度。其次 C++ 最近的几个版本都较好的支持了官方 SIMD 库,这样就不用依靠 ISPC 这种第三方了。不过 ISPC 的性能还是最好的,但是我实在跟不上了,不过可以卡在某一版本进行开发,毕竟 CPU 指令集更新还是挺慢的。当然,最开始选择 ISPC 而非 C++ 的 SIMD,并不是因为性能问题,而是因为 C++ 的 SIMD 编程相当“难说”。这里的难说是指:要么各有各的实现方法,要么支持的平台不够
2025-05-11 04:36:38
905
原创 如何调整VS Code中C/C++扩展的格式化代码样式(ClangFormat简述)
VS Code 中有个微软开发的 C/C++ 扩展。这个扩展可以实现代码高亮、库识别,当然也包括本文要提到的格式化代码(Format code)。也就是自动把你的代码调整成某一标准格式,这不光方便自己查看,在很多大项目中,提交之前都需要按照对应标准格式化代码(当然他们也会有自己的格式化程序,但是这里不讨论这个)。
2025-05-07 00:00:12
1181
原创 Windows玩游戏的时候,一按字符键就显示桌面
一开始我以为是输入法的问题(相信打游戏的人都知道输入法和奔跑键冲突的时候有多烦),但是后来解决半天发现并不是。在网上搜了一下发现要么说要改注册表,要么要安装软件。麻了,玩个游戏这么麻烦?你可以试着在游戏里按“Ctrl+空格”,会发现开头提到的现象消失了。不过我最后还是取消了这个热键,怕哪次又不小心按错了。最近打赛伯朋克 2077 的时候,不小心按错键了,导致一按字符键就显示桌面。希望能帮到有需要的人~
2025-05-06 21:38:27
716
原创 如何处理错误ImportError: cannot import name ‘Gemma3ForConditionalGeneration‘ from ‘transformers‘
我想尝试不用 Ollama 加载推理一个模型,所以想试试看最新的 Gemma3,但是按照模型卡上的代码运行的时候from transformers import AutoProcessor, Gemma3ForConditionalGeneration出现了下述错误ImportError: cannot import name 'Gemma3ForConditionalGeneration' from 'transformers'这个错误是因为pip安装的transformers发行版
2025-04-02 22:54:58
545
原创 Xcode编写命令行程序的时候,如何传递命令选项和参数
用 Xcode 编写命令行程序的时候,下面那个区域虽然可以输入内容,但是是无法输入选项和参数的,如下:你也可以挪到命令行测试,但是这比较麻烦,我们可以通过修改 scheme 来设置选项和参数,这样也可以大大降低每次运行输入命令(或者切换窗口+上下键)的麻烦。你可以点击下面这个位置编辑 Scheme,或者直接使用快捷键Command+<就是shift和这个键一起按,所以也有写作的)比如像上面的那样的两条就相当于这条命令:希望能帮到有需要的人~
2025-03-22 19:21:50
459
原创 Swift项目中出现错误‘main‘ attribute cannot be used in a module that contains top-level code
你的项目在 Xcode 里打开的时候,可能会出现下面这种错误提醒'main' attribute cannot be used in a module that contains top-level code这个问题是因为 Swift 官方说默认是main.swift或@main是入口,二者不能同时使用。但是如果你在命令行里使用swift build -c release构建,你会发现这里可以正确编译。如果你在 Xcode 里删除了@main,那么构建出来会发现啥也没有:
2025-03-22 17:58:26
298
原创 macOS上,Swift脱离Xcode在命令行构建的时候,出现连接错误ld: symbol(s) not found for architecture x86_64
出现可能是我删 Xcode 和构建 LLVM、Clang 的时候把一些东西搞乱了。这种情况下重新安装 Xcode 和使用 HomeBrew 安装 Clang、Swift 也不行。但是由于团队人不多,一般重心还是在苹果的 Xcode 和 GUI 上,脱离 Xcode 和 GUI 开发的时候,有一些奇奇怪怪的问题,接下来会更新几篇相关博客。Swift 一般是为苹果平台开发的,但是它也可以在 Linux、Windows 上开发,尤其是命令行方面不错。建议安装 Xcode,再用。希望能帮到有需要的人~
2025-03-22 17:15:54
376
原创 补充:如何在C++20中测量一个函数或者功能的运行时间
之前写过一篇,最近发现了个新的chrono。虽然chrono是 C++11 新增的,但是那时候很少使用,因为很多设计还不完善。加之当时的情况与其他方法相比并不占优。好在 C++20 进行了很多修改,优势起来了,所以现在很多代码里都使用的chrono。本文使用的一些特性是 C++20 才有的,早期版本可能能用,但不保证。这种方法没有之前博客里写的通用,但是代码量简单多了(真的是少了很多很多)。但是我不好说哪个好,哪个坏。因为我不像之前那篇博客,几种方法都使用了很长时间,对优缺点非常清楚。
2025-03-14 13:45:22
959
原创 如何在Ubuntu上构建编译LLVM和ISPC,以及Ubuntu上ISPC的使用方法
之前一直在 Mac 上使用 ISPC,奈何核心/线程太少了。最近想在 Ubuntu 上搞搞,但是 snap 安装的 ISPC不知道为什么只能单核,很奇怪,就想着编译一下,需要 Clang 和 LLVM。但是 Ubuntu 很搞,他的很多软件版本是和系统版本挂钩的,默认安装的是 14,这样安装可能会缺东西。没办法,搞吧,顺道研究下这两个的编译和使用。本文并不是很详细,属于备忘录性质。
2025-03-13 17:47:24
1174
原创 如何正确安装Stable Diffusion Web UI以及对应的xFormers
本文是我总结的步骤,验证了几次保证是对的。因为正确的安装 Stable Diffusion Web UI 以及对应的 xFormers 实在是太麻烦了,官方和网上的步骤都是残缺和分散的,加上国内网络速度不理想,所以需要一些额外步骤,之前研究出来了,结果没记,重装系统之后又安装不好了,这次成功安装之后,就写下本文记录,这样一个小时绝对能装好了(网络速度快的话不超过十分钟)。 see `python -m xformers.info` for more info
2025-02-14 20:20:04
2647
2
原创 FaceFusion如何设置公开链接和端口
有时候我们想在局域网内的其他设备上使用 FaceFusion,这时候需要设置公开链接和端口。但是这个提示是错的,如果你查过,会发现这是 gradio 留下的问题。虽然隔壁 Stable Diffusion web UI 也用的这套框架,但是人家自己改了一下,而 FaceFusion 并没有进行修改。找了半天,发现一个人提到了,可以直接改 gradio 的环境变量。然后我“举一反三”,同样的方式也改了端口。如果你需要一直设置成这样,将其放入到 Shell 配置文件内,例如.bashrc,然后使用。
2025-02-09 23:30:47
1843
原创 如何在退出SSH之后继续运行程序/命令
文件,因为有些命令会有输出内容,一般输出到标准输出里,但是这种情况下明显不能这样,不然那画面太感人。在退出 SSH 之后继续运行程序/命令是很常见的使用情景,不过老容易忘。写成一个命令了,时间长了容易忘,然后又得去查。所以写篇笔记记录一下。要想在退出 SSH 后继续运行命令,那么需要使用。但是如果这样运行的话,如果将其写成一个。是要运行的命令,最后的。希望能帮到有需要的人~命令,它的使用方法和。
2025-02-09 01:37:57
308
原创 Ubuntu添加硬盘踩坑日志:SMB无权限的问题
在 Ubuntu 上添加硬盘之后,发现遇到了一个个很烦的问题,添加完硬盘之后,SMB 远程访问显示无权限。这里快速说明一下,如果你是用内部 SATA/NVMe 连接的硬盘,不要给硬盘格式化成 FAT 和 exFAT,否则处理起来非常麻烦。很多帖子给出的方法不管用,这个是用“Disk”工具设置的时候使用的属性,是管用的。而且 Linux 上格式化的时候,选择 FAT 是老的 FAT,最大文件只能 4GB。本机使用是正常的,远程就不对了,调整权限什么的各种方法都试了,还是不行。希望能帮到有需要的人~
2025-02-05 16:44:54
533
原创 文本生图的提示词prompt和参数如何设置(基于Animagine XL V3.1)
昨天搞了半天 Animagine XL V3.1,发现市面上很多教程只是授之以鱼,并没有授之以渔的。也是,拿来赚钱不好吗,闲鱼上部署一个 Deepseek 都能要两百块。这里我还是想写篇文章介绍一下,虽不全面,但是尽量告诉你一些资料如何去找,或者让你能自己写出来,不是一味的复制粘贴。首先 Stable Diffusion WebUI 的界面如下:-1。
2025-02-03 17:14:02
1689
原创 FaceFusion显卡利用率太低如何改进:错误load library libonnxruntime_providers_cuda.so with error: libcudnn.so.9
还是 FaceFusion 的问题,我在用 FaceFusion 的时候,发现速度好慢,就是比 CPU 快不了多少,我一开始以为就是这样,看了眼别人的演示发现并不是这样的。
2025-02-01 17:06:07
1662
原创 如何处理facefusion中cv2错误error: (-215:Assertion failed) !ssize.empty() in function ‘resize‘
这是因为市面上的播放器由于测量了大量视频,兼容性很高,很多视频都能播放。比如说某些视频在苹果的播放器中会出现抽搐的情况,但是 VLC 就不会出现。因为很多视频的格式其实蛮复杂的,这就使得哪怕很多视频是相同格式(比如 mpeg 4),但是底层格式确不太一样。某些设置也会有所不同。来获取,下面这个命令会返回码率数字,如果你会写脚本,应该知道这样很简单就能用码率转码了。所以解决这种问题的方法很简单,找个靠谱的转码程序转一下就好了。不过需要注意 FFMPEG 转码的时候不能选择拷贝模式,因为可能是编码的问题。
2025-02-01 16:01:53
523
原创 Miniconda中的错误信息undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0如何解决
但是 Miniconda 还是有点“问题”,它也有包管理的功能,但是各家系统都已经有了自己的包管理系统,比如 Mac 的 Homebrew,Ubuntu 的 APT,Miniconda的手有时候搞不清其他包管理系统干的事情,就会出现问题,我遇到的这个问题就是因为这个原因。因为不同版本的 Python 和一些包很多时候别看只有二级甚至三级版本更新,但是差别很大,比如某些函数的参数会发生变化,所以很多时候必须要某些指定某一版本的包或者 Python。这个问题原因是符号在库里查找不到。希望能帮到有需要的人~
2025-01-31 05:23:23
303
原创 在Raspbian上,如何获取树莓派的CPU当前频率
本文不用汇编实现,因为我是要用在 Go 里的,Go 并不支持内联汇编,要用汇编比较麻烦。而且项目并不是很在意性能,所以直接用命令获取内核准备好的。如果你想获取某个 CPU 核心的频率,那么可以使用下面这样的代码(下面是获取第一个核心,也就是。在Raspbian上,CPU 信息存放在。第二个的路径有点奇怪,需要注意一下。希望能帮到有需要的人~
2025-01-23 12:22:29
240
原创 Python中的“@”有何作用
最近看 D2L 的代码发现经常会出现下面这样的的情况:在一个类或函数的最前面有个。虽然第二章解释了后面的注释#@save:表示下面的函数是已经定义在包里的,后面不用重新定义便可直接使用。但是并没有解释这里的用法。找了一下资料发现,
2025-01-22 09:37:14
485
原创 为什么需要在优化器中,使用.zero_grad把梯度归零
今天看书的时候发现在优化算法的最后,将梯度归零了:但是书中没有给出解释,我也查了一下,发现很多优化器里也有这种操作,为什么呢?首先,.zero_grad会重置优化器所有的梯度,也就是归零。现在问题变成了:为什么梯度需要归零呢?第一,当你创建一个 tensor 的时候,如果你需要计算梯度,需要将属性设置为True,此时包(package)会跟踪所有 tensor 上的操作。那么接下来进行反向传递的时候,tensor 的梯度会积累在.grad的属性中。
2025-01-21 15:32:56
556
原创 Jekyll无法将Markdown转换成HTML
要解决这个问题也很简单,转换成UTF-8就行。不用额外下载软件,VSCode就可以做到。首先点击上图的部分。今天翻译博客,发现并没有和以前一样生成HTML文件。找了半天原因,发现是因为Jekyll无法正确识别UTF-8withBOM格式的文档。byte-ordermark(BOM)是给HTML这种文本流使用的,防止出现一些问题。希望能帮到有需要的人~
2025-01-19 17:19:52
192
原创 在Linux上如何让ollama在GPU上运行模型
之前一直在Mac上使用ollama所以没注意,最近在Ubuntu上运行发现一直在CPU上跑。我一开始以为是超显存了,因为Mac上如果超内存的话,那么就只用CPU,但是我发现Llama3.23B只占用3GB,这远没有超。看了一下命令没发现有相关的选项。所以我查了一下。运气很好,找到了一篇博客写了可以强制在GPU上的方法:用容器跑。我也不知道为什么用容器就在GPU上跑了,官方也没有相关说明。
2025-01-18 09:51:40
17520
27
原创 像JSONDecodeError: Extra data: line 2 column 1 (char 134)这样的问题怎么解决
今天处理返回的 JSON 的时候,出现了下面这样的问题:处理这种问题的时候,首先你要看一下当前的字符串格式是啥样的,比如我查看后发现是下面这样的:会发现这个字符串中间没有逗号,也就是此时的JSON格式不对。
2025-01-14 22:31:33
650
原创 Ubuntu上,ffmpeg如何使用cuda硬件解码、编码、转码加速
本文使用 Ubuntu 环境。Ubuntu 直接使用 APT 安装的就支持 CUDA 加速。本文使用这样下载的版本进行演示,你自己编译或者其他源的版本可能会不同。ffmpeg 的一些介绍,以及 macOS 版本的 ffmpeg 硬件加速请见。如果你了解转码的流程,那么直接跳过前两节,通过侧边栏跳转到“使用FFMPEG硬件加速转码”部分直接看命令。
2025-01-14 11:51:01
2618
原创 “新的”旧设备历险记:Dell T5810+2680v4+RTX 2080Ti 22GB(划掉)3060 12GB注意事项
本文主要是我记录的笔记,防止未来遇到解决过的问题却要重新研究解决方案,不过由于这篇文章从开始写到今天差不多有 20 天了,很多细节一时记不起了,所以未来可能会进行一些更新。手上的设备大多显卡不强,因为之前也没涉猎显卡编程或者深度学习,所以设备大多强 CPU,弱 GPU。不过现在打算好好学一下,所以需要一台新设备。不过预算不高,所以选择了如下配置(以下都是实际付款价):由于我买的 2080ti 有风啸声,实在遭不住,所以我还是退了,换个性能一般但不吵的 3060 12GB,初学机器学习也够了。
2025-01-14 03:31:02
3995
3
原创 如何解决Not Implemented Error: Loading a dataset cached in a LocalFileSystem is not supported
在加载本地的一个数据集的时候出现了“Not Implemented Error: Loading a dataset cached in a LocalFileSystem is not supported”的错误,这个错误如果你看到最上面的信息会发现是因为查找路径是。,我盲猜导致这个错误的原因是多次提取,Jupyter 将其放入缓存里了。所以解决这个错误的方法异常简单,此时你在当前使用的笔记本目录下使用。我看到有人和我有相同的问题,但是他们认为是。没有更新,我更新了也没解决。会发现有一个隐藏文件。
2025-01-05 23:41:20
788
原创 「C++笔记」unordered_map:哈希化的无序映射函数(键值对)
unordered_map 是 C++ 中一个经过哈希函数(Hash)处理的映射(map)容器。本文中的map和set是差不多的,与也是对应的。所以不再单独写一篇了。这里的内容建议看完本文之后再回过头来看二者虽然都有两个属性,但是程序员定义的时候数目不一样。set是一种属性的容器,就像字典你定好“字”,页数是后面放的位置确定的。但是map是由两个属性确定的,所以也被称为键值对(key-value pairs)。此外,官方不建议修改元素值,因为修改之后,哈希值可能会发生变化,这样就出问题了。
2025-01-04 23:33:06
988
原创 「C++笔记」vector:C++中的新式“数组”
C++ 中,有一种容器叫做 vector,它的定义和作用与数组差不多,都是同一种类型的元素序列,在内存中连续存储。但是在实现的时候,要比数组要复杂一些:大致来说,它会动态分配内存空间,然后有三个指针指向元素序列的开头和结尾,以及空闲区域的末尾(有的会用偏移量记录)。所以 vector 的结构是一个内存分配器和三个指针。如下:不过 vector 有一些新的特性,非常方便使用,就连 C++ 创始人 Bjarne Stroustrup 都推荐使用vector。
2025-01-04 19:27:07
995
原创 外部排序:败者树详解
我之前一直以为败者树就是一种比较特别的树排序(不是说树型排序,是真的有个算法叫这个),直到最近才发现好像有很多细节不一样。树排序参见我的另外一篇博客《树选择排序(Tree Selection Sorting)介绍 - ZhongUncle CSDN》)。这个误解的来源是二者思路太像了,你看看开头就知道了(推荐看一下这篇文章的开头,这里不再赘述思想了,只讲细节)。那么败者树到底是什么个情况呢?败者树说白了就是“选败者,最后得到冠军”。是排除法,而非其他树形排序或树排序的选拔法。
2024-12-03 15:39:12
597
原创 「动态规划」2/n:通过具体问题练习动态规划(爬楼梯问题、小偷问题)
在上一篇文章中提到的最经典的斐波那契数列就是一种一维的动态规划。一维其实也很容易看出来,只有一个属性(面上来说就是数字)相关。除了斐波那契数列之外,还有一些很常见或经典的一维动态规划问题,本文将通过其中的一些问题进一步介绍动态规划。爬楼梯问题问题描述给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。
2024-11-05 17:55:12
958
原创 C++中,如何找到一个vector中最大的元素
而不是 C 中的数组,虽然结构更加复杂,但是用起来更方便。就连 C++ 创始人 Bjarne Stroustrup 都推荐使用。动态规划中,经常需要找到一个线性表中最大的元素,C++ 最常用的是。C++ 算法库中有相应的找到最大值的算法。:获取最大的元素,但是返回值是一个迭代器。的函数,那个是找两个元素里较大的一个的,不是找数组里的。那么如何获取这个最大值的位置呢?希望能帮到有需要的人~
2024-11-04 18:20:19
790
原创 「动态规划」1/n:什么是动态规划?
在学习动态规划之前需要了解清楚什么叫做动态规划。很多教材直接讲内容了,并没有介绍其思想。动态规划(Dynamic Programming,缩写 DP)是一种编程范式,并非一种具体的算法。动态规划就是把一个大问题通过递归的方法划分成多个小问题,用数学方式来表达的话,就是一个多项式。这样可以在代码量变化不大的情况下解决不同规模的问题(实现这点正是递归)。这里多说一点:分而治之(Divide and Conquer,缩写 D&C)也是把一个大问题划分成小问题,但是分而治之是直接拆分的,而动态规划是递归拆分
2024-10-31 04:30:52
656
原创 如何分析计算出不同构的某阶无向树的棵数目
如何分析计算出不同构的某阶无向树的棵数目”是离散数学中的一种很常见的题目,而且没有简单公式计算出来,只能通过枚举来得到。这就是无可避免的了,画的时候需要注意能不能改变树高,也就是努力找不同构的情况。,对应两个不同构的树:2 个度为 2 的节点可能相邻,也可能不相邻,二者的树高不同。因为树同构的话,高度一定是相同的。:离散数学是一个顶点接的边就是度,而某些算法书里,树的度指的是结点的子节点数量。首先同构的定义是图的属性不变,也就是点、边、度序列不变。,还要考虑有些情况度序列的情况可能对应多个不同构的树。
2024-10-13 20:14:47
1007
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人