easy-upload 是一个支持在不同的 PT 站点之间转载,自动填写发布信息的用户脚本 Userscript,非常方便使用 PT 的朋友使用。自动填写上传页表单,支持内外站互转,支持 PT 站间快速检索。
如果不清楚 PT 是什么,可以注册PT GTK 来了解使用。我也会在站内不定期的发送其它站点的邀请。也欢迎其他爱好者加入站点之后一起讨论。
首先要修改 Tampermonkey 扩展,允许访问文件网址。
在浏览器的 [[Tampermonkey]] 扩展中创建一个新的空白用户脚本,然后将以下内容复制进去,再将 @require
下的文件路径修改为自己本地工程中 .cache/easy-upload.user.js
所在的路径。
// ==UserScript==
// @name debug
// @namespace https://github.com/techmovie/easy-upload
// @version ${version}
// @description ${description}
// @author ${author}
// @require https://cdn.bootcss.com/jquery/1.7.1/jquery.min.js
// @match https://passthepopcorn.me/torrents.php?id=*
// @match http://*/details.php?id=*
// @match https://*/details.php?id=*
// @match https://totheglory.im/t/*
// @match https://beyond-hd.me/torrents/*
// @match https://lemonhd.org/upload_*
// @match https://lemonhd.org/details*
// @match https://blutopia.xyz/torrents/*
// @match https://blutopia.xyz/torrents?*
// @match https://blutopia.xyz/upload/*
// @match https://pt.hdpost.top/torrents?*
// @match https://pt.hdpost.top/torrents/*
// @match https://asiancinema.me/torrents/*
// @match https://asiancinema.me/torrents?*
// @match https://*/upload*
// @match http://*/upload*
// @match http://www.hd.ai/Torrents.upload
// @match http://www.hd.ai/Torrents.index?*
// @match https://broadcity.in/browse.php?imdb=*
// @match https://ptpimg.me
// @grant GM_addStyle
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_openInTab
// @grant GM_xmlhttpRequest
// @grant GM_setClipboard
// @require file:///Users/einverne/Git/easy-upload/.cache/easy-upload.user.js
// ==/UserScript==
(function() {
'use strict';
})();
然后到项目的跟目录下,执行 yarn install 安装依赖包,然后运行 yarn dev
启动工程,有文件改动,.cache 目录下的脚本会自动更新,刷新浏览器即可。
当调试完成,可以执行 yarn build
在 dist 目录中生成最后发布的脚本。同理也可以直接在上面的路径中使用 dist 下的文件,但此时每一次都需要 yarn build
来生成最新的文件。
当完成上述的配置之后,在浏览器中打开 PT 站点(NexusPHP),就会在种子对应的详情页面展示如下的画面,点击其中的 gtk,就可以将其他站点的信息一键补充到 PT GTK 中。
更详细的编译好的版本,可以到这里 下载使用。
开发流程执行如下的命令
yarn install
yarn upgrade
yarn build
uBlock Origin 是一个高效率的网页元素拦截器,也可以作为广告拦截器存在。uBlock 是一个支持多浏览器的扩展程序,包括 Chrome、Firefox、Edge 和 Safari。
uBlock Origin 的主要功能是阻止网页上的广告,包括横幅广告、弹出广告和视频广告。它还可以阻止恶意软件、跟踪器和其他不受欢迎的内容。
与其他类似的广告拦截器不同,uBlock Origin 是一个开源项目,这意味着任何人都可以查看和审查其代码。这使得用户可以信任该扩展程序并确保其安全性。
uBlock Origin 还提供了一些高级功能,如过滤规则和自定义设置。用户可以根据自己的偏好来定制广告拦截器的行为,并选择是否启用某些过滤规则。
默认的情况下,uBlock Origin 内置了如下的屏蔽规则
需要注意的是如果在 Chrome WebStore 中搜索 ublock,那么会出来两个看起来非常相似的 uBlock 插件,请安装 uBlock Origin,并检查起插件介绍,是否指向 GitHub 开源仓库。
uBlock Origin 是一款开源的网页内容屏蔽工具,并不仅仅是一个 Ad Blockers,虽然用户可以导入屏蔽规则来屏蔽广告,但 uBlock 可以实现更多。
今天和朋友电话聊到英语口语,他说自己很长一段时间不说英语,前两天和一个印度人交流的时候虽然能听懂,但是却说不出来的那种痛苦的感觉。我一想到我现在正在学习日语 也有遇到相类似的问题,并且我也需要不时的去联系一下英语口语,于是就搜索了一下,因为之前就知道有一些网站提供真人的 1 对 1 口语聊天服务。但是现在 AI 这么流行,也诞生了和 AI 聊天的工具,之前尝试过一个叫做 Speak 的应用,但今天一搜索发现了另外一个在线和 AI 聊天的网站 —- Trancy。
在 OpenAI 没有推出 ChatGPT 之前,其实每个人的手机都有两个我非常推荐的聊天助手,OK Google 和 Hey Siri。过去我常常把这个语音助手的语言调整成我想学习的语言,比如英语,韩语。这样我就可以让语音识别来纠正我的发音,因为如果我发音不标准,那么识别出来的文字一般就是错误的,通过调整我自己的发音让语音识别 100% 识别出来,基本上在发音上就不存在什么大问题了。然后也可以通过简单的给这两个语音助手发出命令来熟悉这个语言,比如让语音助手设定闹钟,编写备忘录等等。
而本文的主角 Trancy,用官方的说法就是一个 AI 的口语私教,一个永远不会累,一个永远可以和你说话的 AI 老师。其实 Trancy 网站中提供的最重要的功能就是提供一个场景,然后用户可以在这个场景之中和 AI 一起完成对话。
Trancy 提供了两种对话的模式。
但选择完成对话的模式之后,就进入了聊天的界面。和 ChatGPT 不一样的是,在这里,你只能通过语音来和 AI 进行交互。
比如在这个在「免税店购物」 的场景中,AI 就作为你的导购,在上面的跟随模式中,你可以跟读,也可以选择自由对话模式,自己用口语和 AI 进行对话。只需要按空格开始录制,空格结束录制即可。
如果你不满足于内置的预设场景,那也可以通过自定义场景 来联系,在官方文档中可以看到你需要输入几个关键字,然后设定一下对话的次数,就可以很快让 AI 生成一个对话的场景用来自由联系。
出来语音对话之外,网站还提供了一个 AI 教师的功能,这个功能就是文字版的 AI 助手。
可以让 AI
等等。
Trancy 也提供了 Chrome 插件,可以让用户在看 YouTube/Netflix 流媒体的时候,进行沉浸式的学习。然后可以对视频的内容进行学习,比如说可以收藏句子,陌生的单词等等。
官方也推荐了一些可以语言学习的 YouTube Channel。
如果你看到这里觉得 Trancy 不错,可以点击我的邀请链接,你可以额外获得 10 天的高级会员。
不久之前看到 Obsidian 推出了一个官方的插件可以将 Evernote 的笔记导入到 Obsidian 中,于是就把「将 Evernote 笔记导入到 Obisidian」列为了一项我的待办事项,虽然已经很多年没有用 Evernote 了,但里面还有一些摘录,我一直认为笔记只有能被检索到才有价值,而 Obsidian 的检索速度也非常快,虽然没有 OCR,但纯文本的检索如果能被反复找到,那么可能那些笔记还有价值。
如果使用最新版本的 Evernote,那么登录的时候 Evernote 就会弹窗让你付费,或者试用 7 天,如果点击取消只能退出账户。所以这个时候可以下载一个老版本的,比如 7.10 版本的 Evernote。你可以从 MacUpldate 这个网站上下载到老版本的 Evernote。
登录 Evernote 之后等待同步下载笔记,
选中 All Notes,然后 Cmd + A 选中所有的笔记。然后右击,导出笔记,然后勾选「Include tags for each node」。接下来就是漫长的导出时间。
打开 Obsidian,然后在插件安装列表中搜索「Importer」,找到 Obsidian 官方出的插件,下载。之后在侧边栏会多出一个按钮,通过这个按钮调出导入的对话框。
在该对话框中设置刚刚导出的 .enex
文件,然后导出到的文件夹。点击 Import,之后就根据笔记的数量会有一段很长的时间等待。
导入完成之后就能在 Obsidian 的对应的文件夹中找到从 Evernote 中到处的笔记了。
今天在了解一个根据英语搜索日语的网站 —- hiki 的时候,发现这个网站是使用一个叫做 [[Preact]] 的非常轻量的框架写的,然后我就沿着 Preact 的线索去查了一下那些网站是用 Preact 实现的,然后就发现了本文的主人公 —- [[blaze]]。
blaze 是一个基于 P2P 技术的文件共享 Web 应用程序。它允许用户通过直接连接和共享文件,而无需通过云存储服务或中央服务器。使用 blaze,用户可以轻松地共享大型文件、照片、视频等,并与其他用户进行实时的 P2P 传输。该应用程序提供了一个简单直观的界面,使用户能够快速上传和下载文件。blaze 利用 WebRTC 技术实现点对点连接,并使用 WebTorrent 协议进行文件传输。这种去中心化的方法不仅提高了速度和效率,同时也增强了隐私和安全性。
我简单的试用了一下 blaze ,发现真的太神奇了,它是一个文件分享的网站,但是不需要任何的注册,验证,而只需要设备在同一个局域网中就可以相互分享文件。于是为了测试我在 macOS 上打开了 blaze,然后起一个昵称,之后会得到一个链接,然后我在 Android 平板上打开同样的链接,网站就自动找到了局域网中的设备,我测试直接从 macOS 上发送文件,在 Android 上立即就收到了发送的文件。
我测试发送一个大文件,虽然没有跑满全部的局域网带宽,但因为 WiFi 传输的原因,也能维持在 3+M/s 的速度,一个 600+M 的文件,传输的时间也在接受的范围内。
好奇这个网站是如何实现的,但好在这个网站是开源的,并且作者在 README 中也提到了网站使用的技术 —- [[WebTorrent]] 和 [[WebSocket]],文件分享通过 WebTorrent 建立点对点的连接(内部使用 WebRTC)这意味着文件的传输是不需要经过中间服务器的,直接在发送者传输到接受者。需要注意的是这个地方 WebTorrent 其中有一个 Torrent,如果看过我之前的 BitTorrent 协议 一文的读者应该会对这个协议比较了解,WebTorrent 是一个纯 Web 的实现,但是和 BitTorrent 协议一样 tracker 服务器不存储任何文件,只存储 metadata 和必要的文件描述,节点信息等。
Lossless Cut 一款跨平台的 [[FFmpeg]] 的 GUI,可以用来快速、无损地剪辑视频,音频。使用 Lossless Cut,用户可以轻松地选择视频或音频文件并进行剪辑操作。该工具支持各种常见的视频和音频格式,并且能够在不重新编码的情况下进行快速剪辑。
除了基本的剪辑功能之外,Lossless Cut 还提供了其他一些高级功能。例如,它允许用户选择特定的时间段进行裁剪,并且还支持批量处理多个文件。此外,它还提供了一些实用的工具,如帧精确切分、截图等。
Lossless Cut 的界面简洁易用,使得即使对于没有编码经验的用户也能够轻松上手。它还提供了一些预设选项,以便用户能够快速应用常见的剪辑设置。
我经常会有一些简单的视频剪辑需求,比如一个长视频中剪辑部分内容,或者从一个音频文件剪辑部分,之前我都是用 Adobe Premiere 去处理,但是 Adobe Premiere 一方面非常重,另一方面即使是简单地剪辑导出也非常慢,因为会需要进行编码。
功能:
Lossless Cut 的使用非常简单,可以直接将视频拖入应用,或者在应用中打开要处理的视频文件(Ctrl+o)。
点击下方的时间轴,然后 「,」和 「。」 可以对选择点进行微调。
找到剪切点,按下「i」选择开头,然后按下 「o」结束。然后使用右下方的 Export 即可到处视频,此时会发现 LosslessCut 的到处处理几乎是瞬间完成的,因为并不需要重新编码,所以磁盘读写的速度就是导出的速度。
对于音频文件,则是如下的样式。
Lossless Cut 还支持将多个视频文件合并成一个。只需将要合并的视频文件拖入应用中,然后点击左上角的「+」按钮来添加更多的视频文件。在选择完所有要合并的文件后,点击右上角的「Merge」按钮即可开始合并。
但需要注意的是 Lossless Cut 在合并视频时最好保证视频的编解码是一致的。
在视频下方的时间轴上能看到一些自动识别的竖线,这些线是 Lossless Cut 自动识别的关键帧,方便用户定位视频。
展开高级菜单,然后在倒数第二行的工具栏中的第三个图标就是自动显示视频的缩略图。
Space
暂停播放j/l
降低或加快播放速度</>
往前或往后 1 秒,/.
小幅度(帧)调整时间i
标记开始o
标记结束e
导出选取的区段c
导出快照多次想要学习一下 [[Kubernetes]] 但是多次照着搭建环境尝试失败,并且也没有找到合适的落地场景就「放弃」了,但是之前了解的时候看到了轻量级的 k8s 叫做 k3s,然后了解到了一个可以快速搭建 k3s 的项目 [[k3sup]],所以记录一下。
k3sup 是一个可以在任何 Linux 机器上安装并启动 [[k3s]] 的命令行工具,官方宣称可以在 60 秒内启动一个 k3s。k3sup 是一个可帮助快速轻松地在任何地方部署 Kubernetes 集群的工具。它使用 SSH 连接到远程主机并安装 k3s,然后提供一个可用于与集群交互的 kubeconfig 文件。
k3sup 发音为“ketchup”。相对于 k8s 来说,k3s 系统容器数量少,轻量级,并且默认使用 containerd 作为容器运行时,内部的 ingress 使用的是 go 语言开发的 traefik,集成了 SQLite 代替 Etcd,但在多个 master 节点中最好使用 Etcd 组件,来保证数据一致性,从而可以 HA。
k3sup 需要通过 SSH 连接到对应的服务器进行安装操作,所以配置 SSH 免密码登录是必需的。
ks3up join
将节点加入 k3s 集群K3S 部署 Kubernetes 集群,创建集群的 https 证书,Helm 部署 rancher,通过 [[Rancher]] 的 UI 界面手动导入 Kubernetes 集群,使用 Kubernetes 集群。
k3sup 使用 Go 编写,直接下载编译好的二进制文件就能使用。
参考官网:
curl -sLS https://get.k3sup.dev | sh
sudo install k3sup /usr/local/bin/
k3sup --help
在本地安装 k3s
k3sup install --local
# 指定用户
k3sup install --local --user=$USER --local-path ./kubeconfig
# 指定版本
k3sup install --local --user=$USER --local-path ./kubeconfig --k3s-version=v1.19.5+k3s1
运行 k3sup:
k3sup install --ip <your_ip> --user username
执行该语句之后,会在 IP 主机上安装 k3s 并启动,作为 master。
# Test your cluster with:
export KUBECONFIG=~/kubeconfig
kubectl config set-context default
kubectl get node -o wide
其他的常用参数
--local
无需通过 SSH,安装在本地--local-path string
本地路径,kubeconfig
文件的本地路径--merge
合并到 kubeconfig
文件--ssh-key string
用于远程登录的 SSH key 密钥--ssh-port int
如果使用非标准端口,可以使用该参数指定端口--user string
SSH 登录用户名注意这里的 agent_ip 为另一台机器,而 server_ip 为 master 节点:
k3sup join --ip <agent_ip> --server-ip <server_ip> --user username
其他常用参数
--server-ssh-port int
连接服务器的端口在 server 节点上:
/usr/local/bin/k3s-uninstall.sh
在 agent 节点上:
/usr/local/bin/k3s-agent-uninstall.sh
对于失效的节点可以通过如下的命令移除
kubectl delete node <node name>
kubectl 的自动补全可以在这里查看。
source <(kubectl completion zsh) # set up autocomplete in zsh into the current shell
echo '[[ $commands[kubectl] ]] && source <(kubectl completion zsh)' >> ~/.zshrc # add autocomplete permanently to your zsh shell
K3s 是一个轻量级的 Kubernetes 发行版,旨在简化和加速 Kubernetes 的部署和管理。它专注于提供一个更小、更快的 Kubernetes 版本,适用于边缘计算和资源有限的环境。K3s 具有更小的二进制文件大小、更低的内存和 CPU 占用,同时仍然提供了 Kubernetes 的核心功能。
[[Rancher]] 是一个开源的容器管理平台,用于部署和管理 Kubernetes 集群以及其他容器编排平台。Rancher 提供了一个易于使用的用户界面,用于集中管理和监控多个 Kubernetes 集群,并提供了诸如应用程序编排、存储和网络管理等高级功能。Rancher 可以与各种底层的容器编排平台集成,包括 Kubernetes、K3s、Docker Swarm 等。
也可以使用 kubectl get service -A
来查看使用的端口。
在学习日语的过程中知道了 Comprehensible Input(可理解输入)这样一个语言学习的思想,它的核心就是「只有当我们能够理解时,我们才能获取信息」。
可理解输入假说(Comprehensible Input Hypothesis)是由语言学家 Stephen Krashen 提出的一个二语习得理论,这个理论简单地说就是
「可理解输入」Comprehensible Input 最早是由美国语言学家 Krashen 在上世纪 80 年代初在输入假设理论(The Input Hypothesis) 中提出的,所谓「可理解输入」指的是学习者听到或读到的可以理解的语言材料,这些材料的难度应该稍微高于学习者目前已经掌握的语言知识。
Krashen 认为在语言习得的过程中,可理解输入是一个动态发展的过程,人是通过理解比现在语言水平略高的语言输入,再通过不断地累积从而习得语言的。
有效的可理解输入,对输入的材料有如下的要求,真实,可理解,相关性,趣味性。真实性指的是没有被简化或改动,包含生活中最自然的语言。可理解指的是学习者对输入的语言信息有最基本的了解,对内容有基本的了解,否则学习者接触的文字和声音只是涂鸦和噪音,而相关性和趣味性则是让学习者自身对这些内容产生兴趣必不可少的。
Krashen 鼓励使用真实有意义的语言材料,比如 YouTube 视频,Podcast 的对话,或者时事,娱乐新闻等。
可理解输入强调听力和阅读的重要性,通过创造轻松,低焦虑的语言环境,自然而然地学习语言。
我个人是近两年才了解到「可理解输入假说」这个理论,但是我自己的亲身经历恰恰好给这个理论做了一个佐证,我过去在学习英语和韩语的过程中,恰恰是我高频听播客的时间,我恰好找到了一个自学韩语的播客,Talk To Me In Korean,在我稍微了解了韩语的发音规则之后,就从它们的第一期开始听,因为每一期节目时长不是很长,加上当时我基本上走路通勤,所以在长达 2~3 年的时间里面,通过关键字,再到句子,最后能理解个大概七八成左右,直到有一天,我想看的韩国电影我实在找不到中文字幕,我就强行通过英文字幕,加上知道的一些韩语,然后发现竟然能看懂了,我还记得这部片子叫做《6/45 육사오》,中文好像翻译成《乐透大作战》。
去年的时候有介绍过一款 Web3 下的协同文档 Skiff,虽然我自己没有在深入使用,但是一直都在观察它的发展,之前也简单的介绍过 Skiff 邮箱,但当时 Skiff 提供的域名邮箱只能够使用 @skiff.com
自己的邮箱后缀,自定义的域名邮箱需要付费。但是今年 Skiff 周年的时候,免费的用户也可以绑定一个域名,因为 Skiff 提供了不错的 Web 界面,并且还提供了不错的客户端,所以如果有朋友不想自己折腾,先尝试一下 Skiff 提供的邮箱也不错。
Skiff 已经被 [[Notion]] 收购,将在 6 个月内关闭服务。
Skiff 本来是一个 Web3 下的协同文档工具,可以帮助用户在区块链上创建和共享文档。但是随着它业务的扩张,现在也提供了邮箱服务,感觉就是要对标 Web 3 下面的 Google 套件,目前 Skiff 不仅有协同文档,邮件,还有日历,同步云盘。
Skiff 的主要特点包括:
优点 :
缺点:
Skiff 邮箱可以使用传统的注册(用户名密码),也可以使用 Web 3 的 [[MetaMask]] 小狐狸来登录使用。
Skiff 目前提供了三档付费方案,ESSENTIAL,PRO,BUSINESS,另外 Skiff 也支持使用加密货币支付。
如果有人想要使用自定义域名邮箱,不妨试试购买 EV HOST 我在维护的服务,使用 EV_MAIL 可以享受 6 折优惠,最低 30 元一年,无限制域名,无限制别名,但不能恶意滥用,不能发送垃圾邮件,另外每个小时有 300 封邮件的发件限制。购买之后只需要进行简单地几条 DNS 设置就能立即开始使用。我过去也有写过很多关于电子邮件的文章,可以在博客中搜索到。调研的邮箱服务 ,中间还考虑过自建域名邮箱 Mailu, Mailcow 。
Obsidian 是我使用频率最高的笔记软件了,所以 Obsidian 的改造不能少。
插件
这是我利用新项目学习 [[Gatsby]] ,通过 WebStorm 提供的 AI Assistant 可以快速的对代码进行提问,以加快学习的速度和提高学习效果。
Cursor.so 是一款 AI 支持的编辑器,之前也有推荐过,在我主力的 IntelliJ IDEA 之外,有些时候看代码会打开 Cursor,边看代码边提问,最近在看 [[TypeScript]] 的项目,给我带来了非常大的帮助,我再没有打开用 Google 搜索过,并且我也不需要打开 TypeScript 的开发文档从头看到尾。
下面的演示是我查看一个使用 Ruby 编写的项目,其中有一段方法是对 XML 文件进行签名,我在找到对应代码的前提下,在 AI 对话的帮助下使用 Java 重新实现了一遍。
至此,占据我日常大部分时间的工具上都加上了 AI,还有之前提及的 Raycast AI,macOS 上好用的 ChatGPT 客户端,在命令行下使用 GitHub Copilot CLI。我发现最近是真的三句话离不开 AI 了。