跳到主要内容

· 1 分钟阅读

取中位数的方法

都是向下取整, 理解为数据丢失

  1. 直接int除以2
int a = x / 2;
  1. 位运算
int a = x >> 1;

· 3 分钟阅读

获取 API 访问权限 利用 Google Play Developer Publishing API 实现应用配置自动化,并将应用版本整合到您现有的工具和流程中。

  1. 打开 Google Play 管理中心(Google Play Console)
  2. 单击 账户详情 ,然后下滑找到并记下其中列出的 开发者账号 ID
  3. 单击 设置API 权限
  4. 单击 选择要关联的项目
  5. 单击 我同意创建新项目关联项目
  6. 服务账号 这一栏目里面有 单击 创建新的服务账号.
  7. 在弹出的对话框中的 Google 云端平台(Google Cloud Platform) 链接,该链接将打开一个新标签页:
    1. 搜索框 左边有一个 下来框, 如果显示 选择项目, 需要下来选择到 Google Play Console Developer
    2. 然后 创建服务账号
      1. 输入 服务账号名称 → 输入 服务账号说明
      2. 点击 创建并继续
      3. 单击 请选择一个角色 → 筛选框内输入 Service Account User 并选中筛选结果.
      4. 直接点击继续
    3. 得到一个账号后, 在操作那里有垂直三点图标, 点开选中 管理密钥添加密钥 → 选择 JSON 后直接创建.
    4. 这时候浏览器将会提示将文件保存在计算机上,并记住文件保存到的位置.
  8. 返回 Google Play 管理中心 标签页,然后点击 完成 以关闭对话框
  9. 然后底部就会出现一个新的服务账户 单击 授予访问权.
  10. 建议直接选择 管理员(所有权限)邀请用户发送邀请
  11. 完成.

· 5 分钟阅读

Lua 程序设计(第 4 版)

运算符

local a = 15
print(a ^ 2) -- 225

注释技巧

print("Hello world")

--[[ 加多一个`-`就可以解开这段代码的注释
print("Hello world")
--]]

---[[
print("Hello world")
--]]

加载文件

--- 打开指定的文件并将其内容作为 Lua 块执行。
--- 当不带参数调用时,`dofile` 执行标准输入(`stdin`)的内容。
--- 返回块返回的所有值。
--- 如果出现错误,`dofile` 会将错误传播给它的调用者(即,`dofile` 不在保护模式下运行)。
---@overload fun():table
---@param filename string
---@return table
function dofile(filename) end

内存回收

nil 赋值给全局变量时, Lua 会回收该全局变量.

主动内存回收 调用函数 collectgarbage()

---
--- 此函数是垃圾收集器的通用接口。它根据第一个参数 `opt` 执行不同的功能:
---
--- **"collect"**: 执行完整的垃圾收集循环。这是默认选项。
--- **"stop"**: 停止垃圾收集器的自动执行。收集器仅在显式调用时运行,直到调用重新启动它。
--- **"restart"**: 重新启动垃圾收集器的自动执行。
--- **"count"**: 以千字节为单位返回 Lua 使用的总内存。
--- 该值有一个小数部分,因此乘以 1024 给出 Lua 使用的确切字节数(溢出除外)。
--- **"step"**: 执行垃圾收集步骤。步长“大小”由`arg`控制。
--- 对于零值,收集器将执行一个基本(不可分割的)步骤。
--- 对于非零值,收集器将执行该内存量(以千字节为单位)已由 Lua 分配。
--- 如果该步骤完成了一个收集周期,则返回 `true`。
--- **"setpause"**: 将 `arg` 设置为收集器暂停的新值(参见第 2.5 节)。返回 `pause` 的前一个值。
--- **"incremental"**: 将收集器模式更改为增量。此选项后面可以跟三个数字:垃圾收集器暂停、步长乘数和步长。
--- **"generational"**: 将收集器模式更改为分代。此选项后面可以跟两个数字:垃圾收集器次要乘数和主要乘数。
--- **"isrunning"**: 返回一个布尔值,告诉收集器是否正在运行(即,未停止)。
---@overload fun():any
---@param opt string
---@param arg string
---@return any
function collectgarbage(opt, arg)
end

浅析lua异常捕获处理机制

lua 有两个函数可用于捕获异常:pcall 和 xpcall,这两个函数很类似,都会在保护模式下执行函数,效果类似 try-catch,可捕获并处理异常。

--- 在保护模式下使用给定的参数调用函数`f`。
--- 这意味着`f` 中的任何错误都不会传播;
--- 相反,`pcall` 会捕获错误并返回一个状态代码。
--- 它的第一个结果是状态代码(一个布尔值),如果调用成功且没有错误,则为真。
--- 在这种情况下,`pcall` 还会在第一个结果之后返回调用的所有结果。
--- 如果出现任何错误,`pcall` 返回 false 加上错误消息。
---@overload fun(f:fun():any):boolean|table
---@param f fun():any
---@param arg1 table
---@return boolean|table
function pcall(f, arg1, ...)
end

--- 这个函数类似于`pcall`,除了它设置了一个新的消息处理程序`msgh`。
---@param f fun():any
---@param msgh fun():string message handle
---@return any
function xpcall(f, msgh, arg1, ...)
end

对比两个函数,xpcall 多了一个消息处理参数 msgh。 对于 pcall,异常处理完时只简单记录错误信息,然后释放调用栈空间, 而对于 xpcall,这个参数可用于在调用栈释放前跟踪到这些数据。效果如下:

> f=function(...) error(...) end
> pcall(f, 123)
false stdin:1: 123
> xpcall(f, function(e) print(debug.traceback()) return e end, 123)
stack traceback:
stdin:1: in function <stdin:1>
[C]: in function 'error'
stdin:1: in function 'f'
[C]: in function 'xpcall'
stdin:1: in main chunk
[C]: in ?
false stdin:1: 123

值得注意的是, msgh 的传入参数是异常数据,函数结束时必须将这个数据返回,才能实现和 pcall 一样的返回值

· 2 分钟阅读

先决条件

  • Windows 10 1709 秋季创意者更新或者更高版本
  • 开启 适用于 Linux 的 Windows 子系统 功能
  • 其中有一步比较重要: 下载 Linux 内核更新包

安装 ArchWSL

  1. scoop bucket add extras
  2. scoop install archwsl

启动并初始化

设置 Root 密码

> arch.exe
[root@danyow]# passwd

设置默认用户

[root@danyow]# echo "%wheel ALL=(ALL) ALL" > /etc/sudoers.d/wheel
[root@danyow]# useradd -m -G wheel -s /bin/bash danyow
[root@danyow]# passwd danyow
[root@danyow]# exit
> arch.exe config --default-user danyow

重启 LxssManager (可选)

net stop lxssmanager | net start lxssmanager

初始化密钥环 keyring

> arch.exe
[danyow@danyow]$ sudo pacman-key --init

[danyow@danyow]$ sudo pacman-key --populate

[danyow@danyow]$ sudo pacman -Syy archlinux-keyring

添加源 aur

sudo vim /etc/pacman.conf
### 加入内容
[archlinuxcn]
Server = https://repo.archlinuxcn.org/$arch
### 结束
sudo pacman -Syy && sudo pacman -S archlinuxcn-keyring && sudo pacman -S yay

安装 glibc-linux4

sudo pacman -S glibc-linux4 or yay -S glibc-linux4

安装 fakeroot-tcp

yay -S fakeroot-tcp

安装 make gcc cargo

yay -S make gcc cargo

安装 genie-systemd-git

yay -S genie-systemd-git

· 1 分钟阅读

Windows

查看端口被占用

netstat –ano

netstat