study

C++协程(Coroutines)

study

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

study

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 夕元
使用Coze(扣子)定制一个Android领域的专家

coze

使用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

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的作用,以及它如何影响智能指针所有权

cpp

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

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 夕元
Kotlin语言学习

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 夕元
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 夕元
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 夕元
使用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 夕元