Latest

香港银行开户指南

香港银行开户指南

注意:本文所有内容,都是需要前往香港的情况下才能使用! 本文主要介绍2家实体银行和3家虚拟银行! 实体银行包含: * 中国银行(香港) * 汇丰银行(香港),该银行也被称为“香港上海汇丰银行” 虚拟银行包含: * 众安银行 * 天星银行 * 蚂蚁银行 1、各银行所需资料和办理方式 银行名称 办理方式 所需材料 & 要求 备注 汇丰银行(香港) 提前预约,线下到营业点办理 (如果没预约,只能很早排队取线下号,不一定能取到) 必备证件: 1. 港澳通行证 2. 入境海关小票 3. 身份证 投资证明: 1. 证券App近三月股票交割单 2. 中国结算近三月交割单 3. 银行近三月流水单 4. 支付宝投资流水 资产证明: 1. 银行资产证明 2.

By 夕元
C++协程(Coroutines)

C++协程(Coroutines)

原文链接:https://ovea-y.cn/cpp_coroutine_20/ C++协程(Coroutines) 1. 简单介绍协程 协程可以简单的理解为,它是一个可以随时“中断”,并再次恢复执行的函数。 C++协程框架的特点: * 无栈协程 * 非对称设计(开发者可以自行设计协程调度器,做成对称设计) 2. 协程和函数的区别 函数:函数调用是线性、同步、一次性的执行模式,调用者必须等待被调用方法执行完成后返回。 协程:协程可以异步执行,调用者不需要等待协程完成,可以在协程挂起时继续做其他事情。在执行过程中通过特定的语法(co__yield_和_co__await)暂停执行,并在之后的某个时刻恢复执行。 2.1 普通函数的执行过程 一个普通函数在执行的时候,主要包含两个操作,分别是调用(call)和返回(return)

By 夕元
GitHub Workflows

GitHub Workflows

原文链接:https://ovea-y.cn/github_workflows/ 本文介绍GitHub工作流的创建和作用。 工作流创建方式 在git项目下,创建.github/workflows文件夹,里面编写的任何yml文件都是工作流的一部分。 secrets的创建方式 secrets.GITHUB_TOKEN是GitHub自动创建的,不需要自己创建。 secrets.SERVER_HOST这个的来源,需要在GitHub对应的项目的设置中设置。 readme的构建标签 配置好Branch、Event类型后,把下面这段内容复制到markdown文档里,就会自动显示自动化流程状态了。其实就是一张图片,由GitHub自动生成提供。 一. 自动构建网站并推送到远程服务器 自动构建hugo,并更新远程服务器的静态网站内容。 自动化流程文件 name: Deploy Hugo Site # 当推送到main分支时触发部署流程 on: push: branches: - main

By 夕元
代码版本管理工具(git/gerrit/repo)

代码版本管理工具(git/gerrit/repo)

原文链接:https://ovea-y.cn/code_version_control_tools__git_gerrit_repo/ 一、版本控制工具的历史 1.1 版本控制雏形 在版本控制软件出现之前,就具备diff与patch工具来对源码进行比较和打补丁了,在CVS出来的一段时间里,Linus一直在使用diff与patch工具管理着Linux的代码。diff与patch也是源码版本控制中最基本的概念。 1.1.1 diff —— 用于比较两个文件或目录之间的差异 -u 表示使用 unified 格式 -r 表示比较目录 -N 表示将不存在的文件当作空文件处理,这样新添加的文件也会出现在patch文件中 diff -urN a.c b.c > c.patch 1.1.2 patch —— 用于应用差异修改 通过patch可以将原始文件变成目标文件,

By 夕元
Android Property模块

Android Property模块

原文链接:https://ovea-y.cn/android_property_module/ 一、导言 在Android系统中,属性模块具备记录和控制能力。它不仅记录着系统本身的硬件/软件信息、控制系统功能、在进程间传递信息,还可以调用系统预置功能。 本文将对Android Property机制进行深入解析。 二、属性分类 属性一共有两种大类型,一种是普通属性,一种是控制属性。 普通属性是我们最常见的属性,它们仅记录Key-Value信息,软件设计上可以通过这样的Key-Value值,实现进程间通信、功能控制、暴露内部信息等功能。 而控制属性则较为少见,它的功能预置在系统中,用于控制程序的运行状态,控制设备开关机,控制Selinux。 接下来,我们将对普通属性和控制属性分别进行介绍。 2.1 普通属性 2.1.1 常规属性 2.1.1.1 常规属性特点 * 常规属性可以设置多次,重启后丢失。

By 夕元
使用Coze(扣子)定制一个Android领域的专家

使用Coze(扣子)定制一个Android领域的专家

原文链接:https://ovea-y.cn/customize_an_android_expert/ 字节跳动在国内正式上线了扣子平台,其实我在之前已经用了很长一段时间的海外版本了,我将结合之前在海外使用的经历,教大家如何定制一个Android领域的智能专家。 一、创建一个Bot 1. 设置基础信息 网站:https://www.coze.cn/explore 先进入扣子平台,然后选择左上角的“创建Bot”按钮 填写所需信息,图标直接通过AI生成,然后选择喜欢的那一个。 2. 设置“人设” 在左边的人设和回答逻辑设计好自己的人设。 技巧:线写好简单的需求,然后点击右上角的优化。 3. 通过插件添加联网搜索、绘图等能力 4. 添加知识库,以应对冷门技术 5. 设置音色,在发布后具有独特的特点 中文和英文的音色可以单独进行设置。 6. 通过工作流,添加定制化的任务 我们将用一个生成头像的工作流来做测试

By 夕元
从C、C++的视角来看Rust

从C、C++的视角来看Rust

原文链接:https://ovea-y.cn/looking_at_rust_from_the_perspective_of_c_and_cpp/ 本篇文章用于有C、C++基础的读者快速入门Rust语言。 一、工具链 编译工具 gcc/clang、g++/clang++ -> rustc 构建系统 make/cmake/Bazel -> cargo cargo用于管理和辅助创建一个rust项目,它通过Toml配置文件进行项目管理。 它具备将上一次构建成功的状态记录到Cargo.lock的功能,这对于第三方crate(类似库)的版本管理非常有帮助,这意味着你在发布的每个版本只要存在Cargo.lock,就可以按照当时构建成功的配置进行构建(反例:Gradle、Maven和JDK、SDK、NDK甚至cmake等工具链存在不兼容的情况)。 编辑器增强

By 夕元
C++ std::move的作用,以及它如何影响智能指针所有权

C++ std::move的作用,以及它如何影响智能指针所有权

原文链接:https://ovea-y.cn/cpp_move_analysis/ 标题: 分析C++ std::move的作用,以及它如何影响智能指针所有权 在介绍std::move之前,首先需要说明C++中左值右值相关的概念。 基本概念 左值(lvalue) 左值是可以标识内存位置的表达式,通常是有名字的变量或对象。左值表示一个可修改的数据,你可以对其取地址。例如,变量、数组元素、结构体成员等都是左值。 int x = 13; // x 是左值 int* ptr = &x; // &x 返回一个左值 右值(rvalue) 右值是不具有标识内存位置的临时表达式,通常是计算的结果或临时对象。右值表示临时的、一次性的数据,不能对其取地址。例如,字面值、临时对象、表达式的计算结果等都是右值。

By 夕元
Golang的多线程

Golang的多线程

原文链接:https://ovea-y.cn/golang_mutli_gorountine_simple/ Golang的线程和其他的语言不太相同,它的并行设计从语言成面上就进行了支持。 Go的线程核心是goroutine,它是用户态实现的线程,因此多个goroutine可以运行在一个实际线程之上。goroutine是通过Go的runtime管理的一个线程管理器,通过go这个关键词就可以启动一个runtime。 package main import ( "fmt" "sync" "runtime" ) // ### 此处的写法是错误的,wg传递的是副本而不是指针,因此Done不会对外面的WaitGroup有任何作用。 // func say(s string, wg sync.WaitGroup) { // for i := 0; i < 3; i++ { // // 让出CPU时间片 // runtime.Gosched() // // 输出字符 // fmt.

By 夕元
旺达与巨像 通关!

旺达与巨像 通关!

原文链接:https://ovea-y.cn/wangda_and_bigstone/ 很早就听说过旺达与巨像这款游戏的大名,一直听闻是款非常棒的游戏,但是一直没有接触过。刚好现在有了PS5,开了会员可以免费游玩重制版本!然后今天通关了! 这个游戏非常棒,主要玩法就是找到巨像的弱点(话说如果找不到的话,某个背景声音会提示,所以根本就不会卡关),然后9刀刺死就结束了。 下面是我在游戏里截取的一些我很喜欢的图片,然后顺便说说当时在做些什么吧~ 这段是一个蜥蜴一样的巨像,它的弱点平时根本就不会暴露出来,只能在“笼子”里记录它,然后用弓箭让它失足才会有短暂的弱点暴露时间。 走进看,非常有压迫感!而且它还会吐毒球!只要进去很快就没血了。 然后这是我玩的最难受,感觉最恶心的巨像了!这个弱点暴露非常麻烦,必须全场骑马,不然会被巨像连续火球术暴打… 然后爬上去也非常麻烦,因为它会翻身!纯靠运气才到它的背上😭 这是第一次遇到灵活的巨像,它就像大猫一样,相当可爱! 然后它非常怕火。 最后坠崖了。 这

By 夕元
Kotlin语言学习

Kotlin语言学习

原文链接:https://ovea-y.cn/kotlin_lang_simple_learn/ 背景 从2017年开始,Google在2017年的I/O大会上宣布,Kotlin正式成为Android的一级开发语言。 Google在2019年的I/O大会上宣布Kotlin成为了Android第一开发语言,后续也将优先提供Kotlin版本的API使用说明。 Kotlin是由JetBrains公司开发与设计的,2016年发布了1.0正式版本。 特性 Kotlin和Java一样,都是在编译之后变成字节码文件,然后由虚拟机解释执行。其中字节码相当于某种中间语言,由更高级的抽象语言解析编译得来。 Kotlin可以直接调用Java编写的代码,也可以无缝使用Java的第三方开源库。 语法 基础入口函数 fun main(args: Array<String>) { println("Hello World!") println("Program arguments: ${args.joinToString()}") } Java函数

By 夕元
Init的工作职责

android

Init的工作职责

原文链接:https://ovea-y.cn/init_work_1/ 总览图 ueventd其实就是init,为了方便启动所以单独设置了一个链接 Init第二阶段初始化流程 PropertyInit 它的作用初始化属性,它在非常早期的阶段(此时没有执行init脚本指令,甚至没有初始化selinux)就会执行。 它会做下面这些操作: * 创建/dev/__properties__节点 * 解析序列化的属性(在文件{分区名}__property_contexts中),并且写入到/dev/properties/property_info * 解析Kernel Device Tree,设置到ro.boot.{}中 * 解析Kernel Command Line,设置到ro.boot.{}中 * 解析Boot Config,设置到ro.boot.{}中 * 将一些Kernel

By 夕元
VMware Fusion设置端口转发(macOS)+内网穿透

macOS

VMware Fusion设置端口转发(macOS)+内网穿透

原文链接:https://ovea-y.cn/vmware_fusion_set_port_forwarding_macos_internal_network_penetration/ 很少有资料提到配置macOS上VMware Fusion的端口转发,因此我在这里进行了一些记录 打开网络设置 解锁并添加新的网络适配器 只有新的网络适配器才允许配置转发,默认的不允许这样做。 设置NAT转发 虚拟机选择使用新创建的虚拟网络适配器 Ubuntu配置静态IP/DNS服务器的方法 首先你可以在安装Ubuntu的时候配置 安装后如果需要修改,请像下面这样修改 vim /etc/netplan/00-installer-config.yaml 改完后重启。 # This is the network config written by 'subiquity' network: ethernets: ens160: addresses: - 192.168.

By 夕元
随身携带的FreeBSD U盘系统——Nomadbsd

freebsd

随身携带的FreeBSD U盘系统——Nomadbsd

原文链接:https://ovea-y.cn/portable_freebsd_usb_drive_system__nomadbsd/ 简单介绍 NomadBSD是一个基于FreeBSD的系统,专为USB存储器准备的可持久化的live系统(配置完成后就可以当成随时Unix系统使用了,当然也可以作为主系统来使用)。它是一个开箱即用的桌面系统,可以自动检查插入设备的硬件并完成设置。 FreeBSD是一个自由开源的类Unix操作系统,源自伯克利软件发行版(BSD),它是一个完整的操作系统,该项目提供内核、设备驱动程序、用户空间实用程序和文档(而Linux不提供用户空间实用程序和文档),FreeBSD系统具备一个安装和日常使用说明文档:https://docs.freebsd.org/en/books/handbook/。除此之外,FreeBSD具有很多有趣的技术实现,例如**Jails、Bhyve**等。 FreeBSD 的大部分代码库已成为其他操作系统不可或缺的一部分,例如Darwin ( macOS、iOS、iPadOS、watchOS和tvOS的基础)、Tr

By 夕元
F2FS介绍

android

F2FS介绍

原文链接:https://ovea-y.cn/f2fs_simple/ 一、背景介绍 一个对基于NAND并且具备FTL(闪存转换层)的闪存设备友好的文件系统,该文件系统依赖于FTL来处理写操作。F2FS对FTL的支持,在于一开始就将存储空间划分为若干个大小相同的segment,然后多个segment由section进行管理。F2FS期望section大小与FTL中垃圾收集单元大小相同。 需要注意的是,FTL一般处于具备SCSI/SATA/PCIe/NVMe接口的闪存中。 1.1 FTL的原理 FTL简单来说就是系统维护了一个逻辑Block地址(LBA,logical block addresses )和物理Block地址(PBA, physical block addresses)的对应关系。 这样就不需要操作系统额外针对闪存设备进行额外的优化了,优化由闪存本身内建的微型系统来完成(例如磨损均衡,废块回收等)。 举一个例子,FAT文件系统,它有很大的概率会在数据读写的过程中对同一逻辑地址的存储空间进行操作,如果没有优化操作,对应的

By 夕元
Windows 11使用WSL2进行日常工作测试

windows

Windows 11使用WSL2进行日常工作测试

原文链接:https://ovea-y.cn/windows11_uses_wsl2_for_daily_work_testing/ 背景介绍 由于Linux上缺少很多常用的软件,并且Linux加上图形界面时,有时会出现很多匪夷所思的BUG(包括但不限于压缩文件的默认打开方式变成了文本编辑器、界面卡死等情况),因此将工作流迁移到Windows上也不失为一种选择。 WSL 2相比WSL 1最大的缺点就是它运行在虚拟化层中,并且对NTFS的读写性能极差!(还有一个问题是硬件和网络端口不再共享了)但是优点是它是完整的linux系统,可以发挥Linux全部的功能。 如果要使用WSL 2进行日常工作,就必须避免使用NTFS,而是使用其他Linux上原生支持的文件系统。本篇文章的重点就是如何让WSL 2用上原生支持的文件系统。 配置环境 1. 启用Linux子系统功能(需要管理员权限),下面这个指令可以自动配置好所有环境,默认使用WSL 2,Ubuntu系统。 wsl --install 2. 重启系统,重启后会自动弹出下面这个安装框

By 夕元
Windows11使用WSL2挂载VHDX(虚拟磁盘)

windows

Windows11使用WSL2挂载VHDX(虚拟磁盘)

原文链接:https://ovea-y.cn/windows11_uses_wsl2_to_mount_vhdx/ 背景介绍 正如此前介绍的直接挂载磁盘所说的那样,无法使用trim对支持区块自动回收的磁盘触发该操作,使用VHDX就可以解决这个问题,Windows会定期同时对VHDX的数据进行trim操作,也可以在WSL2使用fstrim进行该操作。 使用VHDX还有一个好处,有时大家可能并不想让一整块硬盘用于WSL2挂载,而只是其中一部分空间,此时VHDX就可以帮上大忙了! 关于WSL的安装和配置可以查看这篇文章:使用Windows11 WSL2进行Android系统开发 本篇文章只讲述WSL2如何使VHDX虚拟磁盘。 附图:支持Trim的HDD VHD/VHDX on SSD 创建VHDX并挂载 1. 创建VHDX 2. 挂载VHDX并初始化 # Windows (管理员权限) GET-CimInstance -query "SELECT * from Win32_DiskDrive" # 执行上面的指令后会得

By 夕元
Fuse学习

fs

Fuse学习

原文链接:https://ovea-y.cn/fuse_simple/ 什么是Fuse? Fuse是一个用户空间文件系统的运行框架。它由一个内核模块(fuse.ko)、一个用户空间的库(libfuse.*)和一个挂载工具(fusemount)组成。 💡 ko是kernel object的缩写,和so库类似,都是为了模块化实现。内核把核心主干框架之外的功能拆解成模块,需要的时候就加载 ko 模块,不需要的时候卸载即可。这样带来的好处就是方便开发和使用,保持内核的核心代码极度精炼。 Linux的文件系统都是运行在内核态的,因此如果想实现一个新的文件系统,就需要让其运行在Linux Kernel中。 Fuse,即implementing filesystems in user space,在用户空间实现文件系统。 有了Fuse之后,开发者就可以在用户态开发自己的文件系统,相比于必须要运行在内核态,在用户态开发文件系统更好调试,并且不会导致Kernel崩溃,可以大大地缩短开发周期。 Fuse的文件系统类型 fuse 这是最常用的挂载Fu

By 夕元
使用Windows11 WSL2进行Android系统开发

android

使用Windows11 WSL2进行Android系统开发

原文链接:https://ovea-y.cn/using_windows_11_wsl2_for_android_system_development/ 背景介绍 由于Linux上缺少很多常用的软件,并且Linux加上图形界面时,有时会出现很多匪夷所思的BUG(包括但不限于压缩文件的默认打开方式变成了文本编辑器、界面卡死等情况),因此将工作流迁移到Windows上也不失为一种选择。 WSL 2相比WSL 1最大的缺点就是它运行在虚拟化层中,并且对Windows磁盘的读写性能极差!毕竟切换成使用网络实现方式将Windows的分区挂载到WSL 2了(还有一个问题是硬件和网络端口不再共享了)。但是优点是它是完整的linux系统,可以发挥Linux全部的功能(但是systemctl依旧不可用)。 如果要使用WSL 2进行日常工作,就必须避免使用NTFS,而是使用其他Linux上原生支持的文件系统。本篇文章的重点就是如何让WSL 2用上原生支持的文件系统,以及如何让USB设备接入WSL 2两大部分内容。 WSL2具备的优点: * 完整的Linux内核支持

By 夕元
Ubuntu多硬盘luks全盘加密自动解锁(硬件变更后失效)的方法

ubuntu

Ubuntu多硬盘luks全盘加密自动解锁(硬件变更后失效)的方法

原文链接:https://ovea-y.cn/ubuntu_mutli_disk_luks_full_encrypt_and_auto_unlock/ 简介 大家都知道,Linux现在用Luks全盘加密一直有一个痛点,就是每次开机都需要输入解密硬盘的密码,之后又要输入用户密码,非常的麻烦!本文正是为了解决这个问题诞生的! 本文多硬盘加密带来的效果是,当你的硬盘被拔出,其他人试图拿到数据时必须需要密码。而硬盘如果一直留在原来的主机中,且硬件没有发生大的变化,则不需要密码即可自动解密硬盘开机。 密钥验证逻辑链路如下: 使用TPM芯片验证当前环境是否可信,如果可信的话,则释放密钥给系统硬盘。系统启动后会释放其他硬盘的密钥来进行解锁。 其中任何一个链路被破坏,都将无法再自动解锁,必须输入密码。(其实这里有个可改进的地方,如果System Storage不是通过TPM解锁的,则销毁解密其他存储器的密钥) 1. 在安装Ubuntu的时候,进行仅对根目录进行加密 2. 设置根目录在开机时通过tpm 2.0硬件自动解密 安装所需工具

By 夕元