Obsidian使用 Spaced Repetition 制作闪念卡片

Obsidian使用 Spaced Repetition 制作闪念卡片

该文作为基础的闪念卡片的使用说明,介绍几种闪念卡片定义的方式,便于后续查阅,参考:

基本规则

  • 单个确定为 Flashcards 的笔记文件中可以存放多个闪念卡片。
  • 会根据记忆程度来设立需要复习的时间

卡片分组

在 Tab 中使用 / 可以引出卡片界面的层级,只需要在设置里设定最高层的分组,后续的分组用 / 引出即可。

image.png

使用以下的标签就能实现上述的分组结果:#vocabulary/day00;需要注意到的是只有至少一个问答时才会显示在对应的表中。


VsCode's RegExp Catch 正则捕获

VsCode's RegExp Catch 正则捕获

本篇简单介绍一些 VsCode 进行文本替换和查找的一些特殊的正则,该文会随着自己的使用来逐步记录,目前主要内容如下:

  • 捕获组合及其替换模式

这里不会介绍正则表达式的语法,对其基本语法感兴趣可以查看如下链接 VsCode使用正则表达式,以及我之前写过的基础的正则表达式 一文,下面进入正题;

Intro 正则搜索

正则表达式主要思路为模式匹配,通过符号表达来指定一种模式,识别所有符合该模式的字符组合,而非某些特定的文字,因此可以简化我们的搜索和替换过程,下面以一个例子说明。

例如有一个文件配置如下,而我们希望找到其中所有 user_config ,查看每个 user 的设置是否正确,由于 username 的长度和内容都不是一样的,所以这里需要使用正则来进行搜索:

1
2
3
4
5
zxc1_config=123
some content we dont need
asd2_config=234
and some other infomation or comment
qwer3_config=345

对应该场景的正则表达则为 +*_config= 或者 [a-z, 0-9]*_config= 等写法均可,效果如下:

image.png

可以看到我们需要的内容都被高亮了,这也就方便了我们进行一些复杂的文字处理,而搜索,也就是正则最基本也是最正统的用法,这里不再多说。


GoMetis00_INTRO
Photography00 XS20_Recipes
HomeAssistant01 入门基础篇

HomeAssistant01 入门基础篇

接下来本文安装的是 Container 版本的 HA,并非 Supervised 的版本,所以其中是不包含 Add-on 的,如果需要特定的 Add-on 的版本请注意。

基于本篇流程安装 HA 的前置条件是系统上已经安装好了可用的 Docker,该文会介绍 HA 和 HACS 的安装以及一些基础的配置。

HA & HACS 安装

本文安装于 Raspberry pi 4B,与其他操作环境可能会存在一些差异,要注意甄别。

HA

安装过程主要参考 Raspberry Pi - Home Assistant 中 Install Home Assistant Container 的章节,如果为其他的 OS 也可以在官网找到类似的指引,不过 docker 版本的差异应该不会特别的大,个人的 Docker Compose File 也已经上传到 GITHUB 可自行取用。

修改完 -v 的挂载目录以后(将数据保存在本地的目录)和 -e 的时区后,即可执行拉取和安装 docker,这里-v 挂载的本地目录要记得,后面有用。

1
docker compose up -d 

安装完后基于 Host 模式的 HA 会运行在 http://localhost:8123 中,localhost 也可以用 ip 替代。安装完后随着指引完成一些基础的设置,设置好默认的账号密码即可重启 docker 进入 HA 的界面;

到这里已经可以做一些基础的使用了,但是为了支持更多智能家具产品,往往需要安装第三方用户商店 HACS ,从中去下载对于其他智能家具产品的支持。

HACS

Home Assistant Community Store 第三方用户商店,便于下载各种各样的集成实现对于各个不同智能家具品牌和产品的支持。

各种不同版本的安装方式可以参考官方网页,以下只介绍基于 Container 的安装方式,官方提供了安装脚本,因此现在下载已经相对简单,具体如下:

  • 进入挂载的本地目录,执行下面命令,即包含了下载和执行。
1
wget -O - https://get.hacs.xyz | bash -

如果下不下来也可以直接打开网页复制进.Sh 脚本中;也可以去我的仓库中拉下来

安装完重启 HA,在集成页面添加集成,搜索 HACS,搜索到直接进行安装,跟随配置进行安装,并打开 GITHUB 进行登录和授权即可。


linux下载命令之Wget和Curl

linux下载命令之Wget和Curl

想要通过命令行直接下载文件,通常想到的就是下面的两个工具:wget 和 curl,下面简单介绍一下两者的使用。

Wget

wget 全称为 web get ,其基本用法为:wget [-para] url ,常用的参数有以下几种:

  • -O 指定下载文件的保存名称
  • -b 为后台下载模式
  • -P 下载到指定目录
  • -c 支持断电续传
  • -p 下载页面内的所有资源、包括图片视频等
  • -r 递归下载
  • -t 最大尝试次数
1
2
3
4
# 默认无需参数的情况下即会将文件下载到当前文件夹下。
# 也是最常见的用法,可以加入-c避免下载中断
wget url
wget -O file.tgz url

参考 Man Page 或者 ExplainShell 可以找到完整的参数列表;支持从文件中读取 url ;将 log 写入指定的文件等等功能;

可以看出 wget 是一个简单,专职的下载利器,无论是用来下载安装包还是 pdf 之类的东西是一个相当方便的下载工具。


NumpyConcatenate加速

NumpyConcatenate加速

多次循环进行 Numpy Concentrate 操作后,当原始数组变得过大的时,单步处理时间会逐渐变长,处理大量数据的时候时间成本极高。

解决思路

这里简单的讲一下问题的定位过程,通过装饰器 Check 每个函数的执行时间,重点关注执行时长逐渐变长的部分。

1
2
3
4
5
6
7
8
9
10
11
from time import time

def timer(func):
def func_wrapper(*args, **kwargs):
time_start = time()
result = func(*args, **kwargs)
time_end = time()
res = time_end - time_start
print("{} cost time: {} s".format(func.__name__, res))
return result
return func_wrapper

就会发现当 np.Concatenate 导致 Array 很大之后,运行就会逐渐减缓。由于运行缓慢是由于对大数组操作导致的,因此这里考虑将大数组切分成多个小数组,然后再最后进行合并。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
with open(file, 'r') as rf:
for line in rf:
...
new_row_array = ...
key = ...
if len(res_list[key][-1]) == 0 :
res_list[key][-1] = new_row_array
else:
if len(res_list[key][-1]) >= MAX_LENGTH:
res_list[key].append(new_row_array)
else:
res_list[key][-1] = np.concatenate([
res_list[key][-1], new_row_array
])
for i in range(len(res_list)):
res_list[i] = np.concatenate(res_list[i], axis=0)

可以看上述这段代码,通过对-1 的使用,来自动的切分 Array,最后再整体合并,这样就能避免每个数组过大的问题。

本地实验测试也成功,将原本耗时 400s 的处理过程减少到了 30s

Fi


树莓派02 家用服务器

树莓派02 家用服务器

树莓派家庭服务器的搭建以 docker 为核心,通过 docker 统一管理家庭服务,目前搭建的服务还在持续完善中,主要目的是为了方便日常使用、满足学习和探索的需求。

Docker 的安装这里不再赘述,参考 Docker Configuration01 Install on Linux 一文进行安装即可;本篇主要侧重于介绍部署的镜像和服务,以及简单介绍使用方式。

一些 Docker 容器推荐

这里推荐一些 Docker 容器:Alist、XiaoYa、PiDashboard、redis、mysql、portainer、memos、wikijs

相关的 Docker-Compose 文件会上传到AikenH/aikenh-DockerComposeYML (github.com)

数据库部署与远程连接测试

sqlite 3

Sqlite 与 Mysql 等不同,是一个无服务器、零配置的数据库,其更像是一个解析特定数据库文件的命令接口(CLI 工具),其将数据完全存储于一个单一的跨平台磁盘文件中;

由于 sqlite3 的特性,决定了其是一个轻量级不需要额外配置的数据库,但是在远程访问方面,只能通过文件共享来实现远程操作数据库。

大多数的 Linux 系统版本都会附带 SQLite 的安装,因此我们可以直接使用下面的指令验证一下是否安装:

1
sqlite3

如果没有安装的话,可以去官方的下载页面下载对应的预编译包,然后进行安装即可。

1
2
3
4
5
6
wget https://www.sqlite.org/2023/sqlite-autoconf-3420000.tar.gz
tar -zxvf sqlite-autoconf-3420000.tar.gz
cd sqlite-autoconf-3420000
./configure --prefix=/usr/local
make
make install

这里也提供使用 Docker-compose 安装的方式,但实际上看该数据库的特性,用 docker 安装的并不是推荐的选择。

参考资料:SQLite 3 Docker Compose – Mustafa Bugra

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '3'

services:
sqlite3:
container_name: sqlite3_container
image: nouchka/sqlite3:latest
stdin_open: true
tty: true
volumes:
#Modify following line
- path-to/your/databases/sqlite3:/root/db/
ports:
- '9000:9000' # expose ports - HOST:CONTAINER
restart: unless-stopped

如果是树莓派的 ARM64,可能需要使用另一个镜像

1
docker run --rm -it -v "$(pwd):/workspace" -w /workspace keinos/sqlite3

但是该镜像的使用方式,实际上就是将其当成一个命令来用,所以还是建议本机安装。


树莓派01 家庭影音中心

树莓派01 家庭影音中心

将 RaspBerry Pi 4B 作为家庭影视中心/机顶盒的核心就是 KODI 软件,这是考虑到以下的几点:遥控器的控制、对挂载 webdav 和其他的支持

最方便的方式可以选择以 KODI 为核心的两个 OS:LibreELEC、OSMC(推荐),这两个系统以 KODI 为默认启动,同时也支持远程登录和 Docker 部署等 Linux 的功能。后者更为推荐应该是前者的官方改进版本。

考虑到后续可能会将该 SD 卡用于其他用处,因此本文选择的是使用 RaspBerryPi OS 的方案,以下围绕该方案进行展开:

RaspBerry Pi OS+Kodi+Alist 方案探究

可以参考 trouble shooting,可以发现实际上安装 kodi 最简单的方式就是直接使用 apt,无需做其他的 PPA 添加。

安装Kodi

1
sudo apt-get install kodi

安装完后,使用 kodi 命令开启或者在开始菜单的软件中心中选择 kodi 打开。

设置 GPU 显存(硬解相关)

首先做一下固件的升级

1
sudo rpi-update

然后调整一下显存:系统设置里面将 gpu_mem 调高一些,我使用的是 4G,调整到了 256MB,切记不要调整太高,否则可能会开机失败,重启后查看显存是否设置成功。

查看 GPU 显存的方式:

1
vcgencmd get_mem arm && vcgencmd get_mem gpu

最后在 kodi 中查看相关的选项的开关情况:

参考资料:树莓派RaspberryPi 4B设置显存开启硬件加速 支持Emby|Plex|JellyFin转码 LiuJason’sBlog


Clash局域网代理共享

Clash局域网代理共享

本文介绍基于 Windows Clash Desktop 的代理服务器设置,可以为局域网内的设备提供代理服务,该方案可以解决一定的科学上网需求,但是没办法覆盖所有的场景,例如 PS5 的 Netflix ,其不走代理服务器,因此无法通过该方案解决,(软路由可破)

本篇的设置内容主要会从两个方面出发:一个是服务器的开启和防火墙的设置、另一个是客户端如何设置使用对应的代理服务器。

Clash开启代理服务器

Clash 作为局域网代理服务器开启的方式十分简单,主要是以下几步。

开启局域网访问 -> 设置端口,查看 ip -> 防火墙允许通行

配置代理服务器

开启局域网访问: Allow LAN 打钩即可。
端口:设置好想要的 mixport 即可。

image.png

防火墙允许通行: 防火墙-> 高级设置,找到 Clash 所有项,允许其在专用网络上通行。

image.png
查看 ip:命令行输入 ipconfig/ all 里面的 WLAN 模块,可以找到自己的局域网 ip

image.png