Fedora WeChat

在 Fedora 系统上安装微信

在 Fedora 系统上运行微信 安装 wine sudo dnf install wine 调整缩放比例 输入下面的指令打开 winecfg winecfg 在 Graphics 一栏中调整合适的 dpi 以保证有舒适的使用体验。(4k 屏幕,192 dpi) 下载并配置字体 依次执行如下指令即可 sudo dnf install cabextract sudo dnf install winetricks winetricks corefonts gdiplus riched20 riched30 下载并安装微信 直接下载官方的 exe 安装包(在网页下载也是一样的) wget https://dldir1.qq.com/weixin/Windows/WeChatSetup.exe 使用 wine 启动微信 wine ./WeChatSetup.exe 接下来按照 Windows 的安装逻辑点击下一步安装好微信 安装结束后可以删除安装包 修改语言设置 修改这个文件 vim ~/.local/share/applications/wine/Programs/WeChat/WeChat.desktop 调整 Exec 这一部分,添加如下环境变量 env LC_ALL="zh_CN.UTF8" 最终结果应该是这样(注意路径) [Desktop Entry] Name=WeChat Exec=env LC_ALL="zh_CN.UTF8" env WINEPREFIX="/home/aimer/.wine" wine C:\\\\ProgramData\\\\Microsoft\\\\Windows\\\\Start\\ Menu\\\\Programs\\\\WeChat\\\\WeChat.lnk Type=Application StartupNotify=true Path=/home/aimer/.wine/dosdevices/c:/Program Files (x86)/Tencent/WeChat Icon=E03C_WeChat.0 StartupWMClass=wechat.exe 启动微信 安装过程中会自动添加 desktop 文件,直接打开即可。 ...

十一月 10, 2022 · Aimer Neige
Golang embed

Golang embed

前言 在写项目的时候,有时候不可避免地要处理静态文件,如果将源码直接作为软件提供问题不大,使用相对路径读取这些静态文件就可以了。但是如果项目作为库向外公布显然不可行,使用相对路径是读取不到文件的,而使用绝对路径却会带来更大的问题:因为不同的人使用,路径绝对不可能完全一致的。如果要求用户在指定路径下放置这些依赖的静态文件,虽然可行但是会给用户带来很大的困扰,而且这样的实现方式显然不够优雅。这时候,将这些静态文件一起打包进可执行文件似乎是一个完美的解决方案,那么如何实现呢?最简单的方法是硬编码,将静态文件以文本或字节数组的形式直接编入源代码,go 也有一些库帮你自动生成代码,比如 go-bindata。很明显,这个库已经终止维护了,这是因为在 go 1.16 版本,官方发布了 embed 完美地解决了这个问题。本文简要介绍 embed 的一些基础用法。 embed 假设我们有一个文件 hello.txt Hello World! Hello go embed! 我们要写一个程序读取其中的内容并输出到终端: // file: main.go package main import ( "fmt" "os" ) func main() { s, err := os.ReadFile("./hello.txt") if err != nil { panic(err) } fmt.Println(string(s)) } 很简单,不是吗? ➜ tree . . ├── go.mod ├── hello.txt └── main.go 0 directories, 3 files ➜ go build main.go ➜ ./main Hello World! Hello go embed! 但是如果 hello.txt 这个文件不存在的话,我们再次运行程序: ...

八月 13, 2022 · Aimer Neige
go image processing

Go 图像处理基础

前言 Go 语言的官方包 image 和 image/color 定义了非常多的类型,涵盖了很多的图像处理基础内容,本文简单介绍这些库中的基本概念和使用方法。 常见类型介绍 Colors Colors 是一个接口,它的代码如下: type Color interface { // RGBA returns the alpha-premultiplied red, green, blue and alpha values // for the color. Each value ranges within [0, 0xffff], but is represented // by a uint32 so that multiplying by a blend factor up to 0xffff will not // overflow. // // An alpha-premultiplied color component c has been scaled by alpha (a), // so has valid values 0 <= c <= a. RGBA() (r, g, b, a uint32) } 简单来说,它定义了一个函数,它将任意类型的颜色转化为 rgba 值。这个转化过程可能是有损失的,比如转化 CMYK 或 YCbCr 颜色空间的颜色。 ...

八月 12, 2022 · Aimer Neige
Rust Logo

[转载] Rust 大佬给初学者的学习建议

本文章转载自 Rustt 简介 当我开始学习 Rust 的时候,我犯了一个错误,那就是先读《The Rust Programming Language》。虽然这是一本非常好的资料,但让新手一开始就阅读这本 20 个章节的书籍,简直令人望而生畏,大多数人还没开始就放弃了。没有人会让一个刚开始学习 JavaScript 或者 Python 的人去阅读一本 20 个章节的书籍。Rust 学习曲线非常陡峭的,但只要循序渐进的学习一定也能学有所成。 摘要 如果你是一个完完全全的 Rust 小白,想要在一天中尽可能多的学习 Rust,那我推荐你去阅读 fasterthanlime 的《半小时快速了解 Rust》,然后完成 Rustlings 项目中的练习。 如果你已经学过 Rust 的基本语法,你可以试着做一下 Exercism.io 网站上的 Rust 部分。如果你遇到了问题,你可以在 Google 或者 StackOverflow 上寻求帮助。我推荐你花点时间来简单的阅读和浏览一下《Rust Standard Library Docs》,它是一个很棒的学习资料,里面有一些简单且实用例子去帮助你更好的使用 Rust 的标准库。《Rust by Example》也是一本高质量的参考资料,你可以通过他快速的学习 Rust 的语法和特性。如果你想要更深入的理解 Rust 的某一个概念,那么我推荐你在《The Rust Programming Language》这本书中寻找相关的章节去阅读。尤其推荐在 Exercism.io 上进行练习。在完成每个题目之后,你可以查看其他所有人的题解,可以按点赞数排序来找到通俗易懂并且巧妙的题解。这是一种很棒的学习方式。 此时,你可能已经是一个高级的初学者,能够找到属于自己的学习路线。但,如果你还需要更多的指导并想要尝试用 Rust 来写一些简单的程序,我推荐你试一着做一下 Advent of Code 2018 Calendar 上的练习。为什么推荐你做 2018 年的题目呢?因为当你做完了这个练习,你可以和 BurntSushi 提供的答案( BurntSushi’s Advent of Code 2018 Rust solutions)进行对比。BurntSushi 写的 Rust 代码整洁、可读性强、通俗易懂。阅读一个有经验的 Rustacean 的代码将会使你受益无穷。 ...

六月 29, 2022 · Aimer Neige
Server Setup

如何配置新购置的 Linux 服务器

更新系统 # Debian apt update # Fedora dnf update 安装常用工具 # Debain apt install -y neofetch htop tree ncdu ranger zsh vim neovim git curl wget net-tools # Fedora dnf install -y neofetch htop tree ncdu ranger zsh vim neovim git curl wget util-linux-user 创建 sudo 用户 # Debian adduser aimer usermod -aG sudo aimer # Fedora useradd -G wheel aimer passwd aimer 测试 root 权限 su - aimer sudo cat /etc/shadow 配置 SSH 连接密钥 快速上传本地密钥 # 在你的本地环境执行这条指令 ssh-copy-id aimer@server 导入托管的密钥 # 导入你自己的密钥! wget https://aimer.aiursoft.cn/authorized_keys -O ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys 测试连通性 ssh aimer@server 禁用 root 和密码登录 sudo vim /etc/ssh/sshd_config 将 PermitRootLogin 修改为 no 可以禁用 root 用户登录 将 PasswordAuthentication 修改为 no 可以禁用密码登录 删除这个文件 /etc/ssh/sshd_config.d/50-cloud-init.conf ...

五月 17, 2022 · Aimer Neige
Fedora Windows

在 wsl 下安装 fedora 35

安装 wsl2 使用管理员身份开启 windows terminal. 执行如下指令: wsl.exe --install 等待安装完成后在开始菜单执行重启(Restart) 警告 ...

四月 9, 2022 · Aimer Neige
Find Command On Cool Retro Term

find 指令的基本用法

什么是 find 正如它的名字一样,find 指令用于查找文件。 Linux find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 来源: 菜鸟教程 The find command in UNIX is a command line utility for walking a file hierarchy. It can be used to find files and directories and perform subsequent operations on them. It supports searching by file, folder, name, creation date, modification date, owner and permissions. By using the ‘-exec’ other UNIX commands can be executed on files or folders found. From: Geeks for Geeks ...

三月 12, 2022 · Aimer Neige
Spring VSCode

使用 vscode 开发 Spring 项目

前言 毫无疑问,idea 是最好的 Java IDE 之一,它对 Spring 也有很好的支持,但是由于某高校的 JetBrains 授权被拉入黑名单,导致我无法继续使用正版授权,虽然可以通过给 JetBrains 写邮件,证明自己高校学生的身份后继续获取授权,但是实在是懒,而且我也不是很喜欢使用 IDE,于是就就打算使用 vscode 进行开发。 Visual Studio Code 作为一款优秀的代码编辑器,有非常多的插件,经过配置后完全可以胜任大部分 IDE 的功能,本文章简要介绍如何构建 spring 的开发环境。 配置 安装配置 Java 和 Maven 提示 ...

十二月 28, 2021 · Aimer Neige
Blue Poison

配置 go 开发环境

由于某些网络原因1,本文所提到的部分网站、下载链接可能在中国大陆地区无法访问,请自行查找解决方案,本文不再赘述。 如果你在阅读本文时遇到了任何问题,请查阅 go 语言官方网站。 下载预编译文件 在 Download Go 选择适合你平台的最新版本文件下载。 本文不推荐使用一键安装包的方式安装 go 语言,即请不要直接下载下图所示的文件: 我们在下面的 Stable versions 后找到最新版本的 go,选择适合自己电脑系统与架构的压缩包。要选择 Archive 而不要选择 Installer。 提示 ...

八月 24, 2021 · Aimer Neige

对于某实验平台的吐槽

今天学校不知道哪搞了个平台,让我们去上面做模拟实验,我点开一看,好嘛,没啥用的机器人、电焊,继续看下去还有题目,又懒得上网查答案,但是学校给的通知里有一行话引起了我的注意: 温馨提示:需要从实验空间进入实验,不可直接输入网址进入 不可直接输入网址?我仔细看了下,发现实验空间的作用就是添加一个 token,如果直接进去就是游客,没有办法登录。 这下就好办了啊,虽然是游客,但是游客也可以做题啊,我用游客帐号先做了不就拿到答案了吗? 这个系统果然把正确答案显示在前端了,但是不太好看,于是我就跑去 F12 看了。 结果我在后台找到了下面的代码: $.ajax({ url: "/webApi/experimen/rig/getData", type: "GET", data: { courseId: courseId }, dataType: "JSON", success: function (res) { // 省略的大量代码逻辑 }); 下面的注释是原来就有,不是我加的。 对,这个系统没有对 js 做混淆甚至在代码里有详细的注释。 // 单选 var answer = $('.afterTesting .topic1 form'); for (var k = 0; k < answer.length; k++) { var question1 = $(answer[k]).find(".question1"); var questionAnswer = question1.attr("data-answer"); var userAnswer = question1.find("input[type='radio']:checked").val(); var score = parseFloat(question1.attr("data-score")); if (questionAnswer.length > 1) { var userdAnswer = question1.find("input[type='checkbox']:checked"); let userdAnswerStr = ''; for (let i = 0; i < userdAnswer.length; i++) { userdAnswerStr += $(userdAnswer[i]).val(); //console.log($(userdAnswer[i]).val()); } //console.log(userdAnswerStr); userAnswer = userdAnswerStr } var isok = ""; if (questionAnswer == userAnswer) { isok = "正确"; question1.find(".countItem span").html(score); resultafter += score } else { isok = "错误"; question1.find(".countItem span").html("0"); } question1.find(".yourAnswer span").html(isok); } 好家伙,前端直接向后台发请求拿答案数据,然后判断对错?这就好比考试的时候老师把答案和试卷都给你,让你自己写完试卷自己评分。 ...

八月 19, 2021 · Aimer Neige