todo 和一些想之后看的资料
You can't connect the dots looking forward; you can only connect them looking backwards.
So you have to trust that the dots will somehow connect in future.
You have to trust in something - your gut, destiny, life, karma, whatever.
This approach has never let me down, and it has made all the difference in my life.
你展望人生的时候,不可能把这些点连起来;只有当你回顾人生的时候,才能发现它们之间的联系。
所以你必须有信心,相信这些点总会以某种方式,对你的未来产生影响。
你必须相信一些事情----你的勇气、命运、人生、缘分等等。
这样做从未令我失望,反而决定了我人生中所有与众不同之处。
> 乔布斯在斯坦福大学毕业典礼上的演讲
-
- 编译原理复习
-
迁移 nixos
- 一段时间不
pacman -Syu
,就会有些包因为版本问题没办法使用 - 看看迁移成本,以及看看,以及 nix 管理方式下,在想尝试新东西的时候,会不会很繁琐
- ok, nix shell, 完美
- 流程:
- nix 基础
- 系统盘
- 初始化nix配置
- 数据备份
- 系统安装
- 一段时间不
-
emacs, elisp
- common ansi lisp
- Emacs Lisp 简明教程
-
effective cpp
- 主要是为了刷题,同时复习一下cpp
-
- star 不少,可以过一遍,看看有没有自己眼生的,总结到 linux.md 或者 bash.md 中
-
NAS 搭建 && 数据备份
- 参考:ntzyz, nas 和数据备份
- 主要是因为网易云音乐相关,想搞个公共存储
- 网易云音乐解密+备份+同步 脚本
-
使用 make 安装 dotfiles
- 参考: https://github.com/jessfraz/dotfiles
- 主要是为了解决 home 下软链目录还是软链文件的问题,stow 会自动 merge ,这会导致目录结构不同时,行为不一致
-
csapp
-
ucore
-
博客
- 完工遗留的 blog 草稿
- 博客里面,写上今年规划,以及多写一些博客吧
-
深度学习进阶,自然语言处理
- 主要是用于整理日记,进行总结
-
linux 系统编程
- c 实现https
- traceroute 实现
- nginx转发
- markdown preview
- awesome rss
-
cron 上传 rss 数据库文件
-
gnu 加密 dotfile 敏感文件
-
容器中设置host代理
docker run -it \ -e http_proxy="http://host.docker.internal:6152" \ -e https_proxy="http://host.docker.internal:6152" \ -e all_proxy="socks5://host.docker.internal:6153" \ ubuntu /bin/bash
-
- tempral 框架
- c 实现文件上传下载
- clashtui
- 算了,还是直接wget 订阅链接比较简单
- dotfiles 实现 Dockerfile
- netty 框架源码
- Zmodem 协议,sz rz 实现远程图片上传
- 怎么触发local host的sz
- tmux中使用nvim 时错位
- 原因1:unicode 标准,不同版本,unicode字符宽度可能没有对齐,
- 原因2:windows上, 隐藏仿真层 ConPTY 会重写输出
- tmux: ambiguous double width / single width characters rendered differently under tmux
- 应该是这个,mac上ssh链接,没有这个问题。windows上 可以复现。之后强制调用 openssh 试试
- 逆向工程
- utools 禁用更新
- 通过network socket 控制 nvim unix domain socket 的 client 的 输入
- nvim 启动server后,会有一个 unix domain socket 进行通信
- remote 端,通过tcp socket和本地机器通信
- 然后通过管道连接 unix domain socket client 的输入和输出
- (总感觉还不如ssh呢,ssh至少人家有加密)
- 编程范式
- c的热重载
- c 实现旋转面包圈
- 计算机图形学,下面可以找到公开课
- Spinning Cube
- 旋转矩阵
- hash可视化
- MIT - 6.824 分布式课程
- MIT 6.828 JOS与NJU ICS NEMU源码精读
- game101 GAMES101: 现代计算机图形学入门
- lc-3
- 编译原理
- 计算机导论:CS 50
- 清华大学 ucore OS
- MIT 6.828: Operating System Engineering
- SysY 语言编译到 RISC-V-北大编译实践在线文档
完成项会可能继续完善更新,以下不一定为最新。 详细todo会具体在文件中使用TODO标出。个人使用folke/todo-comments.nvim查询todu项。
- 长期
- java编程思想 整理
- 计算机网络完善
- 操作系统完善
- Java 全栈知识体系
- 学习深入+笔记完善
- 微服务架构
- 分布式系统相关
- 数据库架构
- 待完善/整理
- 设计模式
- 编译原理
- zookeeper完善
- java并发笔记完善
- RabbitMQ基础整理
- 鉴权方式整理
- CORS跨域完善+整理
- linux常用命令&工具系统整理
- bash编程系统整理
- 鉴权认证
- 分布式缓存算法整理
- JVM字节码与类的加载
- JVM性能监控和调优
- 各种加密算法
- regex系统整理
- html,css,js 历史笔记+资料整理
- latex 基本语法(vim-latex&texlab环境搭建时有练习,有时间再整)
- nginx&lvs 整理
- 待继续学习
- Undertow
- Mysql XA
- Mocikto框架
- JOOQ框架
- jersey框架
- SpringBatch
- SpringData
- Cassandra
- xdb
- elasticsearch
- TensorRT
- React
- 练手项目:浏览器主页私人定制
- 练手项目:个人博客定制
- React-Native
- 练手项目:记账软件
- Vue
- 练手项目:博客评论系统前端
- 常用JVM
- electron
- 网易云 音乐可视化软件 音乐频谱库vudio.js
- 大数据:数据湖,湖仓一体,delta lake
- 对象存储,apache ozone,以及其他存储概念
- 中间件Nacos
- 阅读书目
个人习惯在实体书,或者使用 知之阅读 做一些读书笔记。markdown版笔记主要针对一些工具书
- 代码整洁之道
- 重构:改善既有代码设计
- 《操作系统导论》(OS Three Easy Pieces)
- clickhouse 原理解析与应用实践
- 数据密集型应用系统设计
- 深入理解现代操作系统
- Operating Systems:Three Easy Pieces
- 冒号课堂
- Linux C 编程一站式学习
- Redis设计与实现
- TCP/IP 详解
- 大数据笔记整理完善(抽时间零碎)
- hadoop+hive+hbase
- Spark
- Flink
- ELK
- 短期小任务
- Gossip 协议
- Raft 协议
- SPEL
- 阿里巴巴数据库内核月报目录爬虫
- lang
- C/C++
- 10分钟定时截图工具
- 动态桌面,展示 todo
- linux 触摸板驱动。参考:OS-X-Voodoo-PS2-Controller
- go
- 练手项目:博客评论系统后端,针对业务逻辑编写测试
- lua
- 实现markdown标题编号nvim插件
- 扩展,实现侧边栏。
- 双链生成插件(基于标题?tag功能?lsp补全?),用来优化YourBrain思维导图
- 实现markdown标题编号nvim插件
- TypeScript
- 基础
- 深入
- 命令行工具开发
- 练手项目:kakuyomu 小说终端阅读器(包含登录功能)
- php 工作中,有项目用,可以看看
- Elixir
- rust
- kotlin
- poweramp 联网获取歌词插件,说不定可以基于这个做二次开发LyricsForPowerAmp
- lisp
- ruby
- C/C++
- 机器学习&深度学习
- opencv 系统整理
- 深度学习笔记系统整理(暂时抽不出时间)
- 其他
- 歌词动效
- amazarashi 专辑里面的效果
- 网易云,节奏前线 效果
-
理解docker基础—文件系统隔离:https://juejin.cn/post/6953648834652143629
-
paas相关资料:
-
docker 从入门到实践 (作为整体结构,docker体系说明很全,基础笔记也很详细)
-
docker 宿主机 与 容器 进程对应关系
- nvim markdown outline插件实现:https://github.com/Scuilion/markdown-drawer ui代码可以看一下
- null-ls:
- shellcheck添加code
- on_attach添加 key_binding
- nvim配置优化
1. 删除 cmd 2. 插件变量重命名viewBind。vim.opt_local for set 3. packer,转为全lua 4. 启动速度优化配置 5. whickkey.nvim 6. message 提示插件
- 获取所有highlight:
so $VIMRUNTIME/syntax/hitest.vim
- nvim whichkey支持显示keymap.set里面的desc属性,可以看看不使用wk.register。以及一些group name能不能set到 nop 实现就能统一mapping格式了
- feline 配置参考: feline nightfox
- 值得一抄
- lsp signature提示支持
- pyright 需要file-based 请求cancelation机制,当前nvim似乎不支持
- relative number 位置问题
- cmp优化
- pyright优化
- nvim lsp progress
- vim 命令行中,读取register,使用 ctrl-r + register_index
- glepnir/nvim, epoch.lua实现了自己的简单补全方案
- nvim venn ascii draw plugin
- nvim LSP: semantic tokens support
- nvim 布局预定义 folke/edgy.nvim
- onedark主题
- neovim插件尝试:ThePrimeagen/harpoon
- vim:
- tags管理:ludovicchabant/vim-gutentags,大型项目可能需要ctags跳转
- telescope 支持 visual模式
- nvim展示图片,inline graph protocol
- vim quickfix 高级使用
- vim text object 扩展
- target.vim
- mini.ai
- awesome nvim code runner
- overseer
- toggleterm
- 要看下不kill进程的bug修了没, mac上没问题
- jedrzejboczar/possession.nvim
- 感觉能替代startify,通过hooks和user_data
- 有一些不错的插件
- Astronvim里面的插件可以借鉴一下
- nvim-java-ide
- 比较完整的vim学习笔记
- 几个可以尝试的插件
- nvim-bqf better quick fix,可以用来批量替换
- 不过普通的 quickfix 好像也行
- incline.nvim 显示窗口名称,但是会遮盖,所以不是太想用
- nvim-bqf better quick fix,可以用来批量替换
- pantran.nvim, translate plugin
- markdown-preview.nvim 支持remote vim + local browser
- telescope 辅助插件,支持rg参数
- mapping配置改为 require("whichkey").register
- 主要是为了支持 buffer mapping 的 prefix 展示
- 处理下格式,whichkey最新版本,参数格式有变
- git clone 的时候指定一下commit-id
- host: iterm2+tmux, ssh: nvim-0.10 导致host 的 tmux崩溃
- 设置
TMUX
环境变量:TMUX="tmux" nvim
- 设置
- lsp semantic token highlighting 优先级调成比 treesitter高
- 这样就能实现vscode上,引用不存在成员,不highlight为红色的效果了
- 当前默认关了lsp的语义高亮
- lisp编辑辅助插件:nvim(parpar) = emacs(Parinfer + Paredit)
- oil.nvim
- compilation模式,以及跳转到第一个error处
- 远程开发模式tramp
- god mod, 类似vim的模式切换
- embark, 另一种思路的which-key替代工具
- emacs 入门教程
- emacs lisp简明教程
- emac chinese document
- 中英混打:https://emacs-china.org/t/os-smart-input-source/13436
- org, org-roam(obsidian的双链)
- 强大的org mode(https://www.zmonster.me/2015/07/12/org-mode-introduction.html)
- emacs甚至支持ditta,并输出图片。https://ditaa.sourceforge.net/
- 从操作系统架构的角度谈Emacs的学习
- Emacs Lisp 简明教程
- doom emacs
- Centaur Emacs
- emacs 作者 Richard Stallman 我的Lisp经历和GNU Emacs的开发
- emacs2ram,把emacs放到内存中
- 21 天学会 Emacs
- emacs zenburn theme, 感觉看起来不错
- Emacs 自力求生指南 ── 来写自己的配置吧
- lisp edit
- lispy
- lispyville: lispy + evil
- parinfer
- paredit
- org-mode 编辑大文件
- Emacs smartparens auto-indent
- simple c mode
- 一些杂乱的emacs中文文档,可以过一遍
- awesome emacs
- Emacs beginner resources
- 关于 Emacs 中的变量你需要知道的事情
- manateelazycat: 我平常是怎么使用 Emacs 的?
- 有非常多花里胡哨的东西,我估计是不会用的。有太多的第三方依赖项,太脏了。
- 尤其是那个ESA
- 而且有不少人性化的功能,都是vim自带的,这里面都是自定义elisp函数实现的,而且需要自己考虑绑定的key吧
- 这也让我看到了emacs,不人性化的地方有不少
- 作为编辑器,inbox的功能,我个人还是更喜欢vim了。
- Emacs 插件开发手册
- 配置emacs前必须要看一下,插件加载的流程
- 专业emacs入门
- org-modern
-
python debug config snippet
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Python: Current File", "type": "python", "request": "launch", "program": "${file}", "console": "integratedTerminal", "justMyCode": true }, { "name": "Python: Celery worker", "type": "python", "request": "launch", "module": "celery", "console": "integratedTerminal", "args": [ "-A", "superset.tasks.celery_app", "worker", "-l", "info", "-P", "solo", ], "justMyCode": false // 生产任务: celery --app=superset.tasks.celery_app beat // 或者和beat的debug交替执行 }, { "name": "Python: Celery beat", "type": "python", "request": "launch", "module": "celery", "console": "integratedTerminal", "args": [ "-A", "superset.tasks.celery_app", "beat", "-s", "./superset/app/" ], "justMyCode": false }, { "name": "Python: Flask", "type": "python", "request": "launch", "module": "flask", "env": { "FLASK_APP": "superset/app.py", "FLASK_ENV": "development", "FLASK_DEBUG": "0" }, "args": [ "run", "-p", "8066", "--with-threads", "--debugger", "--host=0.0.0.0", ], "jinja": true, "justMyCode": false, "console": "integratedTerminal" }, ] }
-
bash的case与shift:
while [ $# -gt 0 ] do case $1 in -h|--help) print_usage; exit;; # For options with required arguments, an additional shift is needed. -i|--ip) IP="$2" ; shift;; -p|--port) PORT="$2" ; shift;; -f|--file) FILE="$2" ; shift;; -t|--type) TYPE="$2" ; shift;; (--) shift; break;; (-*) echo "$0: invalid option $1" 1>&2; exit 1;; (*) break;; esac shift done
-
tar『-C』说明
# 解压后,会得到output/${APP}/....,这种方式会保留文件夹层级 tar -czf output/${APP}.tar.gz output/${APP} # -C 相当于cd到指定目录再压缩,后面跟着一个".",表示压缩 "output/${APP}" 目录 tar -czf output/${APP}.tar.gz -C output/${APP} .
-
What is the difference between the Bash operators [[ vs [ vs ( vs ((?
-
what are the differences between
==
and=
in conditional expressions? -
ranger, q quit, Q quit and cd to last dir
function ranger { local IFS=$'\t\n' local tempfile="$(mktemp -t tmp.XXXXXX)" local ranger_cmd=( command ranger --cmd="map Q chain shell echo %d > \"$tempfile\"; quitall" ) ${ranger_cmd[@]} "$@" if [[ -f "$tempfile" ]] && [[ "$(cat -- "$tempfile")" != "$PWD" ]]; then cd -- "$(cat -- "$tempfile")" || return fi command rm -f -- "$tempfile" 2>/dev/null }
-
ncat/nc/netcat 传输文件
-
cat /dev/null
-
ANSI Escape Sequences
- gcc升级,及标准库升级
- 理清gcc、libc、libstdc++的关系
- linux 内核理论相关
- locale问题
- c相关技术栈知识
- An introduction to Linux's EXT4 filesystem
- 跟我一起写makefile
- Unix domain socket 和 TCP/IP socket 的区别
- perror
- Linux的.a、.so和.o文件 对比 window下的dll,lib,exe文件
- linux inotify机制
- 不能对逐字节分析感到恐惧
- elf文件分析
- tcp/ip 流量分析
- iptable debug
- java 字节码文件解析
- ....
- glibc版本太低,打包库并修改依赖路径
- gcc、glibc、GLIBCXX、libc++、libstdc++、linux 内核。关系、版本关系以及编译依赖
- gcc8编译
- gdb
- 前端
- gf
- gf2
- 也能调试汇编
- 前端
- 2 years of learning c
- 如何清理deleted进程占用的空间,除kill进程外
- tmpfs 重新划分
- linux虚拟分卷划分分区
- 浅谈C/C++编程中的字符编码转换
- glibc38 升级步骤、问题、原理
- linux FHS
- Linux thermal子系统和lm_sensors用户态工具
- initramfs和mkinitcpio
- 文件描述符占用磁盘问题
- systemd和systemctl详解
- 内存
- terminfo, TERM, curse
- Why does tmux set TERM=screen?
- Getting italics working correctly in tmux
- Possible colorscheme bug in Vim
-
set -g default-terminal "tmux-256color"
-
vim support
if $TERM =~# '\v(tmux.*)|(screen.*)' " set any of t_so, t_se, t_ZH, t_ZR that are necessary endif
- Checking how many colors my terminal emulator supports
- Clearing tmux terminal throws error: "'tmux-256color': unknown terminal type."
- Italic fonts in iTerm2, tmux, and vim
- How to actually get italics and true colour to work in iTerm + tmux + vim
- shell bash终端中输出的颜色和格式详解(超详细)
- curse, ncurse库
- linux 终端重新认识(2)——屏幕的输出
- Does tar create new inodes to be archived?
- x window / x11 / xorg
- picom
- picom-jonaburg-git
- archlinux配置文件,包括picom混色器。该作者的一些tmux等配置文件也可以参考下,比如tmux插件。
- dwm
- dwm arch cn wiki
- dwm配置
- ArchLinux+DWM不完全指北
- dwm patches 中文说明
- dwm status bar list
- 可以使用c实现,也可以使用bash脚本或者python、go啥的
- polybar
- eww, status bar and widget
- rofi, replace dmenu, rainmeter, utools
- Dunst, Notification
- 可自动构建 patch 的 dwm 和 dmenu
dotfiles:
-
dwm fork
-
dwm
- arch 安装
- mvnw
- X窗口管理器的原理剖析
- archlinux系统迁移
- 少数派上,这个人的文章可以看看
- check wake on lan
- dotfiles, alatritty配置,theme拆出来
- archlinux配置,eww的配置看起来挺酷的,也可以试试hyprland
- Tutorials/Using Other Window Managers with Plasma
- archlinux 软件降级 Downgrade
- 生成archLinux mirror list
- archLinux+dwm+st+ranger相关问题
- archlinux 笔记本,动作&硬件配置
- 合盖子动作处理
- HandleLidSwitch=lock
- systemctl restart systemd-logind.service
- archlinux cn
- arch 电量管理,thermald, tlp, laptop-mode-tools, powertop, acpi
- arch术语
- archlinux kernel parameters
- 安装 Archlinux 时的 ToDoList
- linux 体验优化
- Linux 基本目录规范 ——XDG
- cpu模式
- 风扇控制
- mosh 通过 ssf 进行tcp连接
- 主要是为了解决cpolar不支持udp的问题,抽时间可以研究下
- AUR(arch user package)管理工具 paru,与yay类似
- NixOS 与 Flakes 一份非官方的新手指南
- Nix 和 NixOS:你们安利方法错了
- nix基础
- Nix 详解(三) nix 领域特定语言
- 没有提供源码的专有软件,会通过patchelf ld-linux.so 位置到 /nix/store/xxx-glibc-xxx/lib. wiki 使用 nix 包管理器解决 glibc 兼容问题
- nixos wiki
- nix 学习经验:安装和打包
- Nix Reference Manual
- nix
- nix安装
- case记录:
- 因为没有使用FHS,所以一些工具一起使用的时候可能有问题, 比如
- vscode的terminal中使用gdb,需要使用 vscode FHS environment: Getting gdb to work in vscode
- No starship prompt under nix-shell?
- 因为没有使用FHS,所以一些工具一起使用的时候可能有问题, 比如
- 如果想学习操作系统,nix wrap了那么多层,是不是更需要理解,比较一下 nixos 和 arch 的根目录
- nix help links mangled
- nix --help 文档有问题, 多出了
8;;
- nix --help 文档有问题, 多出了
- nix working with local file
-
maven 源码和doc:
mvn dependency:sources mvn dependency:resolve -Dclassifier=javadoc
- python pkg_resouce,setup.py以及entry_points
- pytest基础使用
- python, 实现cheatengine类似的功能
- dataclass
__hash__
method - Python 闭包不支持修改 upvalue,有什么替代的解决方案
- 多线程模型:用户和内核线程对应关系。
- 计算机体系结构基础
- cfenollosa/os-tutorial
- 比较旧的os实现
- 深入理解操作系统
- linux-c
- 鸟哥linux基础
- archlinux
- 鸟哥linux基础
- 操作系统导论
- linux-c
- 多路复用
- 含桌面的完整操作系统 Essence
- TempleOS
- tmux 插件列表
- tmux status line教程
- vim, tmux 切换优化
- tmux nest
- tmux
- 命令
- set default-command 'bash --init-file .....'
- select-pane -Z: change pane when zoom
- session保存:tmux-resurrect
- tmux 剪切板互通处理
- 命令
- vim, tmux剪切板互通
- General-purpose dotfiles utilities
- dotfile manager: stow
- stow 默认push,
-adopt
会pull - 会将package下的文件,link到指定目录。
- 比如
/usr/local/stow/ruby/bin/ruby
, stow -S ruby
后- 默认link到
/usr/local/bin/ruby
,也就是把stow dir + package
替换为了target dir
- 比如
stow -t ../stow_target_dir -S package_names -n -v
: 展示之后要做什么
- stow 默认push,
- dotbot
- dotfiles + stow example
- awesome-dotfiles
- git bare
cd && git init --bare $HOME/.dotfiles
alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
- chezmoi 和 yadm,都类似是git bare的封装版本。
-
说实话我不喜欢太多的依赖
-
yadm 使用教程 中提到 /etc配置,不过看起来是两个repo
# 使用.yadm作为yadm的系统文件管理目录 alias sysyadm="sudo yadm -Y $HOME/.yadm"
-
- nginx server块中的hostname
- nginx配置中 server_name作用
- celery+redis 探究
- caddy, 替代nginx
- Amazon Glue集成Delta Lake构建事务型数据湖上的流式处理
- Delta Lake 是什么?
- 大数据理论体系
- elk 中文指南
- Distributed System: DFS系列 -- NFS, AFS & HDFS(GFS)
- spark 性能提速
- python实现反向传播
- 文图生成模型架构
- nlp 入门
- 全连接,python实现
- 大模型(llm)学习笔记(让天下没有难学的大模型)
- llm 实现:c/cuda实现gpt-2
- omniparse 将视频,图片等转换为markdown、json等
- 自然语言处理,分析日记
- vim命令模式技巧,regex 速查表
- 正则表达式,非捕获分组,\b
- rpc, thrift协议,pd协议
- sprintcloud 使用 http协议实现rpc
- https接入流程
- nerd 3.0版本,图标码值位置整体调整
- websocket, wss协议
- websocket socket.io状态码
- wasm(webassembly) wasi wapm 技术
- 免费frp服务,腾讯云不打算续了
- 完全免费:https://freefrp.net/
- 有付费节点:https://www.mossfrp.top/
- go,实现读取浏览器cookie: https://gist.github.com/dacort/bd6a5116224c594b14db
- 设计数据密集型应用
- p2p 打洞
- frp p2p
- 基于libp2p的 go工具
- natmap ssh打洞
- Wireguard 原理
- 家庭网络无公网 IPv4 地址异地无感知远程访问家中服务的一个解决方案(NATMap+OpenWrt+Surgio+GitHub Action+Gist+Surge/Stash/Clash)
- apache bench压测工具:ab
- ssh p2p
- NAT
- 百星 宿迁5元NAT
- 内网穿透工具:
- alist,支持多存储的文件列表程序
- tui项目
- MIT 哲学,UNIX 哲学和 GUI 系统哲学,三种设计哲学间的交锋
- android 签名机制
- cdn 加速原理
- [neo4j图数据库]
- 聊天室协议
- MQTT (Message Queuing Telemetry Transport)
- AMQP (Advanced Message Queuing Protocol)
- DDS (Data Distribution Service)
- XMPP (Extensible Messaging and Presence Protocol)
- CoAP (Constrained Application Protocol)
- WebSocket
- IRC (Internet Relay Chat)
- RCS (Rich Communication Services)
- gpg
- yabai - a macOS Tiling WM.
- protobuf
- 由 Google 开发的二进制序列化格式和相关的技术,它用于高效地序列化和反序列化结构化数据,通常用于网络通信、数据存储等场景
- Iosevka字体
- 所有人都能懂的正规方程
- 线性代数,有时间可以复习下
- 网易云音乐ncm格式分析以及ncm与mp3格式转换
- CloudFlare Tunnel 免费内网穿透的简明教程
- anki 记忆卡,fsrs 算法
- 物联网 Arduino 入门
- firefox 主题