React笔记
Twitter/X 博主@_georgemoller的分享 主要记录Twitter博主@_georgemoller分享的React技巧。对于我这种React小白很使用。于是搬运过来,并附上个人的一些理解。如有问题请邮箱本人,欢迎各位指正。 Solve re-render issues with composition 个人理解:功能单一,利用组合模式减少耦合,带来不必要的重新渲染 Utility Types For Enhanced Reusablity 个人理解:Typescript Pick的使用 Bad use case for useCallback useCallback 使用在复杂逻辑的组件,简单组件不会消耗造成性能问题时不必使用 Intersection types to extends native props in a component ...
开源项目学习推荐
桌面客户端 tauri tauri 后端使用rust。 clash-verge-rev: 基于Mihomo内核的翻墙客户端GUI rust system-proxy的实现 Electron Electron 后端使用node。 everyone-can-use-english: 英语学习软件 项目结构清晰,可以参考学习 mihomo-party: Mihomo GUI 个人观点:tauri是webview+rust的实现,性能和打包的体积比较小,但是rust门槛高,tauri的生态可能比不上node。Electron是Chrome内核和NodeJS,入门门槛低,而且node的生态比较好。再不在乎包体积和性能的情况下,还是推荐Electron。 移动客户端 Flutter pilipala: 第三方bilibili客户端 使用Get做状态管理 使用Hive做本地存储 封装了dio网络请求 基于media-kit实现视频播放 Cashew: An app created to help users manage a budget and purchases flutter_cloud_music: 还原网易云,flutter SDK版本较低,依赖包有些缺乏维护 Taskez: A Productivity Mobile Application UI kit built with Flutter Web前端 React eidos: 类似notion的软件 使用zustand做状态管理 能够了解到PWA、serivce-woker、web-worker等 jsoncrack.com: json可视化展示 c-shopping: 基于Next.js的全栈购物网站 plane: Open Source JIRA, Linear, Monday, and Asana Alternative. Plane helps you track your issues, epics, and product roadmaps in the simplest way possible. 后端 Golang mihomo: 翻墙软件,ClashMeta 能够学习到各种翻墙协议的内容 asynq: 基于Redis实现的分布式任务 redis lua脚本的使用 golang 多个sever的启动与停止的实现 galene: The Galène videoconference server 了解WebRTC相关的指示 badger: KV存储引擎 能够学习到LSM树的实现 Rust xh: 类似于curl的命令行请求工具 数据分析与机器学习 handson-ml3: Hands-on Machine Learning with Scikit-Learn, Keras and TensorFlow (3rd edition) 100-Days-Of-ML-Code
学习rust
生命周期 rust自动推断变量的生命周期 fn longest(x: &str, y: &str) -> &str { if x.len() > y.len() { x } else { y } } ...
pipx使用
pipx是什么? 可以参加pipx的介绍。 作为一个python小白,看了几遍,搜索了多篇博客了解pipx是什么,仍然不懂是个啥。 我在这仅说明一下我自己的理解。pipx相当于一个安装工具。python有自己的安装包的工具pip。那么pip和pipx有什么区别呢? 如果直接pip安装包会安装在python目录下的site-packages下。由于这是个全局目录。如果在不同的项目里面,可能使用的各个包版本不同,可能会产生冲突。所以我们偏向使用一个干净的site-package。其实python提供了解决方案–虚拟环境。pipx只是基于这个概念,让使用者更好的使用。 注意 pipx 安装的是一些可执行的python应用。比如 poetry, jupyter等 简单使用 安装pipx brew install pipx pipx ensurepath 安装jupyter 可以使用--python参数指定虚拟环境python版本。如果不指定,使用的是你电脑上安装的最新的python`版本。 pipx install notebook --python=python3.11 --force 执行后, jupyter就会被安装在 ~/.local/pipx/venvs/notebook/bin。可以看到在pipx的venvs目录下面。也就说pipx安装的每个应用都会有自己的虚拟环境。 在写jupyter notebook的时候,我们可能需要numpy,panda等这些python库。所以我们需要将这些安装到notebook的虚拟环境中,才能使用 pipx inject numpy
正则表达式
元字符 正则表达式主要依赖于元字符。 元字符不代表他们本身的字面意思,他们都有特殊的含义。一些元字符写在方括号中的时候有一些特殊的意思。以下是一些元字符的介绍: 元字符 描述 . 句号匹配任意单个字符除了换行符。 [ ] 字符种类。匹配方括号内的任意字符。 [^ ] 否定的字符种类。匹配除了方括号里的任意字符 * 匹配>=0个重复的在*号之前的字符。 + 匹配>=1个重复的+号前的字符。 ? 标记?之前的字符为可选. {n,m} 匹配num个大括号之前的字符或字符集 (n <= num <= m). (xyz) 字符集,匹配与 xyz 完全相等的字符串. | 或运算符,匹配符号前或后的字符. \ 转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ | ^ 从开始行开始匹配. $ 从末端开始匹配. 简写字符集 正则表达式提供一些常用的字符集简写。如下: ...
Docker使用问题记录
安装Docker 参考Install using the apt repository # Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update ...
线性代数
最近在看 3Blue1Brown的Essence of linear algebra。预习一下大学知识。 线性变换 线性变换矩阵可以看作是变换之后坐标系的 i, j 单位向量 矩阵乘法 矩阵乘法可以是看作是从右到左进行多次变化。 同样的3维就是对3维空间进行变换。 行列式 行列式表示将面积缩放的大小 点积 在大学课堂上,老师说点积是向量长度和另外一个向量上在该向量方向上投影的积。但是一直不明白为什么。 其实可以把其中一个向量看成一种变换。从二维到一维的转换。 参考资料 Essence of linear algebra
各种你懂的协议
Socks5协议 具体协议过程参考理解socks5协议的工作过程和协议细节。这篇文章主要是通过代码去理解socks5协议。 实验条件介绍 命令行设置proxy export https_proxy=socks5://127.0.0.1:7891 http_proxy=socks5://127.0.0.1:7891 之后通过curl发起http请求。 curl www.baidu.com 这时候,curl这个命令就会走socks协议,并封装socks协议数据发送给socks5://127.0.0.1:7891。 协商阶段 根据参考资料,握手阶段-协商阶段发送的数据格式如下: +----+----------+----------+ |VER | NMETHODS | METHODS | +----+----------+----------+ | 1 | 1 | 1 to 255 | +----+----------+----------+ #上方的数字表示字节数,下面的表格同理,不再赘述 ...
新机必备软件
开发工具 科学上网 Clash.Verge Apple M芯片:Clash.Verge_1.7.2_aarch64.dmg Intel芯片:Clash.Verge_1.7.2_x64.dmg ClashX ClashX.dmg ClashX Pro ClashX Pro Homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 通过Homebrew安装的 brew install git go hugo git-lfs rust bruno sequel-ace node pnpm brew install --cask warp orbstack flutter losslesscut obsidian google-chrome ...
怎么写Makefile
基本语法 targets: prerequisites command command command 变量 声明变量 NAME=ClashV BINDIR=bin 使用$()来引用变量 PLATFORM_LIST = \ darwin-amd64 \ darwin-amd64-compatible \ all-arch: $(PLATFORM_LIST) ...