Sunset Nexus

Break or remain silent

Latest

Android Common Kernel(ACK)

Android Common Kernel(ACK)

Android Kernel基于Linux Long Term Supported(LTS) kernel,并在此基础上添加了很多Android定制的Patch,形成了Android Common Kernels(ACKs)。 5.10及以上版本的ACK也被称为Generic kernel images(GKI) kernel。 GKI内核聚合了硬件无关的通用核心代码以及GKI模块,与Vendor模块分隔开来。 GKI为Vendor模块提供的接口,借助Kernel Module Interface(KMI)完成,KMI包含了一系列Vendor模块所需的函数和全局数据符号组成。 KMI的作用 ABI工具:https://android.googlesource.com/kernel/build/+/refs/heads/main-kernel/abi/ 一直以来,Linux Kernel对主线内核维护一套稳定内核ABI的想法不屑一顾,因为面临不同的工具链、内核配置和快速发展的Linux主线内核,要在主线中保持稳定的ABI是非常困难的。 而Google为了解决Kernel碎

By 夕元
香港银行开户指南

香港银行开户指南

注意:本文所有内容,都是需要前往香港的情况下才能使用! 本文主要介绍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 夕元