MacOS常用软件

聊天和社交 QQ - 80,90的青春。 微信 - 国内TOP1社交软件。 钉钉 - 阿里巴巴出品协同办公软件。 企业微信 - 腾讯出品协同办公软件。 飞书 - 字节跳动出品协同办公软件。 Telegram - 地下社交软件,通信加密。 X(原twitter) - 地下社交软件,了解国内外大事。 XDeck 𝕏桌面客户端 Franz 多合一聊天工具 邮箱工具 Spark 输入法及键盘扩展 AutoSwitchinput 当你在Mac上打开不同的软件的时候,它可以自动帮你切换中文和英文输入法 Input Source Pro,推友开发的一个输入法自动切换工具 Tickeys 键盘打字风格模拟应用, 支持 Cherry轴等多种风格. keycue 快捷键辅助应用, 帮助记忆快捷键. KeyKey macOS 上优雅好用的键盘打字练习。 Karabiner-Elements 键盘映射工具 翻译和外语学习工具 bob - 翻译神器 EasyDict GoldenDict 有道词典 deepl Eudic 新闻及阅读 NetNewsWire rss阅读软件 Reeder 界面优美的RSS订阅应用. 浏览器 Chrome - Google出品,全球最流行的浏览器。 vivaldi 我的偏爱浏览器,前opera团队开发的。 Safari - Apple自己的浏览器,毋庸置疑的好用。 Edge - 微软出品,基于Chromium内核,IE浏览器的替代者。 Firefox - Mozilla出品,早年开发者必备。 Tor - 洋葱浏览器,可浏览AW。 360极速浏览器Pro - 目前Mac上支持Flash的浏览器。 下载及同步工具 Downie4 - 视频下载工具,可以下载YouTube,bilibili等视频网站的视频,并且是满速下载。...

在rust中使用duckdb的一些笔记

基本使用 添加cargo包 在cargo.toml中添加 [dependencies] duckdb = {version = "1"} 示例代码 use duckdb::{params, Connection, Result}; use duckdb::arrow::record_batch::RecordBatch; use duckdb::arrow::util::pretty::print_batches; #[derive(Debug)] struct Person { id: i32, name: String, data: Option<Vec<u8>>, } fn main() -> Result<()> { let conn = Connection::open_in_memory()?; conn.execute_batch( r"CREATE SEQUENCE seq; CREATE TABLE person ( id INTEGER PRIMARY KEY DEFAULT NEXTVAL('seq'), name TEXT NOT NULL, data BLOB ); ")?; let me = Person { id: 0, name: "Steven".to_string(), data: None, }; conn....

跟AI学习Rust的Atomic

QA 如何理解rust的atomic,常见操作有哪些 Rust中的原子类型(atomic types)是一种用于并发编程的工具,它们提供了对共享内存的安全访问机制。以下是对Rust原子类型的理解和常见操作: 理解Rust的atomic: 原子操作是不可分割的操作,它们在多线程环境中能够保证数据的一致性。 Rust的原子类型位于std::sync::atomic模块中。 原子类型可以在多个线程间安全地共享,无需使用互斥锁。 它们通常用于实现无锁数据结构和同步原语。 常见的原子类型操作: 加载(load): let value = atomic.load(Ordering::SeqCst); 存储(store): atomic.store(new_value, Ordering::SeqCst); 比较并交换(compare_and_swap): let result = atomic.compare_and_swap(expected, new, Ordering::SeqCst); 获取并增加(fetch_add): let previous = atomic.fetch_add(1, Ordering::SeqCst); 获取并减少(fetch_sub): let previous = atomic.fetch_sub(1, Ordering::SeqCst); 获取并按位或(fetch_or): let previous = atomic.fetch_or(0b0001, Ordering::SeqCst); 获取并按位与(fetch_and): let previous = atomic.fetch_and(0b1110, Ordering::SeqCst); 获取并按位异或(fetch_xor): let previous = atomic.fetch_xor(0b1111, Ordering::SeqCst); 这些操作都需要指定内存顺序(memory ordering),如SeqCst(顺序一致性)、Relaxed(松散)等,以控制操作的同步级别。 需要注意的是,虽然原子操作提供了线程安全的访问,但它们的使用可能会影响性能。在实际应用中,应根据具体需求选择合适的同步机制。 Rust的atomic常见内存顺序有哪些,它们各自的应用场景有哪些 Rust中的内存顺序(Memory Ordering)是一个重要的概念,它定义了原子操作如何与其他内存操作交互。在std::sync::atomic::Ordering枚举中,Rust提供了以下几种内存顺序选项: Ordering::Relaxed Ordering::Release Ordering::Acquire Ordering::AcqRel Ordering::SeqCst 这些选项的主要区别如下: Ordering::Relaxed(松散顺序) 最宽松的内存顺序 只保证原子操作本身的原子性 不提供任何同步或顺序保证 性能最好,但最难推理...

GIT 别名的 10 个级别【机翻】

第一部分:初级到中级概念 原文 https://www.eficode.com/blog/10-levels-of-git-aliases-beginner-to-intermediate-concepts 您是否知道 Git 可以通过多种方式根据您的需求进行定制? 在 Git 中创建别名是一项强大的功能,它允许您为更长的 Git 命令(以及更多命令)定义“快捷方式”。对于某些人来说,它只是一个让命令行 Git 使用变得可行的工具,但我将向您展示 Git 别名是如此强大,它们可以帮助使命令行成为使用 Git 的首选且最有效的方式。 创建 Git 别名的主要动机可能是以下一项或多项: 优化:为常用的 Git 命令创建快捷方式。 定制:让 Git 按照您想要的方式运行或支持团队商定的习惯。 记忆:易于记忆的复杂操作快捷键。 在我的博客系列的第 1 部分中,我将带您从非常简单的基础知识开始,介绍只需键入较长命令的 Git 别名,一直到甚至许多经验丰富的 Git 老手从未使用过的更高级功能。 第 2 部分将从这里继续,介绍更高级的概念,并尝试真正“外面”使用 Git 别名,包括一些彻头彻尾疯狂的示例,然后再讨论解决相同需求的替代方案。 学习和理解这些技术,无论是用于从别人那里窃取的别名还是自己冒险突破界限,都将使您成为更高效、更强大的 Git 用户,并有望让您使用 Git 的日常生活变得更加愉快。在此过程中,您可能还会学到一些提示和技巧,并探索您甚至不知道的 Git 角落。 什么是 Git 别名,我们如何设置它们? Git 别名是 Git 子命令的替代,就像 Bash 别名是其他 Bash 命令或脚本的替代一样。 Git 只是允许您定义自己的 Git 命令来执行您想要的操作,并且可以与内置命令无缝地使用。 别名是在 Git 配置层次结构中定义的,但由于我们通常希望它们在我们计算机上的任何地方都可以工作,因此全局配置是它们的自然家园。 您可以通过直接编辑全局配置文件或使用git config命令来添加别名。 要创建您的第一个简单别名,只需尝试: $ git config --global alias....

在局域网多台设备上执行ssh脚本

需要的软件包 需要安装sshpass和nmap 代码示例 run_on_lan_machines.sh #!/usr/bin/env bash USERNAME="czyt" PASSWORD="upwd" SUDO_PASSWORD="supwd" SCRIPT="install_test.sh" REMOTE_SCRIPT_PATH="/tmp/$SCRIPT" IP_RANGE="172.168.1.0/24" # 扫描在线主机 echo "Scanning for hosts with open SSH ports..." nmap -p 22 $IP_RANGE --open -oG scan_result.txt # 提取在线主机IP地址 grep "/open/tcp//ssh/" scan_result.txt | awk '{print $2}' > ip_list.txt # 检查是否有找到的IP地址 if [[ ! -s ip_list.txt ]]; then echo "No hosts with open SSH ports found." exit 1 fi # 逐个IP执行脚本 while IFS= read -r ip; do echo "Uploading and executing script on $ip" # 上传脚本到远程主机 sshpass -p "$PASSWORD" scp -o StrictHostKeyChecking=no "$SCRIPT" "$USERNAME@$ip:$REMOTE_SCRIPT_PATH" if [[ $?...

定制你自己的cockpit

什么是Cockpit Cockpit,官网https://cockpit-project.org是一个基于web的服务器管理界面,可以通过浏览器访问。它提供了一个统一的管理界面,用于管理和监控Linux服务器。以下是Cockpit的一些主要特点: 易用性 提供直观的图形化界面,无需命令行操作 支持多种Linux发行版,如Red Hat、CentOS、Fedora、Debian、Ubuntu等 可以通过浏览器远程访问,无需安装客户端软件 功能特性 系统监控:实时查看CPU、内存、磁盘、网络等系统资源的使用情况 服务管理:启动、停止、重启系统服务 存储管理:管理磁盘分区、LVM、RAID等存储设备 网络配置:配置网卡、防火墙、虚拟网络等网络设置 日志查看:查看系统日志和审计日志 用户管理:添加、删除、修改系统用户和组 软件包管理:安装、更新、删除软件包 安全性 基于角色的访问控制(RBAC),可以为不同用户设置不同的权限 支持SSL/TLS加密,保护数据传输安全 可以与LDAP、Kerberos等认证系统集成 总的来说,Cockpit是一个功能强大、易用的Linux服务器管理工具,可以大大提高管理员的工作效率。它适用于各种规模的Linux服务器,是Linux系统管理的一个不错的选择。 安装 cockpit在主流操作系统都一键安装的包。请参考https://cockpit-project.org/running.html的Installation & Setup部分 自定义你的cockpit 修改登陆界面标题 修改 /etc/cockpit/cockpit.conf [WebService] LoginTitle=gophers land 更多参数,请参考 https://cockpit-project.org/guide/latest/cockpit.conf.5.html 编写一个rustdesk id viewer页面 创建目录结构 mkdir -p /usr/share/cockpit/rustdesk cd /usr/share/cockpit/rustdesk cockpit支持从下面两个位置获取配置 ~/.local/share/cockpit 在您的主目录中。它用于用户特定的包和您正在开发的包。您可以即时编辑这些内容并刷新浏览器以查看更改。 /usr/share/cockpit 和 /usr/share/local/cockpit是可供系统所有用户使用的已安装软件包的位置。更改此路径中的文件需要管理员(“root”)权限。在 Cockpit 运行时,不应更改这些内容。 因为涉及一些js库,我想复用原来的,所以我这里使用的是第二个位置。 可以通过cockpit-bridge --packages 查看已经安装的包: apps Applications /usr/share/cockpit/apps base1 /usr/share/cockpit/base1 metrics /usr/share/cockpit/metrics network Networking /usr/share/cockpit/networkmanager rustdesk RustDesk ID /usr/share/cockpit/rustdesk shell /usr/share/cockpit/shell static /usr/share/cockpit/static storage Storage /usr/share/cockpit/storaged system Overview, Services, Logs, Terminal /usr/share/cockpit/systemd updates Software updates /usr/share/cockpit/packagekit users Accounts /usr/share/cockpit/users 创建文件 manifest....

在树莓派3b上搭建GitHub Linux arm64 runner

最近需要在GitHub Action上自动构建一些软件,但是Github 不提供Arm64的runner,自能自建。 github 官方准备在2024年底开始为开源项目提供arm的runner 树莓派设置 Arch系统 安装基本软件 安装下面的这些软件,不同的构建可能有所区别: sudo pacman -S curl zip unzip tar cmake ninja docker Github Action 依赖于docker,所以我们需要安装好docker sudo pacman -S docker 然后将当前用户添加到docker的组 sudo usermod -aG docker $USER 查看和确认: grep docker /etc/group Ubuntu系统 安装基本软件 docker 安装前的配置 # 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....

一些RustDesk部署的笔记

自建 Server 搭建中转服务器 参考官方 https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/install/ 一些有用的链接: https://github.com/infiniteremote/installer/blob/main/install.sh 搭建api server api server是高级版的功能,但是我们可以通过自建api server实现设备id同步等部分操作。推荐使用: https://github.com/kingmo888/rustdesk-api-server https://github.com/sctg-development/sctgdesk-server 这个是带web console的用户名和密码分别是admin和Hello,world! https://github.com/lantongxue/rustdesk-api-server https://github.com/v5star/rustdesk-api https://github.com/lejianwen/rustdesk-api 更多的实现,可以去Github 搜一搜 https://github.getafreenode.com/topics/rustdesk-api-server 客户端自定义部署 基于Github Action 参考官方 https://rustdesk.com/docs/en/dev/build/all/ 对于arm版本的自动化构建,Github Action暂时不提供arm64的runner 基于配置文件和命令行 RustDesk有用的命令行参数 --password 可用于设置永久密码。 --get-id 可用于检索 ID。 --set-id 可用于设置ID,请注意ID应以字母开头。 --silent-install 可用于在 Windows 上静默安装 RustDesk。 RustDesk 配置文件 RustDesk的配置文件,windows为"%appdata%\RustDesk\config\RustDesk2.toml"linux则为~/.config/rustdesk/RustDesk2.toml,下面是一个完整的配置文件示例: rendezvous_server = 'rustdesk.xxxx.tech:21116' nat_type = 1 serial = 0 [options] # 对应安全选项->权限中的完全访问 access-mode = 'full' # 对应安全选项->安全->允许IP直接访问 direct-server = 'Y' # 对应安全选项->安全->自动关闭不活跃的会话 allow-auto-disconnect = 'Y' stop-service = 'Y' key = 'KEY' relay-server = 'IPADDRESS' api-server = 'https://IPADDRESS' custom-rendezvous-server = 'rustdesk....

Windows ollama一些有用的批处理脚本

模型设置 模型路径设置 @echo off echo set models storage path to current Dir %~dp0models SETX OLLAMA_MODELS %~dp0models echo setup done timeout 5 这个脚本会将模型的存储路径放在批处理相同目录的models目录下 启动 一键启动ollam和对应模型 @echo off echo start ollama... start %~dp0ollama.exe serve echo boot model start %~dp0ollama.exe run phi3

Nom指南中文版

原文https://tfpk.github.io/nominomicon/introduction.html,使用Google进行机翻 nominomicon 欢迎阅读这本关于Nom的书;使用 Nom 解析器发挥巨大作用的指南。本指南将向您介绍使用 Nom 的理论和实践。 本指南仅假设您: 想学习Nom, 已经熟悉 Rust。 Nom 是一个解析器组合器库。换句话说,它为您提供了定义以下内容的工具: “解析器”(接受输入并返回输出的函数),以及 “组合器”(采用解析器并将它们组合在一起的函数!)。 通过将解析器与组合器相结合,您可以从简单的解析器构建复杂的解析器。这些复杂的解析器足以理解 HTML、mkv 或 Python! 在我们出发之前,列出一些注意事项很重要: 本指南适用于 Nom7。 Nom 发生了重大变化,因此如果您正在搜索文档或 StackOverflow 答案,您可能会找到较旧的文档。一些常见的表明它是旧版本的指标是: 2021 年 8 月 21 日之前的文档 named! 宏的使用 使用 CompleteStr 或 CompleteByteArray 。 Nom 可以解析(几乎)任何东西;但本指南几乎完全专注于将完整的 &str 解析为事物。 第一章:Nom 方式 首先,我们需要了解 nom 思考解析的方式。正如简介中所讨论的,nom 让我们构建简单的解析器,然后组合它们(使用“组合器”)。 让我们讨论一下“解析器”实际上是做什么的。解析器接受输入并返回结果,其中: Ok 表示解析器成功找到了它要查找的内容;或者 Err 表示解析器找不到它要查找的内容。 如果解析器成功,它将返回一个元组。元组的第一个字段将包含解析器未处理的所有内容。第二个将包含解析器处理的所有内容。这个想法是解析器可以愉快地解析输入的第一部分,而无法解析整个内容。 如果解析器失败,则可能会返回多个错误。然而,为了简单起见,在接下来的章节中,我们将不对这些进行探讨。 ┌─► Ok( │ what the parser didn't touch, │ what matched the regex │ ) ┌─────────┐ │ my input───►│my parser├──►either──┤ └─────────┘ └─► Err(....